创建一个密钥库
打开Flutter的开发文档,进入配置 key store 的页面,请注意以下红线,是很容易忽略的地方
找到Java源文件
$ /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
错误信息
$ /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
错误: 找不到或无法加载主类 keytool
修改后,
$ /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/keytool -genkey -v -keystore /upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
又报错了:keytool 错误: java.io.FileNotFoundException: /upload-keystore.jks (Read-only file system)
将文件生成个到其他目录,例如 Mac路径:~/platform, windows 路径:D:/platform
$ /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/keytool -genkey -v -keystore /upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -keystore ~/platform/android/keytool/android.key
生成成功:
从应用程序引用密钥库
创建一个名为的文件[project]/android/key.properties
,其中包含对密钥库的引用:
storePassword=<password from previous step> //密钥库密码 keyPassword=<password from previous step> //密钥密码 keyAlias=upload // 密钥标示名 storeFile=<location of the key store file, such as /Users/<user name>/upload-keystore.jks> //密钥库存放的路径
请注意红色部分,千万不要忽略,因为我已经被坑的很惨很惨了,
以下是我代码的部分,你可以按照你的填写
storePassword=1234567890 // 查看下图 keyPassword=1234567890 //查看下图 keyAlias=mykey // 查看下图 storeFile=/Users/<yourname>/android.key
配置Gradle登录
通过编辑[project]/android/app/build.gradle
文件,将gradle配置为在发布模式下构建应用程序时使用上载密钥。
1. 在该android
块之前,从属性文件中添加密钥库信息:
def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } android { ... }
将key.properties
文件加载到keystoreProperties
对象中。
2. 更换buildTypes
块:
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 keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release } }
您的应用的发布版本现在将自动签名。
注意: 您可能需要flutter clean
在更改gradle文件后运行。这样可以防止缓存的版本影响签名过程。
生成APK
直接在终端中输入:
flutter build apk
这时候就打包成功了