- 使用Android Studio打包
一、创建assets文件夹
$ mkdir -p android/app/src/main/assets
二、在main目录下生成assets文件夹,用于存储index.android.bundle
$ 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/
三、使用Android Studio打包
build => Generate Signed APK 进入打包界面,创建签名信息,打包Release版本。
- 用命令行打包
一、创建签名秘钥
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
二、设置gradle变量
把my-release-key.keystore
文件放到工程中的android/app
文件夹下。
编辑~/.gradle/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=*****
三、
添加签名到项目的gradle配置文件
编辑项目目录下的android/app/build.gradle
,添加如下的签名配置:
...
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
}
}
}
...
四、打包Release版本
$ cd android & ./gradlew assembleRelease
备注:
- $代表根目录
- 用Android Studio创建index.android.bundle后,再使用命令行方式可能会打包失败,解决方案参考GItHub上的issue:
https://github.com/facebook/react-native/issues/5787
android/app/build/intermediates/res/merged/release/drawable-xhdpi/*.png: error: Duplicate file. android/app/build/intermediates/res/merged/release/drawable-xhdpi-v4/*.png: Original is here. The version qualifier may be implied. ...... Execution failed for task ':app:processReleaseResources'. > Failed to execute aapt
Release打包错误
1. Couldn’t follow symbolic link.
Could not list contents of '~/.pro/node_modules/redent/node_modules/.bin/strip-indent'. Couldn't follow symbolic link.
解决方法,需要尝试哪个有效(我是第三个起了作用):
- 删除 node_modules/.bin 或者 - 删除后重装 rm -rf node_modules && npm install 或者 - 删除报错文件unlink ~/.pro/node_modules/redent/node_modules/.bin/strip-indent
备注:
不限于这个strip-indent文件,其它文件,遇到这个错误Couldn’t follow symbolic link.,也可以使用unlink删除.