ReactNative之Android打包APK方法(趟坑過程)

多余的不解釋了耿戚。直接上車吧杨蛋。中途遇到的問題我也寫出來了(其實和官網(wǎng)教程相似但也有不同不然我也不會寫出來了):遇到問題可以留言

Android 打包 閃退的問題,極有可能是你簽名配置不正確,建議仔細(xì)檢查每個步驟,找不到問題建議命令打包根據(jù)錯誤提示解決

1轩褐、生成簽名秘鑰:

方法一:

你可以用keytool命令生成一個私有密鑰。在Windows上keytool命令放在JDK的bin目錄中(比如C:\Program Files\Java\jdkx.x.x_x\bin)诺凡,
你可能需要在命令行中先進入那個目錄才能執(zhí)行此命令说贝。

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

這條命令會要求你輸入密鑰庫(keystore)和對應(yīng)密鑰的密碼议惰,然后設(shè)置一些發(fā)行相關(guān)的信息。最后它會生成一個叫做my-release-key.keystore的密鑰庫文件乡恕。
在運行上面這條語句之后言询,密鑰庫里應(yīng)該已經(jīng)生成了一個單獨的密鑰,有效期為10000天傲宜。--alias參數(shù)后面的別名是你將來為應(yīng)用簽名時所需要用到的倍试,所以記得記錄這個別名。

方法二: 直接使用 Android studio 進行簽名

1.

image.png

2.如果你沒有就創(chuàng)建新的,當(dāng)然這里也可以選中使用方法一創(chuàng)建的keystore
image.png

3.next 搞定

注意:請記得妥善地保管好你的密鑰庫文件蛋哭,不要上傳到版本庫或者其它的地方。

2涮母、設(shè)置gradle變量:

my-release-key.keystore文件放到你工程中的android/app文件夾下谆趾。
編輯~/.gradle/gradle.properties(沒有這個文件你就創(chuàng)建一個),添加如下的代碼(注意把其中的****替換為相應(yīng)密碼)
注意:~表示用戶目錄叛本,比如windows上可能是C:\Users\用戶名沪蓬,而mac上可能是/Users/用戶名

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

這里可以放到這里面:


image.png

上面的這些會作為全局的gradle變量来候,我們在后面的步驟中可以用來給應(yīng)用簽名跷叉。

3、添加簽名到應(yīng)用的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
        }
    }
}
...

我是這樣寫的云挟,

 signingConfigs { 
       release { 
        storeFile file("/Users/ xxxxx/android/app/my-release-key.keystore")//這里換成你自己的
        storePassword "123456"http://這里換成你自己的
        keyAlias "my-key-alias"http://這里換成你自己的
        keyPassword "123456"http://這里換成你自己的
    }
     }

4、生成release版本的APK:

現(xiàn)在可以生成簽名版的APK 了:進入項目的根目錄转质,在終端運行React Native 包管理器:
$ npm start
然后根目錄在次運行下列命令:

$  mkdir -p android/app/src/main/assets
$ curl -k "http://localhost:8081/index.android.bundle" >android/app/src/main/assets/index.android.bundle  
$ cd android && ./gradlew assembleRelease

解釋:首先我們新建了一個assets目錄來存儲打包的JavaScript文件然后通過curlReactNative包管理器中獲取JavaScript文件园欣。最后使用gradlew來構(gòu)建release版本的APK

5、在設(shè)備上安裝release版本的APK(以上完成之后我用的Android Studio打包的)

image.png

在項目的android/目錄下運行 ./gradlew installRelease
好啦完成了休蟹。如果你這樣打包還出錯建議在第四步的時候可以用AndroidStudio進行打包沸枯。遇到問題可以看這個來解決

二打包離線Bundle

打包步驟

在工程根目錄下執(zhí)行打包命令日矫,

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

0.49之后用這個:

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


注意: 
1、[./android/app/src/main/assets/]文件夾必須存在绑榴,不存在就new一個assets文件夾哪轿,不然會報一個錯誤:

ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle'


2、./android/app/這個路徑一定要準(zhǔn)確

執(zhí)行完畢后:
image.png

打包apk文件

到你rn項目的根目錄下執(zhí)行:(或者直接使用Androidstudio打包就可以)
cd android && ./gradlew assembleRelease
好啦~ 如果沒有錯的話翔怎,就說明apk文件打包完成了窃诉,然后到你的這個目錄下:
/android/app/build/outputs/apk

命令打包遇到問題:

問題1:

* What went wrong:
Could not list contents of 'xxxxx/node-pre-gyp/node_modules/.bin/detect-libc'. Couldn't follow symbolic link.
image.png

解決: 刪掉那些找不到的,比如上面那些都刪掉

問題二:

* What went wrong:
Execution failed for task ':app:processReleaseResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt

解決方法:
1.這里檢查一下上面報錯日志上面給出的信息, 可能是因為打包 APK 導(dǎo)出asset文件或者圖片文件格式不正確導(dǎo)致的,建議查看!
2.如圖:


image.png

明顯圖片名字格式不正確.英文小寫沒有特殊符號數(shù)字等等.png
如果圖片本事項目中不需要可以直接刪掉.

3.cd android && ./gradlew assembleRelease 打包查看

問題三

Execution failed for task ':app:validateSigningRelease'. > Keystore file /Users/xxxxx/app/annn.jks not found for signing config 'release'.

說明你這個簽名沒有找到
解決方法:

步驟如圖: file -> ProjectStructure ->app -> signing
一.


image.png

二.


image.png

將你創(chuàng)建的簽名選上,

或者你用我這個方式寫試試:


image.png

問題四:

Error:Execution failed for task ':app:processReleaseManifest'.
> Manifest merger failed : Attribute application@label value=(xxx) from AndroidManifest.xml:16:7-26
    is also present at [:rn-fetch-blob] AndroidManifest.xml:35:18-50 value=(@string/app_name).
    Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:13:5-30:19 to override.

解決方法:Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:13:5-30:19 to override.
找到:

image.png

首先在 <manifest 
  加上:  xmlns:tools="http://schemas.android.com/tools"
    >

其次在:<application 加上這句: tools:replace="android:label"

></application>


免責(zé)聲明:所有信息來源于網(wǎng)絡(luò)和自己開發(fā)中的一點總結(jié)。如果有不妥希望指出我會改姓惑。

                                                                           --ZPengs

相關(guān)文章:
1.React Native開發(fā)錯誤警告處理總結(jié)(已解決 褐奴!持續(xù)更新)
2.ReactNative 實現(xiàn)的文件上傳功能(實測可行!)
3.React Native開發(fā)總結(jié)之:開發(fā)技巧和調(diào)試技巧
4.React Native開發(fā)總結(jié):一于毙、開發(fā)環(huán)境配置
5.Android 調(diào)試錯誤總結(jié)(ReactNative開發(fā))(持續(xù)更新)
6.ReactNative開發(fā)之真機測試
7React Native開發(fā)之iOS打包ipa發(fā)布(親測可行)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敦冬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唯沮,更是在濱河造成了極大的恐慌脖旱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件介蛉,死亡現(xiàn)場離奇詭異萌庆,居然都是意外死亡,警方通過查閱死者的電腦和手機币旧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門践险,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吹菱,你說我怎么就攤上這事巍虫。” “怎么了鳍刷?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵占遥,是天一觀的道長。 經(jīng)常有香客問我输瓜,道長瓦胎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任尤揣,我火速辦了婚禮搔啊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘北戏。我一直安慰自己坯癣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布最欠。 她就那樣靜靜地躺著示罗,像睡著了一般惩猫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚜点,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天轧房,我揣著相機與錄音,去河邊找鬼绍绘。 笑死奶镶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陪拘。 我是一名探鬼主播厂镇,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼左刽!你這毒婦竟也來了捺信?” 一聲冷哼從身側(cè)響起谎懦,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤厢塘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卓缰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喇辽,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡掌挚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菩咨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吠式。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抽米,靈堂內(nèi)的尸體忽然破棺而出奇徒,到底是詐尸還是另有隱情,我是刑警寧澤缨硝,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站罢低,受9級特大地震影響查辩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜网持,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一宜岛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧功舀,春花似錦萍倡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阱佛。三九已至,卻和暖如春戴而,著一層夾襖步出監(jiān)牢的瞬間凑术,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工所意, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淮逊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓扶踊,卻偏偏與公主長得像泄鹏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秧耗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容