google 要求所有应用都必须先使用证书进行数字签名,然后才能安装.
使用Keytool生成上传秘钥
Window
在Windows上,keytool必须从运行C:\Program Files\Java\jdkx.x.x_x\bin。
$ keytool -genkeypair -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
此命令提示您输入密钥库和密钥的密码以及密钥的专有名称字段。然后,它将密钥库生成为名为的文件my-upload-key.keystore。
密钥库包含单个密钥,有效期为10000天。别名是您稍后在对应用程序进行签名时将使用的名称,因此请记住该别名。
20231006
Mac
如果不确定JDK bin文件夹在哪里,请执行以下命令找到它:
$ /usr/libexec/java_home
它将输出JDK的目录,如下所示:
/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home
使用命令导航到该目录,$ cd /your/jdk/path并使用具有sudo权限的keytool命令,如下所示。
$ sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
ps:存储命令的时候报错,记得要加sudo
设置Gradle变量(有的版本不需要)
1.将my-upload-key.keystore文件放在android/app项目文件夹中的目录下。
2.编辑文件~/.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=*****
这些将是全局Gradle变量,稍后我们可以在Gradle配置中使用它们来对我们的应用进行签名。
关于安全性的注意事项:如果您不希望以明文形式存储密码,并且您正在运行OSX,则还可以将凭据存储在“钥匙串访问”应用程序中。然后,您可以跳过中的最后两行~/.gradle/gradle.properties。
查看keystory别名
需要填写keyAlias别名的时候,如何查看
在终端里,进入keystory放置的文件夹
输入命令
keytool -list -v -keystore my-release-key.keystore -storepass
keytool -list -v -keystore /Users/mac/Documents/wrokspace/pokaplus/android/app/release.keystore
秘钥口令密码: 20211230
将签名配置添加到您应用的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
在终端中运行以下命令:
$ cd android
./gradlew clean
react-native bundle --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --platform android --assets-dest android/app/src/main/res/ --dev false
$ ./gradlew bundleRelease
Gradle bundleRelease会将运行您的应用程序所需的所有JavaScript捆绑到AAB中(Android应用程序捆绑包)。如果您需要更改JavaScript捆绑包和/或可绘制资源的捆绑方式(例如,如果您更改了默认文件/文件夹名称或项目的常规结构),android/app/build.gradle请查看如何更新它以反映这些变化。
注意:确保gradle.properties不包含org.gradle.configureondemand = true,因为这会使发行版本跳过将JS和资产捆绑到应用程序二进制文件中的过程。
生成的AAB可以在下找到android/app/build/outputs/bundle/release/app.aab,并且可以将其上传到Google Play。
注意:为了让Google Play接受AAB格式,需要在Google Play控制台上为您的应用配置Google Play应用签名。如果您要更新不使用Google Play应用签名的现有应用,请查看我们的迁移部分,以了解如何执行该配置更改。
测试应用的发布版本
在将发行版本上传到Play商店之前,请确保您已对其进行了彻底的测试。首先卸载您已经安装的应用程序的任何先前版本。使用以下命令将其安装在设备上:
$ npx react-native run-android --variant=release
请注意,--variant=release只有在如上所述设置签名后,此选项才可用。
您可以终止任何正在运行的捆绑程序实例,因为所有框架和JavaScript代码都捆绑在APK的资源中。