如何使用Flutter發佈安卓應用
設置應用的名稱,包名、應用圖標和啟動
安卓的應用資源配置在main/AndroidManifest.xml中設置,文件內容如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.gesture_demo"> <!-- io.flutter.app.FlutterApplication is an android.app.Application that calls FlutterMain.startInitialization(this); in its onCreate method. In most cases you can leave this as-is, but you if you want to provide additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> <application android:name="io.flutter.app.FlutterApplication" android:label="gesture_demo" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
Flutter生成的文件建議是大部分內容可以保留不動,但是可以根據需要進行修改。
具體可能要修改的內容如下:
屬性名 | 用途 | 說明 |
---|---|---|
package | 應用包名 | 安卓應用的唯一標識符,一般為com.xxxx.xxx格式 |
android:label | 應用顯示名稱 | 默認為工程名,需要根據實際情況修改 |
android:icon | 應用圖標 | 替換指定的圖標文件即可 |
meta-data android:name |
資源名稱 | 不可更改,用於Flutter生成安卓插件 |
meta-data value |
資源值 | 不可更改,用於Flutter生成安卓插件 |
替換應用圖標
安卓提供瞭如下尺寸的圖標配置文件,在Flutter項目下的android/app/src/main/res對應尺寸目錄下可以應用圖標文件。
尺寸別名 | 圖標大小 | 屏幕尺寸 |
---|---|---|
mipmap-mdpi | 48×48 | 320×480 |
mipmap-hdpi | 72×72 | 480×800,480×854 |
mipmap-xhdpi | 96×96 | 1280*720,720p |
mipmap-xxhdpi | 144×144 | 1920*1080,1080p |
mipmap-xxxhdpi | 192×192 | 3840×2160,4k |
替換啟動頁
應用啟動頁圖片在Flutter項目下的android/app/src/main/drawable下的launch_background.xml配置文件中,默認是一個白色底,xml問卷如下所示:
<?xml version="1.0" encoding="utf-8"?> <!-- Modify this file to customize your launch splash screen --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/white" /> <!-- You can insert your own image assets here --> <!-- <item> <bitmap android:gravity="center" android:src="@mipmap/launch_image" /> </item> --> </layer-list>
註釋掉的部分可以用來設置啟動頁圖片,需要註意部分機型的尺寸未必和啟動頁圖片一致,因此可以設置啟動頁的背景色與啟動頁圖片邊緣一致。
<?xml version="1.0" encoding="utf-8"?> <!-- Modify this file to customize your launch splash screen --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 背景色 --> <item android:drawable="@android:color/white" /> <!-- 啟動頁圖片,也可以添加其他元素 --> <item> <bitmap android:gravity="center" android:src="@mipmap/launch_image" /> </item> </layer-list>
設置訪問權限
在android/app/src下的AndroidManifest.xml(註意不是src/profile文件夾下的AndroidManifest.xml文件)文件中設置應用權限,如訪問網絡,相冊,攝像頭等。開發環境是在android/src/debug的AndroidManifest.xml中設置。下面是一個示例的文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.animation_demo"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <application android:name="io.flutter.app.FlutterApplication" android:label="動畫演示" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
配置版本發佈參數
在android/app/build.gradle文件檢查配置是否正確:
- applicaitonId:應用唯一AppId,如com.lios.helloworld
- versionCode:應用程序版本號
- versionName:版本號字符串
- minSdkVersion:指定最低的API級別
- targetSdkVersion:指定應用程序設計運行的API級別
如下所示:
android { compileSdkVersion 28 sourceSets { main.java.srcDirs += 'src/main/kotlin' } lintOptions { disable 'InvalidPackage' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.animation_demo" minSdkVersion 16 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } 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.debug } } }
這裡面可以看到versionCode和versionName是從flutterVersionCode和flutterVersionName中引入的,其中這兩個變量在build.gradle上面有定義。先從local.properties中讀取,若沒有再在該文件中定義,因此可以在localProperties中設置或在build.gradle中設置(優先取local.properties中的值)。
def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' }
生成應用簽名
創建keystore,如果之前創建過瞭,在key.properties中引入即可。
#其中~/key.jks是將keystore文件key.jks存儲在~/目錄下 keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
按提示輸入密碼和組織信息即可。
輸入密鑰庫口令: 再次輸入新口令: 您的名字與姓氏是什麼? [Unknown]: lag 您的組織單位名稱是什麼? [Unknown]: island-coder 您的組織名稱是什麼? [Unknown]: RD 您所在的城市或區域名稱是什麼? [Unknown]: Coder 您所在的省/市/自治區名稱是什麼? [Unknown]: Island 該單位的雙字母國傢/地區代碼是什麼? [Unknown]: CN CN=lag, OU=island-coder, O=RD, L=Coder, ST=Island, C=CN是否正確? [否]: Y 正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 10,000 天): CN=lag, OU=island-coder, O=RD, L=Coder, ST=Island, C=CN [正在存儲/Users/lag/key.jks]
在android目錄下創建一個key.properties文件,用於引用密鑰庫信息:
storePassword={密鑰庫密碼} # keyPassword={證書密碼} keyAlias=key #對應命令行的-alias後的別名 storeFile=/Users/lag/key.jks #對應命令生成的key.jks的據對路徑
修改配置文件
在build.gradle文件中,在android下增加以下內容:
signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile = file(keystoreProperties['storeFile']) storePassword = 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 build apk
默認按release打包,生成的apk在build.app/outputs/apk/app-release.apk下。
註意事項
修改AndroidManifest.xml文件後,flutter打包可能存在緩存,此時運行下面的命令,清除掉緩存再次打包即可。
flutter clean
以上就是如何使用Flutter發佈安卓應用的詳細內容,更多關於Flutter發佈安卓應用的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Android進程間使用Intent進行通信
- idea下Android各目錄所代表的含義介紹
- BroadcastReceiver靜態註冊案例詳解
- Android中Intent組件的入門學習心得
- Android四大組件之Activity詳細介紹