Android 打包 闪退的问题,极有可能是你签名配置不正确,建议仔细检查每个步骤,找不到问题建议命令打包根据错误提示解决
1、生成签名秘钥:
你可以用keytool命令生成一个私有密钥。在Windows上keytool命令放在JDK的bin目录中(比如C:\Program Files\Java\jdkx.x.x_x\bin),
你可能需要在命令行中先进入那个目录才能执行此命令。
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
这条命令会要求你输入密钥库(keystore
)和对应密钥的密码,然后设置一些发行相关的信息。最后它会生成一个叫做my-release-key.keystore
的密钥库文件。
在运行上面这条语句之后,密钥库里应该已经生成了一个单独的密钥,有效期为10000天。--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 {
release {
storeFile file("/Users/ xxxxx/android/app/my-release-key.keystore")//这里换成你自己的
storePassword "123456"//这里换成你自己的
keyAlias "my-key-alias"//这里换成你自己的
keyPassword "123456"//这里换成你自己的
}
}
4、生成release版本的APK:
现在可以生成签名版的APK 了:进入项目的根目录,在终端运行React Native 包管理器:
$ npm start
然后根目录在次运行下列命令:
$ mkdir -p android/app/src/main/assets
$ curl -k "http://localhost:8081/index.android.bundle" >android/app/src/main/assets/index.android.bundle
$ cd android && ./gradlew assembleRelease
解释:首先我们新建了一个assets目录来存储打包的JavaScript文件然后通过curl从ReactNative包管理器中获取JavaScript文件。最后使用gradlew来构建release版本的APK