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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349