打包相关问题汇总
来源:15-3 Flutter 构建配置

demonCry
2022-09-11
通过Flutter Application创建项目时生成的android build.gradle 如上
橙色部分从定义可知是从 android/local.properties
里拿的
-
So, 其实我们可以通过 该
local.properties
来直接定义 VersionCode 和 VersionName? -
另外, 黄色部分的 flutter (flutter.minSdkVersion等) 是哪里定义的呢? 我们怎么修改呢?
-
上面的compileSdkVersion是撒? 和我们的min/targetSdkVersion有什么关系?
-
高版本是兼容低版本的吗? 比如我们targetSdkVersion为31, 但是我们的手机其实是 android10(sdk为29), 我们的手机能跑起来吗
-
我们android studio Project Structure里设置的sdk又起什么效果呢?会影响和build.gradle里的配置吗?
1回答
-
马超老师
2022-10-05
这里涉及到的主要是Android中的Gradle项目管理配置方式。
1、可以使用local.properties来直接定义 VersionCode 和 VersionName。
这个其实可以理解为宏定义或者常量声明。我们可以直接给VersionCode赋值,也可以定义一个常量叫VERSION_CODE,然后把常量赋值给VersionCode,好处和常量一样,可读性高,替换方便,如果想要改版本号,那么直接修改常量定义就可以了。
但是要注意的是,和代码一样配置常量的声明不一定非要在local.properties文件中,我们可以其他配置文件中声明常量,然后直接去引用它即可,具体在哪里声明取决于项目模块的划分。
2、其实理解上问题1,这个也好解释了。我们可以在配置文件中定义一个类似flutter{}的配置块,然后在这个block中声明常量,如:minSdkVersion,然后在其他地方直接使用flutter.minSdkVersion,就和在代码中使用常量一样了。
3、这三个SdkVersion都是指Android版本号,具体是和Android原生开发强相关的东西,下面简单介绍一下:
compileSdkVersion:编译版本号。通知Gradle我们想用哪版本的Android SDK 编译你的App。不同Level的SDK对应不同的API,这个配置只影响编译,会在编译期给你一些warring或者提示,不会影响实际运行;
minSdkVersion:这个好理解,就是你的app支持的最低Android版本号;
tartgetSdkVersion:指定你实际运行的目标版本号。这个版本号通常是经过了反复测试验证完全没有问题的版本。这时候当你的app运行在更高版本的Android系统上时,系统会选择性的给你提供高版本的新功能(因为系统认为你还没有做过适配,自动做向下兼容处理),这个主要是在做完全功能测试及线上灰度稳定之后才会设置的值
4、Android是向下兼容的,但是有一个minSdkVersion的限制,如果低于minSdkVersion会安装失败
5、android studio Project Structure里的sdk设置其实就是图形化界面的local.properties里的sdk.dir,gralde在编译的时候会读取这个sdk值,并使用这个路径下的sdk编译。所以会影响编译结果
因为很多同学对原生Native开发不太熟,所以以上是个人认为比较容易理解的解释,如果针对其中一些点想作深入的了解,欢迎继续留言
00
相似问题