RN打包android APK文件

2,505 阅读3分钟

前言

​ 公司最近有一个APP项目,我之前听说过react-native weex ,主动请缨,想试试写原生APP,后来选择了RN,因为RN的文档比较简单易(手动狗头),于是开始了RN的学习与实践,所有的RN代码在我github

​ 今天打包RN项目成功了,因为我的电脑是win的系统,所以没办法去尝试ios的app,虽然打包成功都有点迷迷糊糊的,但是按照别人的流程走,中间报了几个错,都google解决了,也算是确定了RN写原生APP是可信的,这里记录一下我打包成功了流程

看了这个大佬的博客008-React-Native-Android-打包,修改名称图标

前提条件 打包的项目必须可以跑起来 - _ -

修改APP名称

<!-- .\android\app\src\main\res\values\strings.xml -->
<resources>
    <string name="app_name">app名称</string>
</resources>

修改APP图标

<!-- .\android\app\src\main\res\mipmap-xxdpi xx适配不同大小屏幕 替换掉图片即可 -->

打包生成android APP

生成一个签名秘钥

用keytool命令生成一个私有密钥,keytool是android studio自带的工具

Android\Android Studio\jre\jre\bin 目录里面

在该目录下启动cmd,输入一下命令

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

命令里面会要求输入密码 一些信息,随便输就行了,密码记着,后面有用,最后会在当前目录生成一个 my-release-key.keystore

这条命令会要求你输入密钥库(keystore)和对应密钥的密码,然后设置一些发行相关的信息。最后它会生成一个叫做my-release-key.keystore的密钥库文件。

在运行上面这条语句之后,密钥库里应该已经生成了一个单独的密钥,有效期为10000天。--alias参数后面的别名是你将来为应用签名时所需要用到的,所以记得记录这个别名。

最后将放到工程里面的.\android\app目录下

设置gradle变量

C:\Users\用户名\.gradle下 新建文件 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=******(你设置的密码)

上面的这些会作为全局的gradle变量

添加签名秘钥到项目的gradle配置文件里面

android {
	// ...
    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
        }
    }
}

到这里配置打包APK也就完成了

接下来就是打包了

进入项目里面的android目录下

gradlew assembleRelease

就会开始打包ing...........

出现的报错

这里我报错了....

error: failed to read PNG signature: file does not start with PNG signature.

看了一会,因为我的项目里面用了PNG格式的文件 找到了问题 Failed to read PNG signature: file does not start with PNG signature

解决

android/app/build.gradle 中加入下面的代码:

buildTypes {
    release {
      // ...
      aaptOptions.cruncherEnabled=false // here
    }
  }

可能的原因

gradle打包检查时报错编译通不过的。我们通过 aaptOptions.cruncherEnabled=false 来禁止 Gradle 检查png的合法性

然后就不打包androidAPK成功啦