Flutter中文网上的教程地址[ https://flutterchina.club/android-release/ ]
首先电脑里安装Java JDK,因为keytool命令是Java JDK中的一部分。
app签名
在终端输入:
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
会出现一下信息,进行填写:(密钥库口令 下面会用到)
输入密钥库口令: abc123999
再次输入新口令: abc123999
您的名字与姓氏是什么?
[Unknown]: wang
您的组织单位名称是什么?
[Unknown]: 没单位
您的组织名称是什么?
[Unknown]: 公司
您所在的城市或区域名称是什么?
[Unknown]: 香港
您所在的省/市/自治区名称是什么?
[Unknown]: 香港
该单位的双字母国家/地区代码是什么?
[Unknown]: ZG
CN=wang, OU=没单位, O=公司, L=香港, ST=香港, C=ZG是否正确?
[否]: y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRS) (有效期为 10,000 天):
CN=wang, OU=没单位, O=公司, L=深圳, ST=广东省, C=ZG
输入 <key> 的密钥口令
(如果和密钥库口令相同, 按回车):
[正在存储/Users/ntdev1/key.jks]
这时会产生一个key.jks文件,按照上面的提示找到这个文件,并且把它复制到 <app dir>/android
下面。
创建key.properties
创建一个名为 <app dir>/android/key.properties
的文件,其中包含对密钥库的引用:
storePassword=abc123999
keyPassword=abc123999
#这个值取决于你在终端输入的第一个命令,结尾的那个单词
keyAlias=key
storeFile=./../key.jks
在gradle中配置签名
通过编辑 <app dir>/android/app/build.gradle
文件为您的应用配置签名。
1.替换
android {
为
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
2.替换
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
}
}
为
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
开启混淆
这个我没加。
添加允许请求网络
要分别修改两个文件:
- 编辑
<app dir>/android/app/src/profile/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yn.ktwo">
<!-- 开始 -->
<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" />
<!-- 结束 -->
</manifest>
- 编辑
<app dir>/android/app/src/main/AndroidManifest.xml
...
</application>
<!-- 开始(不要放在 application 里) -->
<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" />
<!-- 结束 -->
</manifest>