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.pem
1foo.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
重新构建