React Native最重要的特点之一是它可以为Android和iOS生成应用程序。在本教程中,我们将专注于Android,并演示如何生成.apk 文件,以成功部署在Google Play商店。
以下是我们要介绍的内容。
以数字方式签署你的安卓应用
Google Play Store是Android应用的官方搜索引擎和数字发布平台。为了安全和加密,在发布前必须对应用程序进行数字签名。
要签署一个应用程序,你需要一个哈希密钥,这被称为发布密钥。这个密钥用于签署所有未来的更新,所以保持它的安全很重要;否则,你可能会失去对你的应用程序的访问。
谷歌提供了一个选项,让它管理你的签名密钥,该功能称为 "Play App Signing",使你能够
- 减少你的应用程序包的大小
- 使用谷歌先进的算法安全地存储签名密钥
- 允许用户在出现漏洞时更新密钥
Google Play Store还需要另一个密钥来上传Android应用,称为上传密钥。
虽然发布密钥可以由谷歌生成和管理,但上传密钥由你生成并用于签署所有更新。如果你不希望谷歌为你生成一个发布密钥,那么你可以使用上传密钥作为发布密钥。不建议这样做,因为有不同的密钥会更安全。
如果你碰巧丢失了上传密钥,你可以生成一个新的密钥,并联系谷歌支持以重置密钥。
生成一个上传密钥
你可以使用Java keytool生成一个上传密钥。
对于Windows
keytool工具是由Java SDK提供的,所以我们需要从那里运行它。检查你的Java SDK的安装位置。默认情况下,其位置如下。
C:\Program Files\Java\jdkx.x.x_x\
x.x.x_x 代表版本号(在我的电脑上,它是1.8.0_152)。keytool在bin 文件夹里面。第一步是在终端中迁移到这个位置。
cd "c:\Program Files\Java\jdk1.8.0_152\bin"
接下来,用一些定义好的选项运行keytool。
keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
让我们来分析一下这里发生了什么。
[PKCS12](https://en.wikipedia.org/wiki/PKCS_12)是一种存档文件格式,用于存储加密密钥。它代表着公钥密码学标准my-upload-key.keystore是生成文件的名称和扩展名。你可以把任何有效的名字放在这里my-key-alias是钥匙的一个身份名称。同样,你可以把任何有效的名字放在这里。记住这个别名,因为你将需要它来签署应用程序。[RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem))是一种广泛使用的基于私有-公共密钥的加密系统。2048是将被生成的密钥的大小。validity标志着钥匙的有效期,以天数为单位。在我们的命令中,我们把它保持在10000
当你运行这个keytool时,它将要求你输入一个密码。记住这个密码,因为你将需要用它来签署应用程序。
除此之外,它还会问一些问题,如你的名字、地点、组织等。回答完所有问题后,它将生成密钥库。

你可以在当前终端位置找到生成的密钥库。这里我们是在bin 文件夹中。

对于MacOS
在Mac上生成上传密钥的过程与Windows很相似。如果你不知道Java SDK的位置,使用这个命令。
/usr/libexec/java_home
这将打印出位置,像这样。
/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home
使用cd 移动到这个位置,然后运行keytool。
sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
更新Gradle文件
在成功生成keystore后,是时候用keystore信息更新gradle文件了,这样我们的应用程序就能得到它的签名。
首先,将keystore文件从bin 文件夹复制到React Native应用的android/app 文件夹。

接下来,打开~/.gradle/gradle.properties 或android/gradle.properties ,并添加以下引用。
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****
将存储密码和密钥密码改为你在创建密钥库时输入的密码。

如果你运行的是MacOS,并且不想用纯文本存储密码,你可以使用Keychain Access,跳过Gradle中的密码字段。
在上面的步骤中,我们设置了变量。现在我们需要指示Gradle使用这些值。
打开android/app/build.gradle ,用以下信息编辑它。
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...

生成APK发布构建
完成上述所有步骤后,你就准备好生成发布构建了。进入Android目录,运行发布构建。
cd android
./gradlew bundleRelease
这个命令将创建一个AAB格式的优化包。自2021年8月起,新的应用程序需要以AAB格式发布。
在这种格式的帮助下,Google Play为各种设备配置生成了优化的APKs。这导致了更小的应用程序大小,因为资源是根据设备要求有选择地使用。
测试发布版本
如果你想测试你的发布版本,而不在你的手机上手动安装它,你可以用以下命令运行它。
npx react-native run-android --variant=release
确保你已经从你的手机上卸载了之前的构建;调试构建是用调试密钥签名的,与发布版本的变体会有不匹配。如果你试图同时安装两个版本,React Native会出现错误。
结论
你可以轻松地从你的Google Play账户发布你的构建。对于一个新的应用(不是对现有应用的更新),你需要填写一些必要的信息,包括应用名称、描述、类别、语言等。它还要求提供屏幕截图和视频。
你需要完成一个评级调查,让谷歌知道你的应用程序是否适合特定的年龄范围。在上传AAB的同时,谷歌会要求你创建一个发布密钥,并允许它管理该密钥。这是你最好的选择,因为你将来不需要担心这个问题。
在本教程中,我们了解了如何为安卓系统创建签名密钥和生成AAB。正如你所看到的,只需很少的配置就可以建立一个可部署的Android包。
The postHow to deploy a React Native app to the Google Play Storeappeared first onLogRocket Blog.