打包相关问题汇总

来源:15-3 Flutter 构建配置

demonCry

2022-09-11

图片描述
图片描述

通过Flutter Application创建项目时生成的android build.gradle 如上
橙色部分从定义可知是从 android/local.properties里拿的

  1. So, 其实我们可以通过 该 local.properties 来直接定义 VersionCode 和 VersionName?

  2. 另外, 黄色部分的 flutter (flutter.minSdkVersion等) 是哪里定义的呢? 我们怎么修改呢?

  3. 上面的compileSdkVersion是撒? 和我们的min/targetSdkVersion有什么关系?

  4. 高版本是兼容低版本的吗? 比如我们targetSdkVersion为31, 但是我们的手机其实是 android10(sdk为29), 我们的手机能跑起来吗

  5. 我们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开发不太熟,所以以上是个人认为比较容易理解的解释,如果针对其中一些点想作深入的了解,欢迎继续留言


0
0

基于Flutter 3.x 实战跨平台仿抖音App混合开发

以短视频APP为例,快速上手原生/Flutter 混合开发

481 学习 · 120 问题

查看课程