步骤1 创建 keystore(如果已经创建,请跳过)
- Windows+R,cmd打开终端,运行:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
- 输入必要信息
- 在用户目录下
C:\Users\用户名目录\my-release-key.keystore
,生成了签名
步骤2 将的签名证书 copy 到 android/app 目录下
步骤3 引用应用程序中的 keystore
创建一个名为 <app dir>/android/key.properties
的文件,其中包含对密钥库的引用:
storePassword=<password from previous step>
keyPassword=<password from previous step>
keyAlias=key
storeFile=<location of the key store file, e.g. /Users/<user name>/key.jks>
//示例:
storePassword=000000
keyPassword=000000
keyAlias=my-key-alias
storeFile=my-release-key.keystore
步骤4 在 gradle 中配置签名
通过编辑 <app dir>/android/app/build.gradle
文件为您的应用配置签名:
- 在android{}前面加上:
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
- 在buildTypes {前面加上:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
步骤6 修改 App 名称和图标
修改应用名称
打开位于 <app dir>/android/app/src/main/
中的 AndroidManifest.xml 文件,找到 application 节点,编辑 application 标签的android:label
, 修改应用的名称。
修改应用图标
- 使用 Hbuilder 工具快速生成应用图标;
- 在
<app dir>/android/app/src/main/res/
目录中,将图标文件放入使用配置限定符命名的文件夹中。把自己生成的图标,按照规范的名称和大小,覆盖 Flutter 的默认图标。
步骤5 构建一个发布版(release)APK
- 在项目根目录下中打开终端(或者直接在编辑器的终端中),运行
flutter build apk
步骤6 安装apk
- 安装在模拟器
运行
flutter install
- 安装在真机
在项目的flutter_tets\build\app\outputs\apk\release
目录下可以看到apk,复制到手机上之后,正常安装即可。
踩坑
真机发布之后,无法发送网络请求。Android应用需要进行网络请求时,需要在AndroidManifest中注册网络权限。
- 1
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- 2 在AndroidManifest中的application添加一句
android:usesCleartextTraffic="true"