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