1. 关于本文
react正茁壮成长,react-native也是如日中天,因为对react挺感兴趣,所以在了解了react-native后也打算弄个hello world玩耍一下,打开官网的说明,简单看了下,貌似最先支持的是OSX的系统,然后逐步的开始支持Linux与Windows,作为一个Fedora的异教徒,怎么能投奔苹果党,既然支持Linux,那么怎么着也得折腾折腾 —— 2015-12-27
所以,记录下来,一是方便自己以后搭建,二来也能帮助没有一点Android开发经验的同学也能搭建个hello world玩玩
2. 相关资料
React-native的官方网站:https://facebook.github.io/react-native/docs/getting-started.html 尽量关注官网的教程,因为是最具有时效性和权威的
关于开发Android的连接是这个:https://facebook.github.io/react-native/docs/android-setup.html
3. 系统环境
操作系统:Linux(Fedora 23) Node.js版本:v5.0.0 npm版本:3.3.6
node和npm安装此处不介绍,推荐使用nvm管理node版本
注意!继续操作前需对网络进行线路优化
4. 安装git
dnf install git
5. 安装openJDK
dnf install java-1.8.0-openjdk-devel
其它发行版查询下“openjdk”,进行安装
6. 安装Android SDK
下载网址:https://developer.android.com/sdk/installing/index.html
下载那个 Stand-alone SDK Tools
就可以
将其解压缩到Documents文件夹下,编辑 ~/.bashrc
文件,在末尾添加
export ANDROID_HOME=/home/你的用户名/Documents/android-sdk-linux
这样,每次开机都会自动载入环境变量。当然,现在需要手动在中端运行一下如上命令
上面的只是一个管理工具,在android-sdk-linux目录下运行 ./tool/android
启动管理界面,按照如下框中进行勾选,然后点击安装
也许不用安装SDK Build-tools 23.0.2,因为之前我安装这个,提示报错,缺少0.1,于是我才又下载下边的那个0.1
点击安装后,离开椅子,看看风景什么的吧,可能需要等一会...
7. 安装Genymotion
Genymotion是一个模拟器,可以用来模拟andrid手机,这在开发手机应用的时候非常方便。
Genymotion是收费软件,不过可以下载免费个人版,下载地址: Genymotion下载
虽然提供的都为Ubuntu,但是不用担心,Fedora也是可以使用的。随便下载一个,我这里下载的是64 bits version (40.95 MB)
在安装Genymotion之前,Linux下需要安装VirtualBox,这个东西不是那么好装的,以前就花了很多功夫来安装,并记录下来,现在倒是省事很多。《Fedora下安装VirtualBox》, 看来多做笔记还是有些用的
安装Genymotion:
chmod +x genymotion-2.6.0-ubuntu15_x64.bin
./genymotion-2.6.0-ubuntu15_x64.bin
很快就安装完成了,这时,可以到Genymotion的目录下运行./genymotion
运行模拟器
基本上会缺少一些包的
libjpeg.so.8: cannot open shared object file: No such file or directory
解决办法:去jpegclub官网下载8版本的包编译安装,fedora的源只提供了6.4版本的。
安装jpeg:
tar xvf jpegsrc.v8d1.tar.gz
cd jpeg-8d1
./configure
make
make test
sudo make install
jpeg被安装到了/usr/local/lib目录下
[sincerefly@localhost ~]$ ls /usr/local/lib
libjpeg.a libjpeg.la libjpeg.so libjpeg.so.8 libjpeg.so.8.4.0
[sincerefly@localhost ~]$
有libjpeg.so.8
文件,但是运行Genymotion还是不会找到jpeg,需要我们手动指定下目录
编辑/etc/ld.so.conf
文件(需要管理员权限),将/usr/local/lib添加到里面,关闭文件后运行ldconfig
,ok
参考:
继续运行./genymotion又少东西了...
./genymotion: error while loading shared libraries: libdouble-conversion.so.1: cannot open shared object file: No such file or directory
源中没有,网上找到了一个rpm包,下载那个x86_64的Fedora23版本。
sudo dnf install ./double-conversion-2.0.1-6.fc23.x86_64.rpm
好了,再次运行,我还等着继续报错,结果出来个界面,吓我一跳...
之后就比较好操作了,下一步什么的,选择个版本,手机...等等,继续等待...
安装完成,在主界面点击启动,就可以了。
8. 初始化项目
准备了这么长时间,终于可以初始化项目了,呼...
npm install -g react-native-cli
react-native init AwesomeProject
这一步是npm在安装软件,所以必须要联网的,运行期间应该会出现这样的错误
AAPT err(1556614376): /home/sincerefly/Documents/android-sdk-linux/build-tools/23.0.1/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(262116085): /home/sincerefly/Documents/android-sdk-linux/build-tools/23.0.1/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(138737218): /home/sincerefly/Documents/android-sdk-linux/build-tools/23.0.1/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(129251341): /home/sincerefly/Documents/android-sdk-linux/build-tools/23.0.1/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(423515635): /home/sincerefly/Documents/android-sdk-linux/build-tools/23.0.1/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(2092258516): /home/sincerefly/Documents/android-sdk-linux/build-tools/23.0.1/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(1374803413): /home/sincerefly/Documents/android-sdk-linux/build-tools/23.0.1/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
我的系统是64位的,但是它需要的是32位的包,所以应该这样安装:
sudo dnf install -y glibc.i686 zlib.i686 libstdc++.i686 ncurses-libs.i686
Ubuntu用户参考:Mobile-Dev-Install:-Android-on-Linux
上边的链接非常建议大家看看,会有收获
跟着官网走
cd AwesomeProject
react-native run-android
不出意外的话你会得到这样的输出和一个红色的画面
Starting JS server...
Building and installing the app on the device (cd android && ./gradlew installDebug)...
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72301Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72301Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42301Library UP-TO-DATE
:app:prepareComFacebookFrescoDrawee081Library UP-TO-DATE
:app:prepareComFacebookFrescoFbcore081Library UP-TO-DATE
:app:prepareComFacebookFrescoFresco081Library UP-TO-DATE
:app:prepareComFacebookFrescoImagepipeline081Library UP-TO-DATE
:app:prepareComFacebookFrescoImagepipelineOkhttp081Library UP-TO-DATE
:app:prepareComFacebookReactReactNative0171Library UP-TO-DATE
:app:prepareOrgWebkitAndroidJscR174650Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:bundleDebugJsAndAssets SKIPPED
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJavaWithJavac UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug UP-TO-DATE
:app:zipalignDebug UP-TO-DATE
:app:assembleDebug UP-TO-DATE
:app:installDebug
Installing APK 'app-debug.apk' on 'PREVIEW - Google Nexus 5X - 6.0.0 - API 23 - 1080x1920 - 6.0'
Installed on 1 device.
BUILD SUCCESSFUL
Total time: 14.435 secs
This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html
Starting the app (/home/sincerefly/Documents/android-sdk-linux/platform-tools/adb shell am start -n com.awesomeproject/.MainActivity)...
Starting: Intent { cmp=com.awesomeproject/.MainActivity }
events.js:141
throw er; // Unhandled 'error' event
^
Error: spawn xterm ENOENT
at exports._errnoException (util.js:860:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
at onErrorNT (internal/child_process.js:344:16)
at doNTCallback2 (node.js:450:9)
at process._tickCallback (node.js:364:17)
这里我没有更细致的研究原因,也没有很好的办法,sf上说Linux下用react-native start
启动项目就可以了
重新运行,真的可以...
如何简单的修改下界面呢?
编辑项目目录的index.android.js文件,如果你之前了解过react,那么看起来会非常的亲切
简单修改点东西,然后
默认的右侧,你点一下最右下角也能出现菜单,点击Reload JS
,就可以刷新界面了
9. 总结
想必OSX下安装会容易很多吧...
Facebook的员工虽然都是Mac电脑,但是既然开源了,也照顾我等用Linux的小伙伴呀 (。・`ω´・)
React-native发展很快,现在不用着急解决自动刷新等问题,想必隔断时间看看官网,估计对于Linux就会更加的完善了.
就酱~