react native項目編譯扬绪,打包成android APP

react.jpg

從同事那里轉(zhuǎn)來的文章裤唠。

>>>我的博客<<<

編譯react native項目种蘸,并最終打包成安卓的apk包

另一篇好博文

-entry-file 指定入口文件 因為要打包ios平臺,所以指定為rn項目的index.ios.js作為入口
–bundle-output 指定輸出的jsbundle文件路徑和文件名 指定到rn項目的ios工程文件夾下航瞭,記得一定要先創(chuàng)建bundle文件夾,不然終端會報文件夾找不到的錯誤
–platform 指定平臺類型
–assets-dest 指定資源文件夾路徑 assets文件夾的路徑章办,包含圖片滨彻、node模塊等資源
–dev 是否為開發(fā)模式 如果設(shè)置為false,不會產(chǎn)生警告休偶,并且bundle會被壓縮
還有其他命令辜羊,比如:transformer、prepack碱妆、bundle-encoding等昔驱,可以到官網(wǎng)查看具體介紹。

第十章 離線打包發(fā)布

10.2 Android打包發(fā)布

1)將js代碼打包成jsbundle包
  • 在android工程中創(chuàng)建assets文件夾舍悯,可以用命令行創(chuàng)建萌衬,也可以手動創(chuàng)建它抱,命令如下:

    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要求所有應(yīng)用都必須有一個簽名證書才允許安裝在手機上歌径,所以,在把應(yīng)用發(fā)布到應(yīng)用市場之前必須生成1個簽名的apk包狗准。

  • 生成簽名秘鑰

    在Windows上keytool命令放在JDK的bin目錄中(比如C:\Program Files\Java\jdkx.x.x_x\bin)茵肃,你可能需要在命令行中先進入那個目錄才能執(zhí)行此命令。在mac上捞附,建議在工程目錄下生成:

    $ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
    

【注:keystore名稱可自己修改】

這條命令會要求你輸入密鑰庫(keystore)和對應(yīng)密鑰的密碼您没,然后設(shè)置一些發(fā)行相關(guān)的信息。最后它會生成一個叫做my-release-key.keystore的密鑰庫文件药版。

在運行上面這條語句之后喻犁,密鑰庫里應(yīng)該已經(jīng)生成了一個單獨的密鑰,有效期為10000天肢础。--alias參數(shù)后面的別名是你將來為應(yīng)用簽名時所需要用到的传轰,所以記得記錄這個別名。

  • 設(shè)置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環(huán)境中表示執(zhí)行當前目錄下的名為gradlew的腳本文件玛臂,且其運行參數(shù)為assembleRelease,注意這個./不可省略迹冤;而在windows的傳統(tǒng)CMD命令行下則需要去掉./

Gradle的assembleRelease參數(shù)會把所有用到的JavaScript代碼都打包到一起橱鹏,然后內(nèi)置到APK包中堪藐。如果你想調(diào)整下這個行為(比如js代碼以及靜態(tài)資源打包的默認文件名或是目錄結(jié)構(gòu)等),可以看看android/app/build.gradle文件贮勃,然后琢磨下應(yīng)該怎么修改以滿足你的需求苏章。

生成的APK文件位于android/app/build/outputs/apk/app-release.apk,它已經(jīng)可以用來發(fā)布了泉孩。

  • 測試簽名包

    輸入以下命令來安裝上一步生成的簽名包并淋,來進行測試。

    cd android

    ./gradlew installRelease

    注意installRelease參數(shù)只能在你完成了上面的簽名配置之后才可以使用县耽。 你現(xiàn)在可以關(guān)掉運行中的packager了兔毙,因為你所有的代碼和框架依賴已經(jīng)都被打包到apk包中,可以離線運行了澎剥。

    在debug和release版本間來回切換安裝時可能會報錯簽名不匹配,此時需要先卸載前一個版本再嘗試安裝祭饭。

  • 啟用Proguard代碼混淆來縮小apk文件大行鹆俊(可選)

    Proguard是一個Java字節(jié)碼混淆壓縮工具,它可以移除掉React Native Java(和它的依賴庫中)中沒有被使用到的部分悠咱,最終有效的減少APK的大小征炼。

    【啟用Proguard之后,你必須再次全面地測試你的應(yīng)用眼坏。Proguard有時候需要為你引入的每個原生庫做一些額外的配置酸些。參見app/proguard-rules.pro文件∑嵌】

    啟用方法是修改android工程的build.gradle文件市栗,設(shè)置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

    然后進入創(chuàng)建窗口蛛淋,選擇keystore路徑篡腌,key store密碼,然后下面如圖所示輸入公司及開發(fā)者信息嘹悼,信息輸入完成后點擊【ok】即可生成keystore杨伙。

    image

    此處的keystore password 跟key Alias 以及password 需要記住,當利用keystore打包時需要填寫棠赛。

  • 利用AndroidStudio打包生成簽名apk

    方法還是膛腐,androidStudio—>Build—>Generate Signed apk—>點擊【next】—>【Choose existing】—>選擇上一步生成的keystore文件路徑—>輸入keystore相關(guān)信息—>【Next】

    image

    然后選擇apk存儲路徑—>Signature Versions 選擇【V2(Full APK Signature)】—>【Finish】然后等待apk 打包完成即可

    image

    到這里哲身,打包工作就完成了,把apk上傳應(yīng)用商店即可勘天。

常見問題

1捉邢、build失敗
在國內(nèi)不適用代理的話build失敗是常見的商膊,有些包下載不下來晕拆。
另外如果有個別包就是下載失敗,可以嘗試調(diào)換repository里的順序实幕,比如我的環(huán)境里有個common-1.0.0.jar死活下載不下來,調(diào)了順序末贾,將google放成第一個就成功了整吆。

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

另外,bugild失敗如果本地有代理的話掂为,在android studio里正確配置代理也是一種辦法。


proxy.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市欲诺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛹含,老刑警劉巖塞颁,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異酷窥,居然都是意外死亡伴网,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門沸伏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人红选,你說我怎么就攤上這事留特÷耆常” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵右核,是天一觀的道長渺绒。 經(jīng)常有香客問我,道長宗兼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任染苛,我火速辦了婚禮主到,結(jié)果婚禮上登钥,老公的妹妹穿的比我還像新娘畔师。我一直安慰自己牧牢,他們只是感情好塔鳍,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懂傀,像睡著了一般枣察。 火紅的嫁衣襯著肌膚如雪外臂。 梳的紋絲不亂的頭發(fā)上犀斋,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音览效,去河邊找鬼虫几。 笑死,一個胖子當著我的面吹牛辆脸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播状囱,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼倘是,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叨粘?” 一聲冷哼從身側(cè)響起门坷,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冻晤,沒想到半個月后绸吸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡攘轩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年码俩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笨篷。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖练俐,靈堂內(nèi)的尸體忽然破棺而出冕臭,到底是詐尸還是另有隱情,我是刑警寧澤辜贵,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布念颈,位于F島的核電站连霉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跺撼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一柿祈、第九天 我趴在偏房一處隱蔽的房頂上張望哩至。 院中可真熱鬧,春花似錦卢佣、人聲如沸箭阶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至罩扇,卻和暖如春怕磨,著一層夾襖步出監(jiān)牢的瞬間寞缝,已是汗流浹背仰泻。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留被啼,地道東北人棠枉。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像命浴,于是被迫代替她去往敵國和親贱除。 傳聞我的和親對象是個殘疾皇子生闲,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345