React Native打包发布
# 安卓
# 生成一个签名密钥
在C:\Program Files\Java\jdkx.x.x_x\bin路径执行此命令
keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
这条命令会要求你输入密钥库(keystore)和对应密钥的密码,然后设置一些发行相关的信息
解释:
上方指令中的 my-release-key.keystore 可以任意改成 xxxx.keystore
上方指令中的 my-key-alias 可以任意改成 xxxx务必记得
设置相关信息:
- 输入密钥库密码: android(自行设置,必须记住!)
- 再次输入新密码: android
- 您的名字与姓氏为何: Wei(自行设置)
- 您的组织单位名称为何: Wei(自行设置)
- 您的组织名称为何: Wei(自行设置)
- 您所在的城市或地区名称为何: gz(自行设置)
- 您所在的州及省份名称为何: hz(自行设置)
- 此单位的两个字母国别代码为何: CN(自行设置)
- CN=yachen, OU=front-end, O=yachen, L=tainan, ST=tainan, C=TW 正确吗?: 是
最后它会生成一个叫做my-release-key.keystore的密钥库文件
# 设置 gradle 变量
把
my-release-key.keystore文件放到你工程中的android/app文件夹下。修改
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=*****1
2
3
4上面的这些会作为
gradle的变量,在后面的步骤中可以用来给应用签名。
# 把签名配置加入到项目的 gradle 配置中
在android/app/build.gradle添加如下的签名配置
...
android {
...
defaultConfig { ... }
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
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
}
}
}
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 生成 ABB
生成的 ABB 文件会在 android/app/build/outputs/bundle/release 中,之后可以上架到 Google Play 商店。
cd android
./gradlew bundleRelease
2
# 上架到 Google Play 商店
登录
Google Play Console,在首页创建应用
设置应用,将任务完成

在正式版中,创建新的发布版本
选择签名密钥

使用其他密钥,选择
从 Java 密钥库导出并上传密钥,按照上面的步骤
下载加密公钥
下载
PEPK使用下面的命令运行该工具,导出您的私钥并将其加密。然后替换相应参数,在看到提示时分别输入密钥库和密钥的密码。
java -jar pepk.jar --keystore=foo.keystore --alias=foo --output=output.zip --include-cert --rsa-aes-encryption --encryption-key-path=/path/to/encryption_public_key.pem1foo.keystore替换之前安卓打包的签名密钥foo替换之前安卓打包的签名密钥/path/to/encryption_public_key.pem替换公钥的路径将
加密公钥、PEPK、安卓打包的签名密钥放在同一个路径下,执行命令,会生成一个ZIP包此时用的是
openjdk17上传生成的ZIP文件
点击保存,此时会进行验证
验证成功后,将打包好的
abb包拉进这里
点击下一步,会提示哪里会报错,再进行修改
没有报错后,即可以送审
# 生成发行 APK 包
如果你还不想上架到Google Play 商店,可以选择打包apk
生成的 APK 文件位于android/app/build/outputs/apk/release/app-release.apk,它已经可以用来发布了。
cd android
# Gradle 的assembleRelease参数会把所有用到的 JavaScript 代码都打包到一起,然后内置到 APK 包中。
./gradlew assembleRelease
2
3
# iOS
# 选择 "Any iOS Device"
在 Xcode 左上角的设备选择器中,选择Any iOS Device作为目标设备。这通常是在进行归档(Archive)时选择的目标设备。
# 归档应用程序
完成构建后,点击 Xcode 菜单栏中的 Product -> Archive(或者使用快捷键 Command + Shift + B)来创建应用程序的归档文件(.xcarchive)。

# 选择分发类型
假设邮箱收到邮件,内容为Action needed: The uploaded build for Trops Soccer has one or more issues....
先处理邮件的问题...

目前只作为测试,所以我们选择第二个TestFlight Internal Only
上传成功后,打开App Store Connect,选中App选项,找到自己上传成功app,设置TestFlight中的测试组

# 报错
Showing Recent Messages Multiple commands produce '/Users/trops/Library/Developer/Xcode/DerivedData/TropsSoccer-ehnfyluqinoznpgltywdaxyvnbos/Build/Intermediates.noindex/ArchiveIntermediates/TropsSoccer/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/AccessibilityResources.bundle'
Showing Recent Errors Only Target 'React-Core-AccessibilityResources' (project 'Pods') has create directory command with output '/Users/trops/Library/Developer/Xcode/DerivedData/Trops_Soccer-cfgotpwkacidftbslusrivwleccr/Build/Intermediates.noindex/ArchiveIntermediates/TropsSoccer/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/AccessibilityResources.bundle'
有重复的文件
# 修复
在Podfile添加
installer.pods_project.targets.each do |target|
if target.name == "React-Core-AccessibilityResources"// 重复的文件
target.remove_from_project
end
end
2
3
4
5
删除ios/build 和 ios/Pods重新构建