生成一个签名密钥
用 keytool
命令生成一个私有密钥。
- Windows平台。
在
JDK
的安装目录(默认C:\Program Files\Java\jdkx.x.x_x\bin
) 打开命令窗口。 - Mac 平台 在项目根目录输入命令:
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
这条命令会要求你输入密钥库 keystore
和对应密钥的 密码
,然后设置一些发行相关的信息,会生成一个 my-release-key.keystore
文件。
在运行上面这条语句之后,密钥库里已经生成了一个单独的密钥,有效期为 10000天
。
--alias
参数后面的 别名
是将来为 应用签名
时所需要用到的。
如是后期想要查看签名密钥的信息,比如 MD5、SHA1、SHA256
等信息,则使用下面的命令
keytool -v -list -keystore keystore文件路径
设置gradle变量
- 将生成的
my-release-key.keystore
文件复制到项目中的android/app
文件夹下。 - 编辑
~/.gradle/gradle.properties
(没有这个文件你就创建一个),添加下面的代码
注意:~表示用户目录。比如windows上可能是C:\Users\用户名,而mac上可能是/Users/用户名。注意:把其中的**替换为相应密码
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*
MYAPP_RELEASE_KEY_PASSWORD=*
关于密钥库的注意事项: 一旦在应用市场(应用宝,360等)发布了应用,若想修改签名,就必须用一个不同的包名来重新发布应用(这样也会丢失所有的下载数和评分)。
添加签名到项目的gradle配置文件
编辑 项目目录
下的 android/app/build.gradle
,添加如下的签名配置:
android {
...
defaultConfig { ... }
signingConfigs {
release {
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
}
}
}
生成发行包
在终端中运行以下命令
$ cd android && ./gradlew assembleRelease
Gradle
的 assembleRelease
参数会把所有用到的 JavaScript
代码都打包到一起,然后内置到APK包中。如果想调整下这个行为(比如 JavaScript代码
以及 静态资源
打包的默认文件名或是目录结构等),可以看看 android/app/build.gradle
文件。
生成的 APK
文件位于 android/app/build/outputs/apk/app-release.apk
,已经可以用来发布了。
生成测试包
$ cd android && ./gradlew installRelease
启用Proguard代码混淆来缩小APK文件的大小(可选)
Proguard
是一个 Java
字节码混淆压缩工具,它可以移除掉 React Native
和 Java
(和它的依赖库中)中没有被使用到的部分,最终有效的减少APK的大小。
重要:启用Proguard之后,你必须再次全面地测试你的应用。Proguard有时候需要为你引入的每个原生库做一些额外的配置。参见 app/proguard-rules.pro
文件。
要启用 Proguard
,设置 minifyEnabled: true
/**
* 在release发行版中启用Proguard来减小 to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true
若是项目因为添加此属性无法运行,则删除此配置。