一.生成签名密钥
运行以下命令,运行后会让你输入一些信息密码之类的 ---- 在 Windows 上keytool
命令放在 JDK 的 bin 目录中(比如C:\Program Files\Java\jdkx.x.x_x\bin
), 你可能需要在命令行中先进入那个目录才能执行此命令
keytool -genkey -v -keystore release.keystore -alias key-alias -keyalg RSA -keysize 2048 -validity 10000
- -keystore release.keystore 文件名
- -alias key-alias 别名, 打包时需要用到
- -keyalg RSA 加密和数字签名的算法
- -validity 10000 有效天数
完成之后会生成一个 release.keystore 密钥库文件, 将它放到你工程中的 android/app
文件夹下
二.设置 gradle 变量
编辑 android/gradle.properties (项目配置文件,如果没有就自己创建一个) 加入以下代码
MYAPP_RELEASE_STORE_FILE=release.keystore
MYAPP_RELEASE_KEY_ALIAS=key-alias
MYAPP_RELEASE_STORE_PASSWORD=123456
MYAPP_RELEASE_KEY_PASSWORD=123456
三.添加签名到项目的gradle配置文件
3.1.将以下代码添加到 android/app/build.gradle 文件中,与buildTypes
平级
signingConfigs {
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
}
}
}
3.2.在 buildTypes
内添加
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release //添加这句话引用签名配置
}
}
四.启用Proguard代码混淆来缩小APK文件的大小(可选)
Proguard是一个Java字节码混淆压缩工具,它可以移除掉React Native Java(和它的依赖库中)中没有被使用到的部分,最终有效的减少APK的大小
将 android/app/build.gradle 的 def enableProguardInReleaseBuilds 设置为 true
def enableProguardInReleaseBuilds = true //混淆开关
五.开始打包 在/android/目录中执行以下命令 完成之后 apk 在 android/app/build/outputs/apk
./gradlew assembleRelease
打包遇到的问题1
* What went wrong:
Unable to process incoming event 'ProgressComplete ' (ProgressCompleteEvent)
解决方法: android 目录中执行以下命令
gradlew.bat assembleRelease --console plain
打包遇到的问题2
* What went wrong:
Execution failed for task ':app:processReleaseResources'.
> Failed to execute aapt
在 android/gradle.properties 文件中添加 原因
android.enableAapt2=false
打包遇到的问题3
* What went wrong:
Execution failed for task ':react-native-fetch-blob:verifyReleaseResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt
解决: 这个问题只有在打包时才会出现,可以看到我这里是 react-native-fetch-blob 这个包的错误, 找到 node_modules/react-native-fetch-blob/android/build.gradle 将 compileSdkVersion buildToolsVersion targetSdkVersion 修改成与 android/build.gradle 中的一致