本文只是个人用来记录项目开发过程中遇到的问题、思路及解决方案,具体出现的问题原因,后面空闲下来再做总结。
生成发行的apk
在终端先进入根据目录下的android目录,然后执行./gradlew assembleRelease 表示执行当前目录下的gradlew脚本文件,执行参数是assembleRelease,Gradle 的assembleRelease参数会把所有用到的 JavaScript 代码都打包到一起,然后内置到 APK 包中。
$ cd android
$ ./gradlew assembleRelease
$ adb install //将安装包安装到手机里面
生成的 APK 文件位于android/app/build/outputs/apk/app-release.apk
生成增量发行包
首先通过
rm -rf codepush/**
先删了根目录上的codepush目录下的所有内容,然后根据情况分别打包android和ios。
- 先开始编译bundle文件
- 打包bundle文件
Android
$ react-native bundle --platform android --dev false --entry-file index.js --bundle-output codepush/index.android.bundle --assets-dest codepush/
$ zip -r codepush.android.zip codepush //将codepush里面的内容压缩
IOS
$ react-native bundle --platform ios --dev false --entry-file index.js --bundle-output codepush/index.ios.bundle --assets-dest codepush/
$ zip -r codepush.ios.zip codepush //将codepush里面的内容压缩
踩坑
- 执行
./gradlew assembleRelease
时报错:
1-1-bash: ./gradlew: Permission denied
错误。
解决方法:执行chmod +x gradlew
命令。
1-2
/XXX/node_modules/react-native-smart-barcode/android/src/main/java/com/reactnativecomponent/barcode/RCTCapturePackage.java:41: 错误: 方法不会覆盖或实现超类型的方法
@Override
^
注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
1 个错误
解决方案: 找到相应的文件,注释掉 @Override。
1-3
/xxx/android/app/build/intermediates/res/merged/release/drawable-xhdpi-v4/src_user_images_help.jpg: error: Duplicate file.
/xxx/android/app/build/intermediates/res/merged/release/drawable-xhdpi/src_user_images_help.jpg: Original is here. The version qualifier may be implied.
:app:processReleaseResources FAILED
FAILURE: Build failed with an exception.
解决方案: 错误提示是,两个文件重复了,解决思路一是删掉了第一个路径下的文件,再进行编译,结果发现删掉的文件又自动在相同的目录下生成了; 思路二是删除第二个路径下的文件,结果还是自动生成。后来删除了两个路径下的文件就编译通过了。
1-4
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ‘:app:validateSigningRelease’. Keystore file /xxx/android/app/my-release-key.keystore not found for signing config ‘release’.
解决方案:
1-4-1
在终端执行$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
命令,会自动生成my-release-key.keystore密钥库文件,然后把这个文件放到app目录下。
1-4-2
编辑~/.gradle/gradle.properties(全局配置,对所有项目有效)或是项目目录/android/gradle.properties(项目配置,只对所在项目有效)。如果没有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=*****
}