2、Android签名配置:生成keystore、配置key.properties、Gradle签名配置实战
说到Android签名,我刚开始做Flutter开发时也踩过不少坑。说白了,签名就是给你的App盖个章,证明它是你开发的。没有这个章,应用商店根本不认你。
今天咱们就把Android签名这件事彻底讲清楚。从生成密钥文件,到配置签名信息,再到Gradle里整合,一步不落。
2.1 什么是keystore?为什么要用它?
keystore就是一个加密的密钥库文件。它里面存着你的私钥和证书。每次打包时,Gradle会用这个私钥给你的APK签名。
你想想看,如果没有签名,任何人都可以篡改你的App然后重新打包。签名机制就是为了防止这种情况。
核心要点:keystore文件一定要妥善保管。丢了它,你以后就没法更新应用商店里的App了。我见过有人把keystore放在桌面,结果重装系统后欲哭无泪。
2.2 生成keystore文件
Android提供了keytool工具来生成keystore。这个工具在JDK里自带,不用额外安装。
打开终端,执行下面这条命令:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
我来解释一下每个参数的意思:
| 参数 | 说明 |
|---|---|
| -genkey | 生成密钥对 |
| -keystore | 指定输出的keystore文件名 |
| -alias | 密钥别名,后面配置时会用到 |
| -keyalg RSA | 使用RSA加密算法 |
| -keysize 2048 | 密钥长度2048位,够用了 |
| -validity 10000 | 有效期10000天,约27年 |
执行后,系统会问你一些信息:
- 输入密钥库密码(记好了!)
- 确认密码
- 输入姓名、组织单位等信息
- 最后确认
我的习惯:密码我一般用密码管理器存起来。千万别用123456这种,也别跟别人共用。曾经有个同事把密码写在便签纸上贴在显示器上...嗯,后来被领导批评了。
生成成功后,你会得到一个my-release-key.keystore文件。把它放到项目的android/app/目录下。
2.3 配置key.properties文件
有了keystore,接下来要告诉Flutter怎么用它。我们需要创建一个key.properties文件。
在android/目录下新建一个文件,命名为key.properties。内容如下:
storePassword=你的密钥库密码
keyPassword=你的密钥密码
keyAlias=my-key-alias
storeFile=../app/my-release-key.keystore
这里要注意几点:
storePassword是生成keystore时输入的密码keyPassword通常和storePassword一样,也可以单独设置keyAlias要和生成时指定的别名一致storeFile是keystore文件的相对路径
重要提醒:千万不要把key.properties提交到Git仓库!我建议在.gitignore里加上这一行:
android/key.properties
否则你的密码就全网公开了。别问我怎么知道的...
2.4 Gradle签名配置实战
最后一步,修改android/app/build.gradle文件。我们要让Gradle读取key.properties,并在打包时使用签名信息。
首先,在文件顶部添加读取配置的代码:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
这段代码的意思是:如果key.properties存在,就加载它。不存在的话,就跳过。这样开发时不影响debug模式。
然后,找到android代码块里的buildTypes,改成这样:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
// 其他配置...
}
}
配置完成后,运行flutter build apk --release,你就会发现打包出来的APK已经带签名了。
验证方法:用这个命令查看APK签名信息:
keytool -printcert -jarfile app-release.apk
如果能看到你的证书信息,说明签名成功了。
2.5 常见问题与避坑指南
配置过程中,有几个地方容易出问题:
- 路径错误:storeFile的路径是相对于
android/app/目录的。如果你把keystore放在别处,记得调整路径。 - 密码不匹配:生成keystore时输入的密码和key.properties里写的不一致,Gradle会报错。
- 别名写错:keyAlias必须和生成时一致,大小写也要注意。
我曾经遇到过一个坑:升级Flutter版本后,Gradle配置变了,签名突然失效。后来发现是signingConfigs代码块的位置不对。记住,signingConfigs一定要放在buildTypes前面。
好了,到这里Android签名配置就完成了。你想想看,其实步骤并不多:生成keystore、写key.properties、改build.gradle。但每一步都很关键,少一个环节,你的App就没法上架。
下一章我们会聊iOS的签名配置。iOS那边更麻烦一些,但套路差不多。先把Android这关过了,后面就轻松了。