美文网首页
react native项目编译,打包成android APP

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

作者: 小马将过河 | 来源:发表于2018-06-16 23:22 被阅读0次
    react.jpg

    从同事那里转来的文章。

    >>>我的博客<<<

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

    另一篇好博文

    -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等,可以到官网查看具体介绍。

    第十章 离线打包发布

    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”是你工程的安卓入口文件目录】

    • 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】

      如下图所示:

      image

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

      image

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

    • 利用AndroidStudio打包生成签名apk

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

      image

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

      image

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

    常见问题

    1、build失败
    在国内不适用代理的话build失败是常见的,有些包下载不下来。
    另外如果有个别包就是下载失败,可以尝试调换repository里的顺序,比如我的环境里有个common-1.0.0.jar死活下载不下来,调了顺序,将google放成第一个就成功了。

        repositories {
            jcenter()
            google()
            mavenCentral()
            maven { url 'https://maven.fabric.io/public' }
        }
    

    另外,bugild失败如果本地有代理的话,在android studio里正确配置代理也是一种办法。


    proxy.png

    相关文章

      网友评论

          本文标题:react native项目编译,打包成android APP

          本文链接:https://www.haomeiwen.com/subject/iplieftx.html