Flutter Gradle配置新人篇
Flutter Build IOS版本基本都很顺畅,所以文中就不在说明。但是如果你使用flutter create的项目,使用模板中的gradle配置编译Android APK总是会遇到一些问题。下面,我们一步一步来避开这些坑。
由于Flutter编译是原生的编译,在IOS下使用Xcode。在Android上自然使用Gradle。所以你遇到的问题,基本上就是gradle配置的问题。
1、Android X
如果你的项目不支持AndroidX,可能有的插件就没有办法编译了。如果你创建项目的时候选择了支持AndroidX,那么你可以跳过这个环节。
如何判断你的项目是否支持AndroidX
打开android/gradle.properties 或 .android/gradle.properties
看看里面是否包含了
android.useAndroidX=true
android.enableJetifier=true
如果你新建一个项目,为了让Flutter支持Android,那么你需要使用下面的命令
flutter create --androidx -t <project-type> <new-project-path>
手动升级
1、修改 android/gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
2、更新 android/build.gradle,将过去的版本更新为3.3.0至少
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
}
3、修改 android/gradle.properties
android.enableJetifier=true
android.useAndroidX=true
4、现在修改SDK version,打开 android/app/build.gradle targetSdkVersion最少28
defaultConfig {
minSdkVersion 17
targetSdkVersion 28
}
升级AndroidX与否,是根据你自身的情况来决定,不会影响后续的文章内容
2、自动签名配置
gradle编译时,可以为你自动签名,这样省去了编译后手动签名的步骤。
1、创建签名文件
此处忽略如何创建.keystore格式的签名,请自行创建keystore签名。
2、新增 key.properties文件
在android目录中创建一个key.properties文件,这个文件将包含签名文件的重要信息
文件内填入一下配置信息
storePassword= 自己配置的签名密码
keyPassword= 自己配置的签名密码
keyAlias= keyAlias
storeFile= .keystore文件存储目录
3、在 android/app/build.gradle下按照下面的格式,新增到 android{} 内
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
并修改同级的buildTypes,在release中使用配置中的签名,debug模式无需签名
buildTypes {
release {
signingConfig signingConfigs.release
}
debug {
}
}
3、abi配置
gradle打包时,将自动把不同的abi(兼容不同处理器的ABI)打包到APK中,默认模板中没有配置其他的ABI,所以会出现有的设备无法安装或者安装后闪退的情况。
下面我们将 android/app/build.gradle 中的 buildTypes 修改。
我们区分release和debug修改。debug中的abi根据你的调试设备进行配置
下面的配置基本可以兼容市面上很多的安卓设备,包含了64位的ABI,试错后,这是最佳的配置。仅供参考,根据自身情况修正。
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
ndk{
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
abiFilters.clear()
}
}
debug {
ndk {
//调试的时候用模拟器的就可以了,不然调试打包安装太慢
abiFilters "x86"
}
}
}
4、编译打包
现在你可以使用flutter build apk来进行编译。默认的情况下 flutter build apk即为--release。
注意:Flutter官方推荐使用 flutter build apk --split-per-abi 来分开打包编译不同的ABI版本,Google Play中可以按照不同ABI版本上传。但是国内的基本没有上传时可以区分不同ABI针对不同用户群体的功能,所以我们还是一次性打包。
现在你可以使用 adb install ./android.apk将编译的结果安装到你的设备啦