報(bào)錯(cuò)1
Command failed with ENOENT: adb shell am start -n com.awesomeproject/com.awesomeproject.MainActivity -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
需要配置環(huán)境變量(還以為是自動(dòng)配置的)恐锣,這個(gè)直接指路官方文檔幽纷。搭建開發(fā)環(huán)境 · React Native 中文網(wǎng)
不要相信什么安卓模擬器需要手動(dòng)開设联。也是可以自動(dòng)打開的寓搬。不過采驻,前提是需要在安卓斯丟丟里面下載好虛擬設(shè)備-創(chuàng)建和管理虛擬設(shè)備 | Android Studio | Android Developers (google.cn)
3. 配置 ANDROID_HOME 環(huán)境變量
React Native 需要通過環(huán)境變量來了解你的 Android SDK 裝在什么路徑岩喷,從而正常進(jìn)行編譯售碳。
具體的做法是把下面的命令加入到 shell 的配置文件中强重。如果你的 shell 是 zsh,則配置文件為~/.zshrc
贸人,如果是 bash 則為~/.bash_profile
(可以使用echo $0
命令查看你所使用的 shell间景。):
# 如果你不是通過Android Studio安裝的sdk,則其路徑可能不同艺智,請(qǐng)自行確定清楚
export ANDROID_HOME=/Users/你的用戶名/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
報(bào)錯(cuò)2
Unable to load script. Make sure you're eitherrunning Metro (run 'npx react-native start") or thatyour bundle 'index.android.bundle' is packagedcorrectly for release. iniLoadScriptFromAssets
報(bào)錯(cuò)原因:沒有找到index.android.bundle拱燃。
控制臺(tái)先看看端口號(hào)----8081,直接在瀏覽器訪問http://localhost:8081
【原理:每啟動(dòng)一個(gè)react-native 項(xiàng)目力惯,會(huì)自動(dòng)用node啟動(dòng)一個(gè)后臺(tái)服務(wù) 碗誉,app訪問這個(gè)服務(wù)來獲取bundle。出現(xiàn)unable to load script的原因父晶,就是因?yàn)閍pp訪問不到這個(gè)后臺(tái)服務(wù)】
是可以訪問到——說明服務(wù)已經(jīng)跑起來了哮缺。
!<缀取尝苇!再通過本機(jī)IP:8081訪問,如果訪問不了埠胖,大概率是端口被占用了
# 查看端口使用情況及進(jìn)程
lsof -i tcp:8081
# 殺掉多余進(jìn)程
kill -9 pid
# 關(guān)掉終端并重跑服務(wù)
react-native start
其他方法:
解決方法
方法一(未試糠溜,但是其他人用這個(gè)方法解決了)
- 創(chuàng)建android/app/src/main/assets文件夾
- 執(zhí)行命令
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
方法二(試了,無用)
- 修改 項(xiàng)目目錄/android/app/build.gradle直撤,如果沒有這個(gè)聲明非竿,直接在最外層添加
- 主要是設(shè)置bundleInDebug等于true,使得開發(fā)時(shí)也會(huì)打包index.android.bundle
project.ext.react = [
bundleAssetName: 'index.android.bundle',
bundleInDebug: true,
bundleInAlpha: true,
bundleInBeta : true
]