在linux上搭建react-native android開(kāi)發(fā)環(huán)境防坑指南

筆者接觸react native一個(gè)星期斋射,可以說(shuō)是趟坑無(wú)數(shù)但荤,憤懣不已腹躁,所以煉制這篇文章希望后來(lái)者能夠少走彎路。
我一開(kāi)始是在windows上面成功搭建這個(gè)開(kāi)發(fā)環(huán)境哑了,因?yàn)楣P者不喜歡windows蹩腳到命令行弱左,所以還是裝了ubuntu系統(tǒng),繼續(xù)追求我高效率的開(kāi)發(fā)體驗(yàn)拆火。

首先看官可以移步這個(gè)官方文檔。按照這個(gè)文檔一步步執(zhí)行就行了们镜,筆者后面主要獻(xiàn)上這個(gè)文檔到疏漏和防坑36計(jì)。

Java和android環(huán)境變量一定要精確配置好

這個(gè)是做安卓開(kāi)發(fā)到基礎(chǔ)颈抚,很多次了嚼鹉,話(huà)休煩絮贩汉,直接獻(xiàn)上筆者的配置文件內(nèi)容

sudo gedit ~/.profile

#Android Environment
export ANDROID_HOME=~/Android/sdk

#Java env
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

關(guān)于A(yíng)ndroid SDK的一些要求

  • 官方說(shuō)一定要裝build tools 23.0.1,但是筆者那天網(wǎng)絡(luò)不好锚赤,偏偏下載不下這個(gè)版本雾鬼。怎么辦,編譯工程直接報(bào)錯(cuò)宴树。
    于是筆者修改了工程中build.gradle文件中到相關(guān)配置選項(xiàng)buildToolsVersion "23.0.1"策菜,修改成你當(dāng)前sdk包里面已有的版本,比如25.0.1酒贬。
    之所以官方說(shuō)要23.0.1是因?yàn)槌跏蓟こ痰臅r(shí)候默認(rèn)配置是這個(gè)又憨。
  • minSdkVersion 16,在build.gradle中一定注意這個(gè)锭吨,16是facebook支持到最小api蠢莺,切記切記祸憋!筆者到工程又一次因?yàn)槭?5,半天沒(méi)查處原因巍沙。

關(guān)于效率的一些做法

  • 初始化工程之前務(wù)必添加淘寶鏡像源允乐,不然你就準(zhǔn)備等半天吧敞临,有時(shí)還會(huì)因?yàn)閠imeout導(dǎo)致失敗。具體的,在終端執(zhí)行

npm config set registry https://registry.npm.taobao.org

然后檢查是否設(shè)置成功:

npm config list

然后再初始化工程:

react-native init MyProject

  • 運(yùn)行工程之前,把gradle離線(xiàn)到本地并引用凿滤,不然比上一步還慢溪椎!具體做法是打開(kāi)項(xiàng)目工程下gradle/wrapper/gradle-wrapper.properties這個(gè)文件,查看distributionUrl這個(gè)值是那個(gè)gradle的版本,然后去這個(gè)鏈接,把相應(yīng)到版本下載到本地,比如說(shuō)home/phoobobo/gradle/gradle-2.4-all.zip這個(gè)路徑哀墓,那么你修改distributionUrl這個(gè)值distributionUrl=file:///home/phoobobo/gradle/gradle-2.4-all.zip贾漏。
    執(zhí)行完上述操作再通過(guò)終端命令react-native run-android運(yùn)行工程或者在android studio直接運(yùn)行工程,會(huì)很快。

必須安裝watchman县好!

必須安裝watchman!必須安裝watchman!必須安裝watchman!重要的事情說(shuō)三遍!我就因?yàn)闆](méi)有安裝watchman后面浪費(fèi)到時(shí)間不計(jì)其數(shù)隅俘,雖然臨時(shí)用其他辦法解決了捣卤,但是最終卡在這里過(guò)不去了哥捕。
如果不裝凫佛,經(jīng)常會(huì)出現(xiàn)這樣到問(wèn)題:

watch /home/boolean/Workspace/react-native-TIMMangaerDemo_android/android/sdklibrary/build/intermediates/rs/androidTest/debug ENOSPC
{"code":"ENOSPC","errno":"ENOSPC","syscall":"watch /home/boolean/Workspace/react-native-TIMMangaerDemo_android/android/sdklibrary/build/intermediates/rs/androidTest/debug","filename":"/home/boolean/Workspace/react-native-TIMMangaerDemo_android/android/sdklibrary/build/intermediates/rs/androidTest/debug"}
Error: watch /home/boolean/Workspace/react-native-TIMMangaerDemo_android/android/sdklibrary/build/intermediates/rs/androidTest/debug ENOSPC
at exports._errnoException (util.js:911:11)
.......

有沒(méi)有發(fā)現(xiàn)里面好多“watch”瓮栗?開(kāi)始我是通過(guò)刪除build目錄职辨,重新build工程,問(wèn)題有很多次得到解決,后面就再也不行了。然后我想起官方文檔里有推薦安裝watchman豌汇,說(shuō)可以解決文件監(jiān)控到某些bug梅尤。第一次裝到時(shí)候執(zhí)行./autogen.sh 不成功,然后覺(jué)得這個(gè)東西是可選項(xiàng),所以就沒(méi)裝。后來(lái)我猜可能就是這個(gè)導(dǎo)致的問(wèn)題沟绪。

