在我们完成应用开发之后,我们就需要进行发布上传应用市场了,在上传之后,那么有一个很重要的步骤就是签名打包。下面我们来详细看一下怎么样进行签名打包React Native应用。具体关于Android的签名文件生成点击进入 注意翻墙
Android 签名文件生成
上面有一个Android官方的签名生成方法的地址,大家可以进行详情查看,不过需要翻墙哦。现在给大家讲解两种签名生成的方法:keytool命令方式生成,AndroidStudio IDE进行生成。
1. keytool命令生成签名密匙
您可以使用keytool命令生成一个密匙,在Windows上keytool命令方法JDK的bin目录中,您需要在命令行中先进入到这个目录才可以执行该条命令(注意还要使用管理员身份运行命令窗口)。
运行如下命令
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
注意上面的my-release-key这个名字可以自己取名,同时my-key-alias也是自己取名,其中第二个名称alias参数后面的别名,在后面你在为应用签名的时候需要用到,所以暂时记录一下这个别名。
上面的命令我们需要输入密钥库(keystore)密码和对应秘钥的密码,然后设置名字,组织,国家,省份相关信息,最后会生成my-release-key.keystore的签名文件。
现在我们去用户的默认目录下回生成my-release-key.keystore文件,(具体是哪个目录不同的系统有不同的表现,有的是在系统的用户目录中 我的就直接在JDK的bin目录下生成了 ,让我一顿好找)
2. Android Studio IDE进行生成秘钥文件
个人比较倾向于这一种方法,首先是图形界面的,而且少了命令行书写的问题,而且以前我记得在使用Eclipse开发Android的时候也一直使用这种方式,下面我们来看一下生成签名的具体步骤:
首先打开AndroidStudio菜单选择build->Generate Signed APK 在打开的界面点击Next,会弹出下面的界面
然后点击create new在弹出的界面中选择填写秘钥存放的位置,名称,密码,同样还要写别名的名字,证书的所有者,国家,组织,以及城市相关信息。
点击ok 会默认填写上创建好的签名的信息。
最后点击finish会生成签名秘钥,不过大家请注意看这边生成的秘钥和第一个命令行方法的秘钥的后缀不太一样,这边是以jks结尾的,不过也没问题哦,也是同样可以签名的。
以上两种方式已经给大家演示了打包签名的方法了,下面我们来正式的进行配置打包生成APK
Gradle配置
1. Gradle配置
1. 把my-release-key.keystore 文件放到你工程中的android/app文件夹下。
2.编辑~/.gradle/gradle.properties
(全局配置,对所有项目有效)或是项目目录/android/gradle.properties
(项目配置,只对所在项目有效)。如果没有gradle.properties
文件你就自己创建一个,添加如下的代码(注意把其中的****
替换为相应密码)
注意:~符号表示用户目录,比如windows上可能是C:\User\用户名,而mac上可能是/User/用户名。
关于密匙库的注意事项:
一旦你在Play Store发布了你的应用,如果想要修改签名,就必须用一个不同的包名来重新发布你的应用,(这样会丢失所有的下载数和评分),所以无比备份好你的密匙库和密码。
把签名配置加入到项目的gradle配置中
编辑你项目目录下的android/app/build.gradle,添加如下的签名配置:
生成发行APK
只需在终端运行一下命令
生成的APK文件位于android/app/build/outputs/apk/release/app-release.apk,它已经可以用来发布了。
测试应用的发行版本
在把发行版本提交到Play Store之前,你应该做一次最终测试。输入以下命令可以在设备上安装发行版本:
注意 --variant=release参数只能在你完成了上面的签名配置之后才可以使用。你现在可以关掉运行中的packager了,因为你所有的代码和框架依赖都已经被打包到apk包中,可以离线运行了。
注意:在debug和release版本间来回切换安装时可能会报错签名不匹配,此时需要先卸载前一个版本再尝试安装。
针对不同的CPU架构生成APK以减小APK文件的大小
默认情况下,生成的APK会同时包含针对于X86和ARMv7a两种CPU架构的原生代码。这样可以让我们更方便的向其他人分享这个APK,因为它几乎可以运行在所有的Android设备上。但是,这会导致所有设备上都有一些根本不会运行的代码,拜拜占据了控件,目前Android设备绝大多数是ARM架构,因此对于大部分应用来说可以考虑去掉X86架构的支持。
你可以在android/app/build.gradle中修改如下代码(false改为true)来生成针对不同CPU架构的APK。
- ndk {
- abiFilters "armeabi-v7a", "x86"
- }
- def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true
你可以把这上面打包生成的两个APK都上传到支持对用户设备CPU架构定位的应用程序商店,例如Google Play和Amazon AppStore,用户将自动获得相应的APK。如果你想上传到其他市场。例如APKFiles(不支持一个应用有多个APK文件),可以修改下面的代码,来额外生成一个适用不同CPU架构的通用APK。
- universalApk false
+ universalApk true // 额外生成一个适用不同CPU架构的通用APK
使用Proguard来减小APK文件的大小(可选)
Proguard是一个Java字节码混淆压缩工具,它可以移除掉React NativeJava(和它的依赖库中)中没有被使用到的部分,最终有效的减少APK的大小。
特别注意的是 在启用Proguard之后,你必须再次全面的测试你的应用。Proguard有时候需要为你引入的每个原生库做一些额外的配置。参见app/proguard-rules.pro文件。
要启用Proguard,修改android/app/build.gradle文件:
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true