困擾了一天,終于能正常打包apk安裝了,記錄下打包的流程。建議參考我這篇文章時,同時看下官網的構建說明。
官網構建并發布 Android 應用詳情
1、AS創建Flutter項目
2、cmd執行命令
生成一個sunluyi.jks的文件,可以自行把sunluyi替換)
-alias sunluyi(別名),方便管理都用一個名字
keytool -genkey -v -keystore sunluyi.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sunluyi
然后你會得到一個命名sunluyi.jks
的文件
3、cmd執行命令,查看文件詳情
keytool -list -v -keystore sunluyi.jks
4、把生成好的
.jks
文件放在Flutter
項目android/app
目錄下
并在android
目錄下手動創建key.properties
文件
key.properties
文件內容就是第二步自己設置的口令密碼和別名storeFile
對應的文件路徑./sunluyi.jks
(app目錄)
storePassword=sunluyi
keyPassword=sunluyi
keyAlias=sunluyi
storeFile=./sunluyi.jks
5、修改
/android/app/build.gradle
文件
下邊代碼中我標注了哪些是新增的內容,哪些是修改的內容
plugins {id "com.android.application"id "kotlin-android"// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.id "dev.flutter.flutter-gradle-plugin"
}// 新增內容 ↓
def localProperties = new Properties()
def localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) {localPropertiesFile.withReader("UTF-8") { reader ->localProperties.load(reader)}
}def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
if (flutterVersionCode == null) {flutterVersionCode = "1"
}def flutterVersionName = localProperties.getProperty("flutter.versionName")
if (flutterVersionName == null) {flutterVersionName = "1.0"
}def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}// 新增內容↑android {namespace = "com.sunluyi.app.flutter_sunluyi"compileSdk = flutter.compileSdkVersionndkVersion = flutter.ndkVersioncompileOptions {sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = JavaVersion.VERSION_1_8}defaultConfig {// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).applicationId = "com.sunluyi.app.flutter_sunluyi"// You can update the following values to match your application needs.// For more information, see: https://flutter.dev/to/review-gradle-config.minSdk = flutter.minSdkVersiontargetSdk = flutter.targetSdkVersion// 修改內容 ↓versionCode = flutterVersionCode.toInteger()versionName = flutterVersionName// 修改內容 ↑}// 新增內容 ↓signingConfigs {release {keyAlias = keystoreProperties['keyAlias']keyPassword = keystoreProperties['keyPassword']storeFile = keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : nullstorePassword = keystoreProperties['storePassword']}}// 新增內容 ↑buildTypes {release {// TODO: Add your own signing config for the release build.// Signing with the debug keys for now, so `flutter run --release` works.// 修改內容 ↓signingConfig = signingConfigs.release// 修改內容 ↑}}
}flutter {source = "../.."
}
6、最后你可能還需要配置應用的權限
/android/app/src/main/AndroidManifest.xml
目錄
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><applicationandroid:label="[project]"...</application>...// 這里是新增的權限<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
最后根目錄執行flutter build apk
打包成apk文件。
打包時有個提示警告:
Warning: SDK processing. This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.
記錄下如何解決。
1、cmd執行:flutter doctor -v
下圖是我解決過警告的,最開始是Platform android-35, build-tools 34.0.0
百度了下解決方案:
在設置/Android SDK
中最開始我是勾選的35,換成下方的勾選之后,再次執行
flutter doctor -v
得到:Platform android-35, build-tools 34.0.0
重新執行flutter build apk
后沒有警告,完成了打包流程。
關于混淆
自己還不清楚哪些插件需要混淆,也不太理解混淆的意思,先不記錄。
這篇文章內容我是創建的新項目進行打包測試的。
后邊把自己用到的第三方插件在pubspec.yaml
配置后,也是可以正常打包安裝的。
我的運行環境,希望這篇文章能對你有所幫助