生成签名密钥
- 打开终端
- 查看
java
根目录路径
/usr/libexec/java_home -V
Matching Java Virtual Machines (1): 1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
- 去到
java
安装的根目录,即输入
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
- 当前用户没有最高权限,在
Library
文件夹下不能生成任何文件,可以到当前指定目录下生成文件,比如目录:/Users/hanjin/Desktop/key/android.keystore
keytool -genkey -v -alias android -keyalg RSA -validity 20000 -keystore /Users/hanjin/Desktop/key/android.keystore
Alias
是别名,填写APP名称即可,别的名称也行
- 按照提示输入信息
设置 gradle
变量
- 把
my-release-key.keystore
密钥库文件放到工程中的android/app
文件夹下 - 编辑
项目目录/android/gradle.properties
,添加如下的代码(注意把其中的替换为相应密码)
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=***** MYAPP_RELEASE_KEY_PASSWORD=*****
my-release-key.keystore 为密钥库文件名,在android/app
文件夹下。
my-key-alias 为生成秘钥的时候设置的别名。
把签名配置加入到项目的 gradle 配置中
编辑项目目录下的android/app/build.gradle
,添加如下的签名配置
... android { ... defaultConfig { ... } signingConfigs { release { if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } } buildTypes { release { ... signingConfig signingConfigs.release } } } ...
测试应用的发行版本
注意:在 debug
和 release
版本间来回切换安装时可能会报错签名不匹配,此时需要先卸载前一个版本再尝试安装。
react-native run-android --variant=release
生成发行 APK 包
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/ $ cd android $ ./gradlew assembleRelease
Gradle
的 assembleRelease 参数会把所有用到的 JavaScript
代码都打包到一起,然后内置到 APK
包中。
注意:请确保 gradle.properties
中没有包含_org.gradle.configureondemand=true_
,否则会跳过 js
打包的步骤,导致最终生成的 apk
是一个无法运行的空壳。
生成的 APK
文件位于android/app/build/outputs/apk/app-release.apk,它已经可以用来发布了。