生成签名密钥
您可以使用keytool生成私人签名密钥。 在Windows上,keytool必须从C:\ Program Files \ Java \ jdkx.x.x_x \ bin运行。
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
此命令会提示您输入密钥库和密钥的密码,并为密钥提供专有名称字段。 然后它生成密钥库作为名为my-release-key.keystore的文件。
密钥库包含一个密钥,有效期为10000天。 别名是您在签名应用程序时稍后使用的名称,因此请记住注意别名。
注意:请记住保持密钥库文件的私密性,不要将其提交给版本控制。
设置gradle变量
1.将my-release-key.keystore文件放置在项目文件夹的android / app目录下。
2.编辑文件〜/ .gradle / gradle.properties或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=*****
这些将成为全局的gradle变量,我们稍后可以在我们的gradle配置中使用它来签署我们的应用程序。
有关保存密钥库的注意事项:
在Play商店中发布应用程序后,如果您想在任何时候更改签名密钥,则需要使用不同的软件包名称(丢失所有下载和评级)重新发布您的应用程序。 所以备份你的密钥库,不要忘记密码。
关于安全性的注意事项:
如果您不想以明文形式存储密码,并且您正在运行OSX,则还可以将您的凭据存储在Keychain Access应用程序中。 然后你可以跳过〜/ .gradle / gradle.properties中的最后两行。
将签名配置添加到您的应用程序的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
}
}
}
...
生成发布的APK
只需在终端中运行以下命令:
$ cd android && ./gradlew assembleRelease
Gradle的assembleRelease将捆绑运行你的应用程序所需的所有JavaScript到APK中。 如果您需要更改捆绑JavaScript和/或可绘制资源的方式(例如,如果更改了默认文件/文件夹名称或项目的一般结构),请查看android / app / build.gradle以查看 如何更新它以反映这些变化。
生成的APK可以在android / app / build / outputs / apk / app-release.apk下找到,并准备好分发。
测试你的应用程序的发布版本
在将发布版本上传到Play商店之前,请确保对其进行彻底测试。 首先卸载您已经安装的应用程序的任何以前的版本。 使用以下方法将其安装在设备上:
$ react-native run-android --variant=release
请注意,--variant = release仅在您按上述方式设置了签名时才可用。
您可以杀死任何正在运行的包装器实例,所有的框架和JavaScript代码都捆绑在APK的资源中。
由ABI拆分APK以减小文件大小
默认情况下,生成的APK具有x86和ARMv7a CPU体系结构的本机代码。 这样可以更轻松地共享几乎所有Android设备上运行的APK。 然而,这样做的缺点是在任何设备上都会有一些未使用的本地代码,从而导致不必要的更大的APK。
您可以通过在android / app / build.gradle中更改以下行来为每个CPU创建一个APK:
- def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true
将这两个文件上传到支持设备定位的市场,例如Google Play和Amazon AppStore,用户将自动获得相应的APK。 如果您想上传到APKFiles等不支持单个应用的多个APK的市场,请更改以下行,以便为两个CPU创建具有二进制文件的默认通用APK。
- universalApk false // If true, also generate a universal APK
+ universalApk true // If true, also generate a universal APK
启用Proguard以缩小APK的大小(可选)
Proguard是一个可以稍微减小APK的大小的工具。 它通过剥离您的应用程序未使用的React Native Java字节码(及其依赖项)的一部分来实现此目的。
重要提示:如果您启用了Proguard,请确保彻底测试您的应用程序。 Proguard通常需要针对您正在使用的每个本地库的配置。 请参阅应用程序/ proguard-rules.pro。
要启用Proguard,请编辑android / app / build.gradle:
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true