Generating Signed APK

Generating Signed APK

需要本机代码的项目

此页面仅适用于react-native init使用Create React Native App 制作的或使用此类应用程序弹出的项目。有关弹出的更多信息,请参阅创建React Native App存储库的指南。

Android要求所有应用程序在安装之前都要用证书进行数字签名,因此要通过Google Play商店分发您的Android应用程序,您需要生成已签名的发布APK。Android Developers文档上的签名应用程序页面详细介绍了该主题。本指南简要介绍了该过程,并列出了打包JavaScript包所需的步骤。

生成一个签名密钥

您可以使用生成私人签名密钥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

此命令会提示您输入密钥库和密钥的密码,并为密钥提供专有名称字段。然后它生成一个名为keystore的文件my-release-key.keystore

密钥库包含一个密钥,有效期为10000天。别名是您在签名应用程序时稍后使用的名称,因此请记住注意别名。

注意:请记住保持密钥库文件的私密性,不要将其提交给版本控制。

设置gradle变量

  • my-release-key.keystore文件放在android/app项目文件夹中的目录下。

  • 编辑文件~/.gradle/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的资产中。

启用Proguard以缩小APK的大小(可选)

Proguard是一个可以稍微减小APK的大小的工具。它通过剥离应用程序未使用的部分React Native Java字节码(及其依赖项)来实现此目的。

重要 __:如果您启用了Proguard,请务必彻底测试您的应用。Proguard通常需要特定于您正在使用的每个本机库的配置。参见 app/proguard-rules.pro__。

要启用Proguard,请编辑android/app/build.gradle

/** * Run Proguard to shrink the Java bytecode in release builds. */ def enableProguardInReleaseBuilds = true