React Native发布APP之签名打包APK
用React Native开发好APP之后,如何将APP发布以供用户使用呢?一款APP的发布流程无外乎:签名打包—>发布到各store这两大步骤。本文将向大家分享如何签名打包一款React Native APP。 众所周知,Android要求所有的APP都需要进行数字签名后,才能够被安装到相应的设备上。签名打包一个Android APP已经是每一位Android开发者的家常便饭了。 为什么不用Android Studio打包React Native APP?在发这篇博文前我曾试着用Android Studio打包React Native APP,编译,打包,安装各项指数正常,当我欣喜在手机上打开APP看一下效果时,APP在启动时闪退了。多试几次依然如此,这时让我想起每次通过terminal安装APP到模拟器上时, 既然Android Stuio打包行不通,那么我们采用React Native官方推荐的方式进行签名打包(下文会重点讲解“通过官方推荐的方式签名打包”),打包过程很顺利,将打包好的APK安装到手机上后,发现能正常运行。 对比两种打包方式发现,它们所生成的apk在大小上相差几百k。为什么会相差那么大呢,带着这个疑问我们就将两个apk解压之后看看他们内部具体有什么不同。 上图是解压之后apk的内部细节,发现通过官方推荐的方式打包的apk多了两个文件“index.android.bundle”与“index.android.bundle.meta”,打开“index.android.bundle”发现其和从 结论 通过官方推荐的方式签名打包APK第一步:生成Android签名证书如果你已经有签名证书可以绕过此步骤。 第二步:设置gradle变量
MYAPP_RELEASE_STORE_FILE=your keystore filename
MYAPP_RELEASE_KEY_ALIAS=your keystore alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****
提示:用正确的证书密码、alias以及key密码替换掉 *。 第三步:在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
}
}
}
...
第四步:签名打包APKterminal进入项目下的android目录,运行如下代码: 签名打包成功后你会在 “android/app/build/outputs/apk/”目录下看到签名成功后的app-release.apk文件。 /** * Run Proguard to shrink the Java bytecode in release builds. */
def enableProguardInReleaseBuilds = true
如何在gradle中不使用明文密码?上文中直接将证书密码以明文的形式写在了gradle.properties文件中,虽然可以将此文件排除在版本控制之外,但也无法保证密码的安全,下面将向大家分享一种方法避免在gradle中直接使用明文密码。 通过“钥匙串访问(Keychain Access)”工具保护密码安全下面阐述的方法只在OS X上可行。 具体步骤:
提示: 你可以在terminal中运行如下命令检查新建的钥匙串是否成功。 def getPassword(String currentUser,String keyChain) {
def stdout = new ByteArrayOutputStream()
def stderr = new ByteArrayOutputStream()
exec {
commandLine 'security','-q','find-generic-password','-a',currentUser,'-s',keyChain,'-w'
standardOutput = stdout
errorOutput = stderr
ignoreExitValue true
}
//noinspection GroovyAssignabilityCheck
stdout.toString().trim()
}
// Add this line
def pass = getPassword("YOUR_USER_NAME","android_keystore")
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword pass // Change this
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword pass // Change this
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...
注意事项 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – Paypal Rest Api RestSharp在xamarin android中无效
- C++中string与int的相互转换实现代码
- ruby-on-rails – ActiveSupport :: TestCase vs Test :: U
- 【第20篇】org.json字符串转换,对象的转换,泛型的转换以及
- Flex 宋体、黑体、楷体、仿宋字体样式
- 百度、cnzz、piwik 统计ajax请求方法
- ScriptManager的用法
- C# 计算文件SHA1值
- swift – 在SKSpriteNode上的3D硬币翻转动画
- ruby-on-rails – 如何使用rails cucumber,rspec,capybara测