RN打包生成apk步骤、遇到的问题及解决办法

步骤

命令行下生成签名密钥

在C:\Program Files\Java\jdkx.x.x_x\bin目录下找到keytool.exe文件,前提是一定要以管理员的身份运行此命令:

1
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

其中alias后边的别名可以自定义。此命令会生成一个==my-release-key.keystore==的密钥文件
注意妥善保管密钥库文件

设置gradle变量

把my-release-key.keystore文件放到你工程中的android/app文件夹下。编辑~/.gradle/gradle.properties(没有这个文件你就创建一个),添加如下的代码(注意把其中的*替换为相应密码)此处有坑*

1
2
3
4
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

添加签名到项目的gradle配置文件

编辑你项目目录下的android/app/build.gradle:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
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包

注意:powershell下./gradlew,cmd命令行下直接gradlew

1
cd android && ./gradlew assembleRelease

测试应用的发行版本

将打包好的apk安装到模拟器或连接的设备上

1
cd android && ./gradlew installRelease

问题

问题1

1
2
Execution failed for task ':app:bundleReleaseJsAndAssets'.
> Process 'command 'cmd'' finished with non-zero exit value 1

解决办法:
查到的解决办法是修改node_module下的\node_modules\react-native\packager\react-packager\src\SocketInterface目录,但是我的本地并没有这个包,索性全部关掉重新运行之后神奇的好用了

问题2

1
2
3
4
5
6
* Where:
Build file 'F:\ReactAppProject\RNSimpleApp\android\app\build.gradle' line: 109
* What went wrong:
A problem occurred evaluating project ':app'.
> Could not get unknown property 'MYAPP_RELEASE_STORE_FILE' for SigningConfig_Decorated{name=release, storeFile=null, storePassword=null, keyAlias=null, keyPassword=null, storeType=null, v1SigningEnabled=true, v2SigningEnabled=true} of type com.android.build.gradle.internal.dsl.SigningConfig.

解决办法:gradle.properties文件应该使用RNProject/android/下面的gradle.properties
也就是说在gradle.properties里面添加

1
2
3
4
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

问题3

打包后图片等资源文件没有显示
解决办法:

1
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

undefined