react-native android-錯(cuò)誤記錄

1、
react-native run-android出現(xiàn)
FAILURE: Build failed with an exception.

細(xì)看是這樣

  • What went wrong:
    Execution failed for task ':app:installDebug'.

com.android.builder.testing.api.DeviceException: No connected devices!

重點(diǎn)是這句話:No connected devices!
這種問(wèn)題是因?yàn)闆](méi)有設(shè)備運(yùn)行或者模擬器沒(méi)開(kāi),導(dǎo)致沒(méi)有鏈接上網(wǎng)絡(luò),真機(jī)也要記得開(kāi)啟調(diào)試模式。

/***************************以下新手建議讀*********************************/

Q:RN和React.js是一個(gè)東西嗎?

A:RN和React.js共用一些抽象層,但具體有很多差異,且目標(biāo)平臺(tái)不同:RN目前只能開(kāi)發(fā)iOS/Android App,而React.js用于開(kāi)發(fā)web頁(yè)面。

Q:RN有哪些已經(jīng)上架的案例?

A:官方有一個(gè)showcase頁(yè)面。我們也收集了一些國(guó)內(nèi)的案例。如果你有作品想要推廣,歡迎給我私信。

Q:RN可以在windows下開(kāi)發(fā)嗎?

A:對(duì)于iOS開(kāi)發(fā),可以通過(guò)虛擬機(jī)或黑蘋(píng)果等方式,但很麻煩也不推薦。做iOS開(kāi)發(fā),遲早你都需要一臺(tái)Mac電腦。

對(duì)于Android開(kāi)發(fā),理論上沒(méi)問(wèn)題。但由于FB的員工基本都用mac,沒(méi)有怎么管過(guò)windows兼容性,所以目前的版本可能在windows上會(huì)遇到一些問(wèn)題。

具體搭建方法請(qǐng)參考官方文檔以及@天地之靈 總結(jié)的完整的windows環(huán)境搭建指南

Q:RN所支持的最低iOS和Android版本?

A:Android >= 4.1 (API 16)

iOS >= 7.0

Q:RN和cordova/phonegap是一個(gè)東西嗎?

A:不一樣。RN不是一個(gè)webview(但包含了webview組件),不能直接復(fù)用web頁(yè)面代碼。RN的性能接近原生,超過(guò)cordova/phonegap。

Q:可以使用現(xiàn)有的js庫(kù)嗎?

A:由于RN理論上更接近nodejs的運(yùn)行環(huán)境,所以對(duì)nodejs的庫(kù)兼容更好一些。瀏覽器端的js庫(kù),涉及到DOM、BOM、CSS等功能的模塊無(wú)法使用,因?yàn)镽N的環(huán)境中沒(méi)有這些東西。

Q:可以使用現(xiàn)有的objc/swift/java庫(kù)嗎?

A:可以,但需要參照這篇文檔和這篇文檔進(jìn)行修改。

Q:可以熱更新嗎?蘋(píng)果允許嗎?

A:官方?jīng)]有提供熱更新方案,但本站推出了完整的熱更新方案,差異更新只需極小流量。蘋(píng)果目前的政策明確允許基于javascriptCore的熱更新。
環(huán)境搭建與編譯問(wèn)題

Q:創(chuàng)建新項(xiàng)目,react-native init AwesomeProject命令長(zhǎng)時(shí)間無(wú)響應(yīng),或報(bào)錯(cuò)shasum check failed

A:由于眾所周知的網(wǎng)絡(luò)原因,react-native命令行從npm官方源拖代碼時(shí)會(huì)遇上麻煩。請(qǐng)將npm倉(cāng)庫(kù)源替換為國(guó)內(nèi)鏡像:

npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global

另,執(zhí)行init時(shí)切記不要在前面加上sudo(否則新項(xiàng)目的目錄所有者會(huì)變?yōu)閞oot而不是當(dāng)前用戶(hù),導(dǎo)致一系列權(quán)限問(wèn)題,請(qǐng)使用chown修復(fù))。

Q:運(yùn)行react-native run-android時(shí)報(bào)錯(cuò),報(bào)錯(cuò)信息中含有Could not find tools.jar等字樣

A:請(qǐng)?jiān)谙到y(tǒng)變量中添加classpath,指向jdk中的tools.jar。

Q:運(yùn)行react-native run-android時(shí)報(bào)錯(cuò),報(bào)錯(cuò)信息中含有SDK location...ANDROID_HOME等字樣

A:請(qǐng)對(duì)照官方文檔,配置ANDROID_HOME環(huán)境變量。

Q:運(yùn)行react-native run-android時(shí)報(bào)錯(cuò),報(bào)錯(cuò)信息中含有bintray.com、gradle.org等網(wǎng)址

A:請(qǐng)(強(qiáng)力)科學(xué)上網(wǎng),反復(fù)再反復(fù)地重試。

Q:運(yùn)行react-native run-android時(shí)報(bào)錯(cuò),報(bào)錯(cuò)信息中含有not found:git、android-23、Build Tools revision x.x.x、appcompat-v7等字樣

