React Native Android 环境搭建 === <!--idoc:ignore:start--> ## 目录 - [基础安装](#基础安装) - [安装Homebrew](#安装homebrew) - [安装Node.js](#安装nodejs) - [安装watchman](#安装watchman) - [安装flow](#安装flow) - [安装react-native-cli](#安装react-native-cli) - [iOS环境安装](#ios环境安装) - [Android环境安装](#android环境安装) - [基础软件安装](#基础软件安装) - [环境变量配置](#环境变量配置) - [测试服务端](#测试服务端) - [启动步骤](#启动步骤) - [各种报错](#各种报错) - [参考资料](#参考资料) <!--idoc:ignore:end--> ## 基础安装 ### 安装Homebrew Homebrew是Mac OSX的包管理器,我们需要通过Homebrew安装开发React Native的相关软件包。 如果不知道怎样安装Homebrew可以点这里:[官网](http://brew.sh/index_zh-cn.html)。根据官网的介绍安装即可。 ### 安装Node.js ```bash $ brew install node ``` ### 安装 watchman watchman是Facebook用于监视JavaScript文件改动的开源项目。 ```bash $ brew install watchman ``` ### 安装flow flow是Facebook开源的一个JavaScript静态类型检查器,用于发现JavaScript程序中的类型错误。 ```bash $ brew install flow ``` ### 安装react-native-cli react-native-cli是React Native的命令行工具,安装react-native-cli后我们就能够通过react-native相关命令管理ReactNative工程。 ```bash $ npm install -g react-native-cli ``` ## iOS环境安装 相对于Android环境搭建,iOS简单太多了,太easy了!在基础环境安装成功之后,只需去[Mac App Store](https://itunes.apple.com/us/app/xcode/id497799835?mt=12)下载Xcode,并安装Xcode即可,首次安装需要打开Xcode初始化。在初始化项目好之后,只需在项目根目录运行下面命令即可: ```bash $ react-native run-ios` ``` ## Android环境安装 在Android环境,比较难搞,按照步骤安装即可,不要放过任何步骤哦。 ### 基础软件安装 1. 安装JDK [jdk-8u101-macosx-x64.dmg](http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html) - 查看版本,命令行中运行`javac -version` 2. 安装Android Studio - 勾选`Performance`和`Android Virtual Device` - 安装相关`SDK Platforms `,记得勾选`Show Package Details` - 安装`SDK Tools` 必须是这个版本 `Android SDK Build-Tools 23.0.1`,记得勾选`Show Package Details`。 - ANDROID_HOME环境变量设置。(见下面 环境变量配置)方法 3. 安装 [免费VirtualBox虚拟机](https://www.virtualbox.org/) 4. 安装模拟器[Genymotion](https://www.genymotion.com/) - 注册帐号 - 下载Genymotion - 安装Genymotion ### 环境变量配置 你可以把`Android SDK`的`tools`和`platform-tools`目录添加到PATH变量中,以便在终端中运行一些Android工具,例如`android avd`或是`adb logcat`等。 在`~/.bash_profile`中添加(如果你安装的 ZSH 则在 `~/.zshrc`中添加): ```bash PATH="~/Library/Android/sdk/tools:~/Library/Android/sdk/platform-tools:${PATH}" export PATH=$HOME/bin:/usr/local/bin:$PATH export ANDROID_HOME=~/Library/Android/sdk export PATH=${PATH}:${ANDROID_HOME}/tools ``` 改完需要运行`source ~/.bash_profile` (注意:你的SDK的具体路径可能不同) ### 测试服务端 这时候可以用浏览器访问 http://localhost:8081/index.android.bundle?platform=android 如果可以访问表示服务器端已经可以了。 ### 启动步骤 #### 启动 Genymotion 设置 在应用中登录,点击按钮`Add`下载模拟器设备,在`Setting`中设置`ADB`选择`User custom Android SDK tools.`填写地址,一般在目录`/Users/用户名/Library/Android/sdk`中,点击按钮`Start`启动模拟器   在启动前需要设置ADB SDK,否则会报错 `error: could not install smartsocket listener: Address already in use`,解决方法:genymotion的adb设置Android sdk。如下图:   #### 运行命令启动项目 进入项目的根目录,也就是有`package.json`文件的目录,运行`react-native run-android`启动项目,如下动图:  ## 各种报错 #### 1. error: no devices/emulators found Could not run adb reverse: Command failed: ~/Library/Android/sdk/platform-tools/adb reverse tcp:8081 tcp:8081 在Android环境下运行,会报下面错误,原因是没有连接手机会报如下错,**开发阶段可忽视** #### 2. react-native run-android时出现Could not download imagepipeline.aar 解决方法:修改build.gradle的版本,com.android.tools.build:gradle:2.1.0,改为更高的,然后更改gradle/wrapper/gradle-wrapper.properties中相应的gradle-2.10-all.zip。 #### 3. Undefined symbols for architecture x86_64: “std::terminate()” 解决方法:I ran in to this issue as well, and the solution @charpeni proposed solved the issue. To be clear for others, if you are upgrading to 0.26+ then you need to make the following changes. In ios/YourProject.xcodeproj/project.pbxproj, look for the two lines like OTHER_LDFLAGS = "-ObjC";. Replace them with the following: ``` OTHER_LDFLAGS = ( "-ObjC", "-lc++", ); ``` #### 4. react-native run-android时出现Could not download imagepipeline.aar 解决方法:修改build.gradle的版本,com.android.tools.build:gradle:2.1.0,改为更高的,然后更改gradle/wrapper/gradle-wrapper.properties中相应的gradle-2.10-all.zip。 #### 5. error: unable to find utility "instruments", not a developer tool or in PATH ```bash ~/Learning/ReactNative/AwesomeProject: react-native run-ios Found Xcode project AwesomeProject.xcodeproj xcrun: error: unable to find utility "instruments", not a developer tool or in PATH Command failed: xcrun instruments -s xcrun: error: unable to find utility "instruments", not a developer tool or in PATH ``` 输入sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/然后就可以运行react-native run-ios了。 #### 6. Property 'force' not found on object of type 'UITouch' 出现这种类似错误,只能升级Xcode咯。 #### 7. Ignoring return value of function declared with warn_unused_result attribute 这个报错在此文件中有两处,代码 ```objective-c SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key); ``` 修改为 ```objective-c (void)SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key); ``` 前面加上`(void)`。 #### 8. Use of undeclared identifier '_refreshControl'; did you mean 'refreshControl'? ``` @implementation RCTCustomScrollView{ __weak UIView *_dockedHeaderView; RCTRefreshControl *_refreshControl; // 加入此行 } ``` #### 9. Execution failed for task ':react-native-update:compileReleaseNdk'.NDK not configured. 错误信息 ``` * What went wrong: Execution failed for task ':react-native-update:compileReleaseNdk'. > NDK not configured. Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties. (On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk) ``` 解决方法:[下载安装NDK和相关工具](https://developer.android.com/ndk/guides/index.html#download-ndk),菜单进入 **Tools > Android > SDK Manager** 在选项卡中选择 **SDK Tools**,选择 **LLDB**, **CMake**, 和 **NDK** 勾选,点击 **Apply** 进行下载安装。 ## Mac 完整卸载 Android Studio 1、卸载Android Studio,在终端(terminal)执行以下命令: ```bash rm -rf /Applications/Android\ Studio.app rm -rf ~/Library/Preferences/AndroidStudio* rm -rf ~/Library/Application\ Support/AndroidStudio* rm -rf ~/Library/Logs/AndroidStudio* rm -rf ~/Library/Logs/AndroidStudio rm -rf ~/Library/Caches/AndroidStudio* ``` 2、删除Projects ```bash rm -rf ~/AndroidStudioProjects ``` 3、删除gradle ```bash rm -rf ~/.gradle ``` 4、卸载Android Virtual Devices(AVDs) and *.keystore. ```bash rm -rf ~/.android ``` 5、删除Android SDK Tools ```bash rm -rf ~/Library/Android* ``` ## 参考资料 - [官方搭建开发环境](https://facebook.github.io/react-native/docs/getting-started.html#content) - [reactnative.cn搭建开发环境](http://reactnative.cn/docs/0.35/getting-started.html) - [极客学院搭建开发环境](http://wiki.jikexueyuan.com/project/react-native/DevelopmentSetupAndroid.html) - [React Native开发过程中遇到的问题](https://github.com/haiyangjiajian/haiyangjiajian.github.io/blob/4bd765801712adf33b4d45280fb01e9aef21c1b1/_posts/2016-8-9-react%20native%20related%20problems%20and%20solutions.md)