其实在react官网上面就已经有了这个过程,但是在我前几天打包部署的时候出现了一些问题。想记录一下。
初始化一个react-native项目应该都不陌生了。我是按照官网上面用的Android Studio打包的。
1.将项目中的android下的app文件夹用Android Studio打开,然后点击Build->Generate Signed APK
2.created new …
3.按照图片填写该填的,填完了之后一路next finish。
以上步骤完成后就会在app文件夹里生成一个
app-release.apk
的文件,这个文件以及可以直接在安卓系统上面安装了,但是会发生闪退现象,完全点不开。这是因为React-Native的android平台下默认没有生成资源文件也就是我们所有的js图片文件等等。
所以我们就要生成JS Bundle文件:
1、在`Android/app/src/main/`文件夹下 创建一个assets文件在工程目录下,可手动,也可以在项目根目录下用命令行进行创建,命令行命令如下
mkdir -p Android/app/src/main/assets
2、这个也是在项目根目录下运行下面这段命令,生成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/
加粗部分的文件是你项目根目录下面的主 index.js文件。以前的react-native初始化出来的项目,跟目录下会有index.android.js 和 index.ios.js 这两个平台下的js文件。但是有的只有一个index.js文件。
成功了之后就可以在刚刚创建的asset文件夹下面看到生成的bundle文件了。
然后再此进行打包,在Android Studio里面。点击Build->Generate Signed APK后在弹出的框内有刚刚创建好的keystore,里面可能保存了密码,如果没有直接输入刚刚你设置的密码,一路点击next finish,再次生成app-release.apk,这次生成的会覆盖上一次的。然后在安卓上面安装,就不会出现闪退现象。
命令行发布版本
1、签名生成秘钥
在项目跟目录下打开命令窗口,输入
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
它会生成一个叫做my-release-key.keystore的密钥库文件,一定要保管好你的密钥库文件,不要上传到版本库或者其它的地方–alias参数后面的别名是你将来为应用签名时所需要用到的,所以记得记录这个别名。
加黑部分的名字都是可以自定义的,但是一定要记得。
2、设置gradle变量
把刚刚生成的my-release-key.keystore文件放到android/app文件夹下。
编辑~/.gradle/gradle.properties(没有这个文件你就创建一个),添加如下的代码(注意把其中的**替换为相应密码)。
注意:~表示用户目录,比如windows上可能是C:\Users\用户名,而mac上可能是/Users/用户名。
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****
上面的这些会作为全局的gradle变量,我们在后面的步骤中可以用来给应用签名。将里面等号里面的星号改成自己刚刚设置的密码。
3、添加签名到应用的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
}
}
}
...
signingConfigs 里,以我的项目为例,就改成这个样子:
signingConfigs {
release {
storeFile file("/Users/Gary/Desktop/EDC/android/app/my-release-key.keystore")
storePassword "123456"
keyAlias "my-key-alias"
keyPassword "123456"
}
}
4.生成发行APK包
cd android && ./gradlew assembleRelease
cd android表示切换到安卓目录下,打开命令行运行./gradlew assembleRelease
./gradlew assembleRelease在macOS和Linux系统中表示执行当前目录下的名为gradlew的脚本文件,运行参数为assembleRelease,注意这个./不可省略;而在windows命令行下则需要去掉./。
如果没有出错的话,就说明apk文件打包完成了,然后到你的这个目录下:
/android/app/build/outputs/apk