A:請(qǐng)對(duì)照官方文檔以及@天地之靈 總結(jié)的完整的windows環(huán)境搭建指南仔細(xì)檢查漏裝的依賴(lài)項(xiàng)!(沒(méi)錯(cuò),再說(shuō)一遍,要裝全文檔里提到的東西,,以及選擇對(duì)應(yīng)的版本號(hào)!)。

Q:運(yùn)行react-native run-android時(shí)報(bào)錯(cuò),報(bào)錯(cuò)信息中含有No connected devices!字樣

A:既然是沒(méi)有connected devices,那你就connect一個(gè)device咯!(usb連上真機(jī),或啟動(dòng)一個(gè)模擬器)。

Q:運(yùn)行react-native run-android時(shí)報(bào)錯(cuò),報(bào)錯(cuò)信息中含有Unable to upload some APKs!字樣

A:參照下圖降級(jí)gradle版本

0_1459218230837_QQ圖片20160329102338.png

Q:真機(jī)上運(yùn)行時(shí)白屏!

A:請(qǐng)找到并打開(kāi)懸浮窗權(quán)限。比如miui系統(tǒng)在這里打開(kāi)懸浮窗權(quán)限。

Q:如何升級(jí)RN版本?

A:請(qǐng)用編輯器打開(kāi)項(xiàng)目目錄中的package.json,找到類(lèi)似下面的一行配置

"react-native": "0.13.0",
將其改為要升級(jí)的版本號(hào),如“0.15.0-rc”(當(dāng)然要先確定這個(gè)版本已經(jīng)發(fā)布到npm上了,如果配置中有^或~之類(lèi)的符號(hào),可以參考這篇文章來(lái)了解其含義。)。

然后在當(dāng)前目錄的命令行中執(zhí)行npm i

如果提示權(quán)限錯(cuò)誤則在前面加上sudo(windows下不需要).

npm i執(zhí)行完畢且成功不報(bào)錯(cuò)之后,在項(xiàng)目目錄中運(yùn)行(注意這一步會(huì)覆蓋原生代碼,請(qǐng)事先備份原生代碼,事后做比對(duì))

react-native upgrade

對(duì)于0.14以下版本升級(jí)0.14的情況,還需要額外手動(dòng)處理一下。

Q:報(bào)錯(cuò):SyntaxError: Use of const in strict mode

A:請(qǐng)檢查node版本(4.0以上)。

Q:Windows下報(bào)錯(cuò):ERROR Watcher took too long to load

Try running watchman version from your terminal

A:請(qǐng)參照此文底部的說(shuō)法修改。

Q:報(bào)錯(cuò):Invariant Violation:Application XXXX has not been registered.

A:請(qǐng)確保index.*.js中的

AppRegistry.registerComponent('項(xiàng)目名',() => ...);

與appDelegate.m中的

RCTRootView*rootView = [[RCTRootViewalloc]initWithBundleURL:jsCodeLocation
moduleName:@"項(xiàng)目名" launchOptions:launchOptions];

或是MainActivity.java中的

@Override
protected String getMainComponentName() {
return "項(xiàng)目名";
}

都保持一致。

Q:應(yīng)該使用什么IDE開(kāi)發(fā)?

A:@tdzl2003: 有幾個(gè)選擇:

WebStorm,需要付費(fèi)購(gòu)買(mǎi)(學(xué)生黨可憑edu郵箱在此申請(qǐng)免費(fèi)授權(quán)),最新版對(duì)JSX、flowtype等語(yǔ)法支持均非常優(yōu)秀。
Sublime,雖然會(huì)不斷提示你是否要購(gòu)買(mǎi),然而根據(jù)用戶(hù)協(xié)議可以無(wú)限期試用。插件系統(tǒng)非常強(qiáng)大,因此如果愿意折騰的話,是個(gè)非常不錯(cuò)的選擇。
VS Code,微軟出的開(kāi)源跨平臺(tái)編輯器,適用于編寫(xiě)web代碼,也可以用于編寫(xiě)ReactNative項(xiàng)目。據(jù)說(shuō)最近剛剛加入了對(duì)JSX的支持(也可能是插件?),整體上相當(dāng)不錯(cuò)。
nuclide(網(wǎng)頁(yè)國(guó)內(nèi)無(wú)法打開(kāi)),facebook發(fā)布的基于atom的IDE,據(jù)說(shuō)非常不流暢。

另外雖然主要的業(yè)務(wù)邏輯是使用js開(kāi)發(fā),但仍然要依賴(lài)于原生的編譯/調(diào)試環(huán)境,所以你還需要同時(shí)運(yùn)行Xcode(iOS)或Android Studio(android)等。
開(kāi)發(fā)與調(diào)試問(wèn)題

Q:如何開(kāi)啟調(diào)試功能?

