flutter 打包 apk(mac)
阿新 • • 發佈:2020-12-25
flutter 打包 apk
生成簽名檔案
Android在打包之前需要一個簽名檔案,.jks為字尾的檔案。
//生成sign.jks
//keystore 後為檔案路徑
//keysize 檔案大小
//validity 檔案有效時間
//alias 生成金鑰的別名
keytool -genkey -v -keystore ~/sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign
//檢視證書SHA1
keytool -list -v -keystore sign.jks
檔案配置
1、匯入sign.jks
在Flutter工程中/android/app/key/sign.jks建立該目錄。要在app目錄下建立key資料夾,然後把sign.jks拖進來。
2、建立key.properties
在Flutter工程中/android/key.properties建立該檔案。內容如下:
storePassword=123456
keyPassword=123456
keyAlias=sign
storeFile=key/sign.jks
配置/android/app/build.gradle檔案
def keystorePropertiesFile = rootProject.file('key.properties')
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
signingConfigs{
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
打包apk
在flutter工程目錄下,執行命令,生成apk
flutter build apk
// flutter run -release 命令打出來的包,只針對當前插入手機來執行的包,體積要小很多
編譯中的錯誤
1、自己專案的minSdkVersion比三方SDK的的minSdkVersion低
報錯資訊:
Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 24 declared in library [:qr_code_scanner] ***********qr_code_scanner/intermediates/library_manifest/release/AndroidManifest.xml as the library might be using APIs not available in 16
Suggestion: use a compatible library with a minSdk of at most 16,
or increase this project's minSdk version to at least 24,
or use tools:overrideLibrary="net.touchcapture.qr.flutterqr" to force usage (may lead to runtime failures)
解決辦法
日誌中給出了三種解決方案:
- Suggestion: use a compatible library with a minSdk of at most 16:將三方庫的minSdkVersion
降低,不可行,自己無法修改對方的SDK的minSdkVersion。 - increase this project’s minSdk version to at least 24:提高自己專案的minSdkVersion大於等於三方的即可。
- use tools:overrideLibrary=“net.touchcapture.qr.flutterqr” to force usage :
在AndroidMainifest.xml中加入下面加上:
<uses-sdk tools:overrideLibrary="三方庫的包名"/>
如果有多個三方庫,可以用逗號隔開進行多個設定
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android,net.touchcapture.qr.flutterqr"/>
2、報錯Error: 與元素型別 “uses-sdk” 相關聯的屬性 “tools:overrideLibrary” 的字首 “tools” 未繫結
在 AndroidManifest 中的manifest xmlns:android="http://schemas.android.com/apk/res/android" 後加上一句
xmlns:tools="http://schemas.android.com/tools"
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
package="com.example.SQMall"></manifest>
3、Gradle sync failed: Could not find method android() for arguments
原因:
根目錄下的 build.gradle 檔案
不能包含 android
區塊。
android 區塊只能包含在 子目錄中的 build.gradle
檔案中。