ReactNative打Android包

ReactNative打Android包
 最后更新于 2024年10月02日 07:50:58

生成一个签名密钥

keytool 命令生成一个私有密钥。

  • Windows平台。 在 JDK 的安装目录(默认 C:\Program Files\Java\jdkx.x.x_x\bin) 打开命令窗口。
  • Mac 平台 在项目根目录输入命令:

$ 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 参数后面的 别名 是将来为 应用签名 时所需要用到的。

如是后期想要查看签名密钥的信息,比如 MD5、SHA1、SHA256等信息,则使用下面的命令

keytool -v -list -keystore keystore文件路径

设置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=*

关于密钥库的注意事项: 一旦在应用市场(应用宝,360等)发布了应用,若想修改签名,就必须用一个不同的包名来重新发布应用(这样也会丢失所有的下载数和评分)。

添加签名到项目的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
    }
  }
}

生成发行包

在终端中运行以下命令

$ cd android && ./gradlew assembleRelease

GradleassembleRelease 参数会把所有用到的 JavaScript 代码都打包到一起,然后内置到APK包中。如果想调整下这个行为(比如 JavaScript代码 以及 静态资源 打包的默认文件名或是目录结构等),可以看看 android/app/build.gradle 文件。

生成的 APK 文件位于 android/app/build/outputs/apk/app-release.apk,已经可以用来发布了。

生成测试包

$ cd android && ./gradlew installRelease

启用Proguard代码混淆来缩小APK文件的大小(可选)

Proguard 是一个 Java 字节码混淆压缩工具,它可以移除掉 React NativeJava(和它的依赖库中)中没有被使用到的部分,最终有效的减少APK的大小。

重要:启用Proguard之后,你必须再次全面地测试你的应用。Proguard有时候需要为你引入的每个原生库做一些额外的配置。参见 app/proguard-rules.pro文件。

要启用 Proguard,设置 minifyEnabled: true

/**
 * 在release发行版中启用Proguard来减小 to shrink the Java    bytecode in release builds.
 */
def enableProguardInReleaseBuilds = true

若是项目因为添加此属性无法运行,则删除此配置。