按照常規(guī)方法安裝watchman之前需要

linux安裝watchman先要安裝依賴(lài)

sudo apt-get install autoconf automake python-dev

然后如官方的做法依次執(zhí)行

git clone https://github.com/facebook/watchman.git
cd watchman
git checkout v4.7.0 # 這是facebook官方文檔說(shuō)的最新穩(wěn)定版本
./autogen.sh
./configure
make
sudo make install

剛安裝完watchman,運(yùn)行react-native start會(huì)報(bào)這樣到錯(cuò)誤

ERROR A non-recoverable condition has triggered. Watchman needs your help!
The triggering condition was at timestamp=1481104643: inotify-add-watch(/home/boolean/Workspace/react-native-TIMMangaerDemo_android/android/reactnativelibrary/build/generated/source/r/debug) -> The user limit on the total number of inotify watches was reached; increase the fs.inotify.max_user_watches sysctl
All requests will continue to fail with this message until you resolve
the underlying problem. You will find more information on fixing this at
https://facebook.github.io/watchman/docs/troubleshooting.html#poison-inotify-add-watch

去facebook的網(wǎng)站看了相關(guān)說(shuō)明以后知道是inotify-add-watch的問(wèn)題尊浪,但是不知道如何去增加這個(gè)限制。后來(lái)又去watchman的安裝說(shuō)明網(wǎng)站〖柙蓿看到如下說(shuō)明

You obviously need to ensure that max_user_instances and max_user_watches are set so that the system is capable of keeping track of your files.
/proc/sys/fs/inotify/max_user_watches impacts how many dirs you can watch across all watched roots.

那么怎么調(diào)整max_user-watches的值呢。查找以后肚吏,發(fā)現(xiàn)這是內(nèi)核的東西方妖,不好輕易改變,需要用下面到方法:

sudo su
vim /etc/sysctl.conf


在文件里面添加`**fs.inotify.max_user_watches=16384**`(這個(gè)是系統(tǒng)默認(rèn)值到兩倍罚攀,夠用了)党觅,:wq保存
然后運(yùn)行`/sbin/sysctl -p`使其立即生效
使用`sysclt -a`可以看到`fs.inotify.max_user_watches = 16384`
或者直接查看`/proc/sys/fs/inotify/max_user_watches`這個(gè)文件(切勿直接修改這個(gè)文件,因?yàn)榧词鼓阈薷牧水?dāng)時(shí)生效斋泄,等你重啟電腦杯瞻,這個(gè)值又會(huì)恢復(fù)默認(rèn))。

好了炫掐,再運(yùn)行`react-native start`就OK了

#關(guān)于用真機(jī)調(diào)試
* 和你的瀏覽器端不在同一wifi環(huán)境魁莉,可以直接調(diào)試,linux需要手動(dòng)啟動(dòng)react packager:
>`react-native start`

 這個(gè)命令你可以在工程編譯運(yùn)行之后執(zhí)行募胃。
另外旗唁,如果你中途有斷開(kāi)usb連接,那么需要執(zhí)行
>`adb reverse tcp:8081 tcp:8081`

* 和你的瀏覽器端在同一wifi環(huán)境下
此時(shí)需要你查找本機(jī)ip地址和端口痹束,然后搖晃手機(jī)检疫,在device settings里設(shè)置ip地址和端口。

另外参袱,有時(shí)候你會(huì)遇到這樣的問(wèn)題:
>{你的app 名字} has not been registered. This is other due to a require() error during initialization...

這可能是你的packager是另外一個(gè)工程的电谣,而且占用了8081的端口。解決辦法就是stop目前的packager抹蚀,然后在工程目錄下重啟packager:

```shell
react-native start

好了剿牺,先講這么多,后面遇到坑再補(bǔ)充
另外預(yù)告下环壤,筆者不久后會(huì)出react-native android插件開(kāi)發(fā)的文章晒来,敬請(qǐng)關(guān)注

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市郑现,隨后出現(xiàn)的幾起案子湃崩,更是在濱河造成了極大的恐慌荧降,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攒读,死亡現(xiàn)場(chǎng)離奇詭異朵诫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)薄扁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)剪返,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人邓梅,你說(shuō)我怎么就攤上這事脱盲。” “怎么了日缨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵钱反,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我匣距,道長(zhǎng)面哥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任墨礁,我火速辦了婚禮幢竹,結(jié)果婚禮上耳峦,老公的妹妹穿的比我還像新娘恩静。我一直安慰自己,他們只是感情好蹲坷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布驶乾。 她就那樣靜靜地躺著,像睡著了一般循签。 火紅的嫁衣襯著肌膚如雪级乐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天县匠,我揣著相機(jī)與錄音风科,去河邊找鬼。 笑死乞旦,一個(gè)胖子當(dāng)著我的面吹牛贼穆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兰粉,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼故痊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了玖姑?” 一聲冷哼從身側(cè)響起愕秫,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慨菱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后戴甩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體符喝,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年甜孤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洲劣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡课蔬,死狀恐怖囱稽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情二跋,我是刑警寧澤战惊,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站扎即,受9級(jí)特大地震影響吞获,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谚鄙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一各拷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闷营,春花似錦烤黍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至娘赴,卻和暖如春规哲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诽表。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工唉锌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竿奏。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓袄简,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親议双。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痘番,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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