React Native 构建 Android Release 包

孙风畔
2023-12-01

1. 生成签名:

E:\ReactLove\rn_hello\rnHello_060>keytool -genkey -v -keystore D:\shudan.keystore -alias shudan-alias -keyalg RSA -keysize 2048 -validity 10000

注意:记住输入的密钥库的口令,后面会用到

E:\ReactLove\rn_hello\rnHello_060>keytool -genkey -v -keystore D:\shudan.keystore -alias shudan-alias -keyalg RSA -keysize 2048 -validity 10000
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  jack
您的组织单位名称是什么?
  [Unknown]:  jack
您的组织名称是什么?
  [Unknown]:  jack
您所在的城市或区域名称是什么?
  [Unknown]:  beijing
您所在的省/市/自治区名称是什么?
  [Unknown]:  beijing
该单位的双字母国家/地区代码是什么?
  [Unknown]:  China
CN=jack, OU=jack, O=jack, L=beijing, ST=beijing, C=China是否正确?
  [否]:  y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
         CN=jack, OU=jack, O=jack, L=beijing, ST=beijing, C=China
输入 <shudan-alias> 的密钥口令
        (如果和密钥库口令相同, 按回车):
[正在存储D:\shudan.keystore]

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore D:\shudan.keystore -destkeystore D:\shudan.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

2. 生成秘钥后,开始在ReactNative项目中的android工程中配置生成的签名信息。 在android目录下的 gradle.properties 文件中添加如下信息:

....
STORE_FILE=./keystore/shudan.keystore
KEY_ALIAS=shudan-alias
STORE_FILE_PASSWORD=123456
KEY_ALIAS_PASSWORD=123456

STORE_FILE: 签名文件存放的目录

KEY_ALIAS: 命令行中-alias 后面的参数也就是别名

STORE_FILE_PASSWORD: 密钥库密码

KEY_ALIAS_PASSWORD: 别名密码

注意:STORE_FILE=./keystore/shudan.keystore 表明将前面生成的shudan.keystore文件存在 android/app目录下的 keystore 目录下。

3. 在 android/app/build.gradle 中配置签名,在android域下添加 signingConfigs配置,并且在 buildTypes 的release 域中配置 signingConfig。需要发布 release 包时就是用 signingConfigs下的release配置的签名信息。

android {
       ...
       signingConfigs {
           debug {
               storeFile file('debug.keystore')
               storePassword 'android'
               keyAlias 'androiddebugkey'
               keyPassword 'android'
           }
           release {
               storeFile file(STORE_FILE)
               storePassword STORE_FILE_PASSWORD
               keyAlias KEY_ALIAS
               keyPassword KEY_ALIAS_PASSWORD
           }
       }
      buildTypes {
          debug {
             signingConfig signingConfigs.debug
          }
          release {
            // Caution! In production, you need to generate your own keystore file.
            // see https://facebook.github.io/react-native/docs/signed-apk-android.
            //signingConfig signingConfigs.debug
            signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
          }
      }
}

 4.生成 apk

在 android 目录下,利用 windows 命令行执行如下命令:

注意:在项目中的android 目录下执行,windows 的 cmd 中执行如下命令在开头是没有./ 的,但是在Mac, Linux 的环境下,需要带有 ./,比如 ./gradlew assembleRelease

E:\ReactLove\rn_hello\rnHello_060\android>gradlew assembleRelease

5. 最后在 android\app\build\outputs\apk\release 目录下生成 release 包 

E:\ReactLove\rn_hello\rnHello_060\android>gradlew assembleRelease

> Task :app:bundleReleaseJsAndAssets
warning: the transform cache was reset.
Loading dependency graph, done.
info Writing bundle output to:, E:\ReactLove\rn_hello\rnHello_060\android\app\build\generated\assets\react\release\index.android.bundle
info Done writing bundle output
info Copying 11 asset files
info Done copying assets

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 4s
56 actionable tasks: 3 executed, 53 up-to-date
E:\ReactLove\rn_hello\rnHello_060\android>
 类似资料: