多余的不解釋了耿戚。直接上車吧杨蛋。中途遇到的問題我也寫出來了(其實和官網(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.
2.如果你沒有就創(chuàng)建新的,當(dāng)然這里也可以選中使用方法一創(chuàng)建的
keystore
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=*****
這里可以放到這里面:
上面的這些會作為全局的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
文件然后通過curl
從ReactNative
包管理器中獲取JavaScript
文件园欣。最后使用gradlew
來構(gòu)建release
版本的APK
5、在設(shè)備上安裝release版本的APK(以上完成之后我用的Android Studio打包的)
在項目的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í)行完畢后:
打包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.
解決: 刪掉那些找不到的,比如上面那些都刪掉
問題二:
* 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.如圖:
明顯圖片名字格式不正確.英文小寫沒有特殊符號數(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
一.
二.
將你創(chuàng)建的簽名選上,
或者你用我這個方式寫試試:
問題四:
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.
找到:
首先在 <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ā)布(親測可行)