大家好
最近偶然機會下接觸了React Native這個APP開發方式,這是由facebook所研發的手機軟體開發方式,概念跟 Phone Gap很類似,那...當然,工作最困難的就是一開始,一開始就遇到很多問題,那我這邊就稍微整理一下。
 
大家可以參考官方說明文件
 
基本上,按照官方流程,需要安裝 Chocolatey 與 python2 與 Android Studio 與 NodeJS,但是經過我的試驗,最主要是安裝 NodeJSAndroid SDKJDK 即可。
 
 
 
(其實我覺得 Android Studio 是非常好的工具,但是一直沒時間深入研究,所以也不知道他開發方式的優點與缺點是什麼...)
 
 
 
 
基本上都是安裝最新版本即可,需要注意的是android SDK 必須安裝 Tools -> Build Tools 23.0.1 版本,然後Android 6 我都有裝
 
那這邊有個重點,預設android 模擬器是需要有些CPU配合,例如 intel CPU 好像就會有,但是呢...我家裡電腦是AMD CPU,所以打開虛擬機執行速度簡直慘不忍睹,無法正常運行。這時候基本上就只能使用自己的手機測試了。
 
基本上按照官方步驟到 react-native run-android 這邊就容易開始有問題了
我這邊舉出我遇到的幾個問題
 
1.編譯失敗,找不到SDK位置
會顯示 "Define location with sdk.dir in the local.properties file or with an ANDROID_HOME"
大家乍看之下會以為加入 local.properties 到 android 目錄下然後指定位置會有效,結果看起來...只在linux 系統有效,我在公司電腦與家裡電腦,不論加了幾個 local.properties 或是放到別的位置,或是 修改 sdk.dir 的字串都無效,實際上這檔案當你有這錯誤出現時,就會自動產生了,但是無論如何,編譯的時候就是不會去讀取這個設定,所以如果你是 windows 用戶,只能使用方法2 : 加入 ANDROID_HOME 位置來指定SDK位置。
 
那要如何加入 ANDROID_HOME 位置呢?請在 windows 的系統設定中加入
 
 
那要如何確定有加入成功呢?請在 cmd line 輸入 echo %android_home%
如果有正確資料出來,那就可以準備開始編譯了,如果沒有,請仔細確認設定。
這邊要記得不要使用 git bash 的 cmd line ,不知道為什麼它讀取不到這設定。
題外話:如果有安裝 Android Studio 的話,好像這邊的SDK位置反而變成固定的了,我甚至也不明白到底設定寫在哪邊了 >_<,一直無法修改SDK位置。這真是頭大的問題。
 
2.編譯失敗,SDK沒有23.0.1
請安裝 編譯工具23.0.1
 
3.找不到 jdk1.8.0_101
安裝JDK
 
4. INSTALL_FAILED_INSUFFICIENT_STORAGE
通常是虛擬機的安裝程式無法直接更新,請反安裝已經安裝的測試程式再編譯一次
 
5. expected a component class got object object
通常是程式有錯,如果發現即使修改回去還是一直出現該錯誤,請關閉所有 cmd line 視窗然後再編譯一次。
 
6. installDebug FAILED 安裝不成功
這個問題比較多可能性,例如我遇到一種是因為虛擬機效能太差,所以無法安裝,所以我就改用 wifi 方式 + 實機開發 去安裝
wifi 方式開發
1.複製 專案中 android/app/build/outputs/apk/ 的 app-debug.apk 去安裝在實機
2.打開手機中的app
 
 
3.按下設定 -> Dev Settings
 
 
4.點下 Debugging
 
5.輸入 開發電腦的內網IP(手機 與 開發電腦同一個wifi)
 
 
然後電腦這邊用 cmd line 執行
react-native start
然後手機app這邊在按下設定->點選 Reload 應該就可以連結上
 
 
這就是wifi 開發方式,有人認為這種方式比較不方便...。
但是當你虛擬機開不起來或是太慢的時候,只能這樣做了。
 
##################
以上!如果有看到app測試畫面,那就是成功拉,趕快來體驗react-native 的開發方式吧!
那如果說要問用 react-native 開發有什麼優點,說實在話我還不清楚,因為我連用原生的 Android Studio 開發的經驗都還沒有,所以實在是無法比較,但是我認為如果可以用 javascript ES6 的方式去開發...說實在話應該是還不錯,用javascript開發有很多優點,但是並不是說所有專案都一定要用 nodeJs開發喔,都應該因應該專案的屬性去調整才是正確之道,甚至要優先考慮開發時程與人員程式熟悉領域互相配合,只要開發出來的系統能夠符合需求,就是好系統,跟開發語言沒有直接關係。
 
那...我也是初學者,希望將我的經驗分享出去,對大家有幫助,感恩啊!