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这关过了,后面就轻松了。