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將編譯的結果安裝到你的設備啦