首先用keytool.exe生成一个签名密钥
在Windows上keytool命令放在JDK的bin目录中(比如默认安装路径C:/Program Files/Java/jdkx.x.x_x/bin里面,或者搜索 keytool.exe 所在文件夹)
在命令行中输入以下命令
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
这条命令会要求你输入密钥库(keystore)和对应密钥的密码,然后设置一些发行相关的信息。全部填写后,会问你是否正确,按下y和回车即可。该密钥有效期为10000天。--alias参数后面的别名是你将来为应用签名时所需要用到的,所以记得记录这个别名。
最后它会在同级目录里生成一个 my-release-key.keystore 的密钥库文件。
注意,如果出现下面的错误:
keytool 错误: java.io.FileNotFoundException: my-release-key.keystore (拒绝访问。)
java.io.FileNotFoundException: my-release-key.keystore (拒绝访问。)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at sun.security.tools.keytool.Main.doCommands(Main.java:1194)
at sun.security.tools.keytool.Main.run(Main.java:366)
at sun.security.tools.keytool.Main.main(Main.java:359)
说明C盘没有写入权限,只要将生成的key换个位置即可,如:
keytool -genkey -v -keystore D:\my-release-key.keystore -alias my-release-key -keyalg RSA -keysize 2048 -validity 10000
此时,就会在D盘根目录生成 my-release-key.keystore
添加签名到项目的gradle配置文件
把刚才生成的my-release-key.keystore文件复制到你项目中的android/app文件夹里面
然后打开android/app里的build.gradle文件,添加如下的签名配置(差不多应该在109行附近添加)。密码与别名请修改成你自己的
... android { ... defaultConfig { ... } signingConfigs { release { storeFile file("my-release-key.keystore") storePassword "密码" keyAlias "keyAlias的名字" // 即上面命令 -alias 后的内容my-release-key keyPassword "密码" } } buildTypes { release { ... signingConfig signingConfigs.release } } } ...
生成发行APK包
将命令行里的目录切换到你项目下的android目录,然后执行gradlew assembleRelease开始打包编译(若在windows的PowerShell环境中,请使用gradlew ./assembleRelease命令,mac下用./gradlew assembleRelease)
我这边执行了4分钟后,显示BUILD SUCCESS
apk文件在哪里?在 android\app\build\outputs\apk 目录里有打包好的apk