A:點(diǎn)擊iOS模擬器頂部的Hardware菜單,選擇Shake Gesture(對(duì)應(yīng)真機(jī)搖一搖),會(huì)自動(dòng)彈出如下圖的菜單。
0_1450967966242_826615-967fd84e771b47f2.png
安卓模擬器則是點(diǎn)擊菜單鍵(對(duì)于不同的模擬器,其對(duì)應(yīng)鍵位不同,實(shí)在不知道的,可以在命令行中運(yùn)行adb shell input keyevent 82來(lái)觸發(fā)),真機(jī)上沒(méi)有菜單鍵的,搖一搖即可。

選擇Debug in Chrome即會(huì)啟動(dòng)Chrome作為運(yùn)行和調(diào)試環(huán)境(注意此時(shí)JS引擎為Chrome的V8,與iOS真機(jī)的javascriptCore引擎存在一些差異)。選擇Inspect Element即可以像調(diào)試網(wǎng)頁(yè)元素一樣查看布局元素的樣式,但比較簡(jiǎn)陋。React Devtools插件可裝可不裝,它只用來(lái)查看布局,不影響調(diào)試,且在目前的版本(>0.13)中還無(wú)法正常加載。
調(diào)試的相關(guān)文檔點(diǎn)此。

Q:調(diào)試模式下報(bào)錯(cuò):Runtime is not ready. Make sure...或是socket closed.

A:有時(shí)Chrome進(jìn)程會(huì)失去響應(yīng),可以嘗試手動(dòng)將Chrome的React Native Debugger標(biāo)簽切換到前臺(tái)再Reload模擬器頁(yè)面。

Q:iOS模擬器突然變成了慢動(dòng)作?

A:iOS模擬器有個(gè)slow animation的選項(xiàng),其快捷鍵是commant + T,調(diào)試過(guò)程中容易誤碰到。再按一次關(guān)閉這個(gè)選項(xiàng)即可。

Q:使用ListView時(shí)報(bào)錯(cuò):Sticky header index 0 was outside the range {...}

A:看起來(lái)是個(gè)數(shù)組越界錯(cuò)誤,但多數(shù)情況下是由于ListView的子組件渲染錯(cuò)誤(如套數(shù)據(jù)時(shí)沒(méi)有檢查undefined等)引起,而非ListView本身的問(wèn)題。

Q:ListView的數(shù)據(jù)到底應(yīng)該怎么配?

A:參考下圖
0_1450968223329_826615-0b079d98f74d7d07.png

Q:使用Image時(shí)報(bào)錯(cuò):You are trying to render the global Image variable as a React element. You probably forgot to require Image.

A:由于React的Image組件和全局的Image對(duì)象重名,所以使用Image組件時(shí)一定要記得在文件開(kāi)頭正確引入React的Image組件。

Q:在使用Navigator的同時(shí)使用ListView或ScrollView,后兩者的頭部會(huì)多出一些空間。

A:將automaticallyAdjustContentInsets屬性設(shè)為{false}.

Q:有一些示例代碼中有奇怪的問(wèn)號(hào),比如function foo(x:?string),代表什么意思?

A:這是通過(guò)一個(gè)名為flow的外部工具為javascript加上強(qiáng)類(lèi)型檢查的功能,不影響編譯和運(yùn)行。直接無(wú)視就好。

Q:報(bào)錯(cuò):Adjacent JSX elements must be wrapped in an enclosing tag.

A:render方法中必須只能包含一個(gè)根元素。

Q:報(bào)錯(cuò):Invariant Violation: onlyChild must be passed a children with exactly one child

A:一般是Touchable開(kāi)頭的幾個(gè)組件,如果沒(méi)有子元素或者指定多個(gè)并列子元素都會(huì)報(bào)錯(cuò)。

Q:報(bào)錯(cuò):Invariant Violation: Element type is invalid

A:如果是引入新組件時(shí)報(bào)的錯(cuò),據(jù)@tdzl2003 解釋:
從ReactNative 0.16起,babel升級(jí)到了6.x版本。
在babel6中,require和export default不能直接配對(duì)使用。
所以,你要么把

var Hello = require('./components/Hello');

改為

import Hello from './components'

要么把

export default React.createClass({

改為

module.exports = React.createClass({

二者選其一,配對(duì)使用。

Q:如何獲取服務(wù)器端數(shù)據(jù)/可以使用Ajax嗎?

A:可以用ajax,以及大部分現(xiàn)有的ajax庫(kù),而且不受瀏覽器跨域限制。官方推薦用更簡(jiǎn)單的fetch api來(lái)替代傳統(tǒng)的ajax.但目前還無(wú)法在Chrome中直接觀測(cè)請(qǐng)求的詳情。

Q:如何讀寫(xiě)文件?如何調(diào)用攝像頭?如何調(diào)用麥克風(fēng)?等等

A:對(duì)于官方?jīng)]有提供的組件或API,請(qǐng)自行在js.coach或github中搜索第三方實(shí)現(xiàn)。如果搜不到相關(guān)結(jié)果,你只能考慮自己用原生代碼實(shí)現(xiàn)后整合進(jìn)來(lái)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,441評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,211評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,736評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,475評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,834評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,009評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,559評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,516評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,728評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,132評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,443評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,249評(píng)論 3 399
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,484評(píng)論 2 379

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