react-native因?yàn)槭怯肑avaScript語(yǔ)言寫(xiě)的僚匆,所以需要把js代碼和圖片資源都放進(jìn)apk中携冤,所以打包時(shí)需要生成JavaScript的Bundle離線(xiàn)包稍走,之后就可以像原生一樣打包就OK了心褐。因?yàn)楸救擞玫膍ac几颜,所以打包時(shí)可能會(huì)出現(xiàn)Windows不會(huì)出現(xiàn)的問(wèn)題,后面我會(huì)詳細(xì)介紹的巾陕。這里希望讀者先閱讀完此文章大致了解打包過(guò)程再操作讨跟,可以少犯錯(cuò)誤纪他。
Android打包
Bundle離線(xiàn)包
- 首先,進(jìn)入項(xiàng)目目錄晾匠,然后在android目錄里創(chuàng)建一個(gè)assets文件夾,
mkdir -p android/app/src/main/assets
然后就可以打包離線(xiàn)Bundle了
RN版本0.49之前用這個(gè):
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
RN版本0.49之后用這個(gè)
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
這樣就可以在android/app/src/main/assets目錄下生成一個(gè)index.android.jsbundle文件了茶袒,android/app/src/main/res目錄下會(huì)生成我們RN項(xiàng)目中用到的圖片資源。
打包APK
Android要求所有應(yīng)用都有一個(gè)數(shù)字簽名才會(huì)被允許安裝在用戶(hù)手機(jī)上凉馆,所以在把應(yīng)用發(fā)布到類(lèi)似Google Play store這樣的應(yīng)用市場(chǎng)之前薪寓,你需要先生成一個(gè)簽名的APK包。
目前打包apk有兩種方法澜共,一種是官網(wǎng)給出的gradle語(yǔ)言的keytool命令生成簽名文件來(lái)簽名Apk向叉。另一種就是使用Android Studio進(jìn)行簽名打包。
這里我推薦使用第二種用Android Studio進(jìn)行簽名打包嗦董,因?yàn)橐驗(yàn)檫@種比較簡(jiǎn)單母谎,而且是可視化界面簽名。
如果你有keystore可以點(diǎn)擊Choose existing...選擇你的簽名文件京革,如果沒(méi)有則點(diǎn)擊Create new...新建一個(gè)奇唤,如下圖
上面主要是文件路徑、密碼匹摇、Alias咬扇,建議全部設(shè)置一個(gè)密碼,方便記憶廊勃,Alias這個(gè)不要忘記懈贺,最好把上面信息復(fù)制一份,選定一個(gè)自己熟悉的路徑坡垫,點(diǎn)擊OK保存梭灿。此時(shí)keystore已經(jīng)生成完畢。
這里Build Type要選擇release冰悠,然后點(diǎn)擊Finish就開(kāi)始打包成apk了胎源。這時(shí)會(huì)在./android/app目錄下生成rerelease文件夾,里面有app-release.apk文件屿脐,這時(shí)你就可以把它發(fā)送給其他人炫耀一番了涕蚤。
我遇到的問(wèn)題(Mac電腦)
- 1、報(bào)錯(cuò):
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processReleaseResources'. ......
或
error: uncompiled PNG file passed as argument. Must be compiled first into .flat file.. error: failed parsing overlays.
原因及解決方法:在gradle.properties文件中添加以下行:android.enableAapt2 = false
的诵,它實(shí)質(zhì)上使用舊的aapt來(lái)獲取資源万栅。然后重新打包。
如果還是不行西疤,就把android/app/src/main/res目錄里的drawable-xxx的文件夾全刪了烦粒,或者從一開(kāi)始就不打包圖片資源,去掉打包離線(xiàn)Bundle最后的這一行代碼
--assets-dest ./android/app/src/main/res/ --dev false
- 2、
Could not resolve all files for configuration ':app:lintClassPath'.
解決方法:
修改Project的build.gradle(注意:不是App的build.gradle),兩處加上google()
buildscript {
repositories {
jcenter()
google() //這里
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
}
}
allprojects {
repositories {
jcenter()
google() //這里
}
}