react native项目编译,打包成android APP


编译react native项目,并最终打包成安卓的apk包
简书地址

第十章 离线打包发布

10.2 Android打包发布

1)将js代码打包成jsbundle包
  • 在android工程中创建assets文件夹,可以用命令行创建,也可以手动创建,命令如下:

    mkdir android/app/src/main/assets

  • 在工程的根目录输入如下命令进行打包

react-native bundle –entry-file demo/index.js –bundle-output ./android/app/src/main/assets/index.android.jsbundle –platform android –assets-dest ./android/app/src/main/res/ –dev false

【注意:上述命令中 “demo/index/.js”是你工程的安卓入口文件目录】

-entry-file 指定入口文件 因为要打包ios平台,所以指定为rn项目的index.ios.js作为入口
–bundle-output 指定输出的jsbundle文件路径和文件名 指定到rn项目的ios工程文件夹下,记得一定要先创建bundle文件夹,不然终端会报文件夹找不到的错误
–platform 指定平台类型
–assets-dest 指定资源文件夹路径 assets文件夹的路径,包含图片、node模块等资源
–dev 是否为开发模式 如果设置为false,不会产生警告,并且bundle会被压缩
还有其他命令,比如:transformer、prepack、bundle-encoding等,可以到官网查看具体介绍。

  • MyApplication.java中的ReactNativeHost中添加getBundleAssetName`方法,该方法的返回值,必须与上一步中生成的jsbundle文件的文件名保持一致。
         @Nullable
         @Override
         protected String getBundleAssetName() {
             return "index.android.bundle";
         }
2)利用命令行打包安卓APK

Android要求所有应用都必须有一个签名证书才允许安装在手机上,所以,在把应用发布到应用市场之前必须生成1个签名的apk包。

  • 生成签名秘钥

    在Windows上keytool命令放在JDK的bin目录中(比如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名称可自己修改】

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

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

  • 设置gradle变量

    1. my-release-key.keystore文件放到你工程中的android/app文件夹下。

    2. android工程的gradle.properties文件中加入如下代码:

 MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
 MYAPP_RELEASE_KEY_ALIAS=my-key-alias
 MYAPP_RELEASE_STORE_PASSWORD=hongchuang
 MYAPP_RELEASE_KEY_PASSWORD=hongchuang
  • 添加签名到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
          }
      }
  }
  ...
  • 生成签名apk包

    cd android

    ./gradlew assembleRelease

./gradlew assembleRelease在macOS、Linux或是windows的PowerShell环境中表示执行当前目录下的名为gradlew的脚本文件,且其运行参数为assembleRelease,注意这个./不可省略;而在windows的传统CMD命令行下则需要去掉./

Gradle的assembleRelease参数会把所有用到的JavaScript代码都打包到一起,然后内置到APK包中。如果你想调整下这个行为(比如js代码以及静态资源打包的默认文件名或是目录结构等),可以看看android/app/build.gradle文件,然后琢磨下应该怎么修改以满足你的需求。

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

  • 测试签名包

    输入以下命令来安装上一步生成的签名包,来进行测试。

    cd android

    ./gradlew installRelease

    注意installRelease参数只能在你完成了上面的签名配置之后才可以使用。 你现在可以关掉运行中的packager了,因为你所有的代码和框架依赖已经都被打包到apk包中,可以离线运行了。

    在debug和release版本间来回切换安装时可能会报错签名不匹配,此时需要先卸载前一个版本再尝试安装。

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

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

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

    启用方法是修改android工程的build.gradle文件,设置minifyEnabled选项为true

   buildTypes {  
          release {  
              signingConfig signingConfigs.release  
          minifyEnabled true  
              proguardFile 'proguard.txt'  
          }  
      }   
3)利用androidStudio打包生成apk
  • 利用AndroidStudio生成签名秘钥

    具体方法是,androidStudio—>Build—>Generate Signed apk—>点击【next】—>【Create new】

    如下图所示:

    然后进入创建窗口,选择keystore路径,key store密码,然后下面如图所示输入公司及开发者信息,信息输入完成后点击【ok】即可生成keystore。

    此处的keystore password 跟key Alias 以及password 需要记住,当利用keystore打包时需要填写。

  • 利用AndroidStudio打包生成签名apk

    方法还是,androidStudio—>Build—>Generate Signed apk—>点击【next】—>【Choose existing】—>选择上一步生成的keystore文件路径—>输入keystore相关信息—>【Next】

    然后选择apk存储路径—>Signature Versions 选择【V2(Full APK Signature)】—>【Finish】然后等待apk 打包完成即可

    到这里,打包工作就完成了,把apk上传应用商店即可。

推荐

另一篇好博文


评论
  目录