大家座好,要开车了~~~
俺是一个非常谨慎的人,对RN这门技术没有十足的信心之前,是不会直接拿来做新项目的(否则填坑,就能让你哭晕在厕所~)。
但是还想要体验跨平台+实时发布带来的快感,最好不过的方法就是在现有的项目基础上进行改良,集成ReactNative框架,一个页面or一个View先使用RN搞起来(先挣它一个亿,慢慢来么,急什么),下面就是本人在Integration With Existing Apps (此处有英文显得高大上一些)的过程中踩得坑,又爬出来的过程,希望能对你有所帮助。
集成准备
这方面网络上有好多的文案可以借鉴,(ReactNative向导),内容主要介绍npm和node的一些安装操作,没有这些基础建设,RN搞不转,如果你使用的是MAC,大致的关系如下:
还有就是Android和IOS的开发环境搭建,没什么难度。
这里特别(记得是特别)需要提醒的地方就是compileSdkVersion及targetSdkVersion的版本问题(站好,要跳坑了)。
先介绍三个基础的概念:
compileSdkVersion : 定义 Gradle 用哪个 Android SDK 版本编 译应用。
minSdkVersion : 定义应用可以运行的最低要求。
targetSdkVersion: 定义 Android 提供向前兼容的主要依据,如果不更新就不会应该最新版本的行为变化。
好的,在RN官网介绍中有这么一段文字
Android Studio installs the most recent Android SDK by default. React Native, however, requires the Android 6.0 (Marshmallow) SDK.
Android 6.0对应API等级是23,为什么需要Android 6.0,因为ReactNative引用了23的资源文件,另外有个别RN方法有23的等级限制。因此compileSdkVersion 23
就必不可免了,如果你性格倔强的话,就会看见下面的错误。
Error retrieving parent for item: No resource found that matches the given name 'xxx'.
同理,如果遇到这类问题,也可以检查一下,使用的compileSdkVersion
版本是否正确。
接下来,通过rebuild
编译程序,如果幸运的话,会看到下面的Gradle Build Message:
Error:错误: 程序包org.apache.http不存在
Error:错误: 程序包org.apache.http.message不存在
对的,聪明的你肯定猜到了,Android API 23 移除了HttpClient
相关的类,解决办法如下:
android {
useLibrary 'org.apache.http.legacy'
}
继续开车,此时我们还没有引入任何RN相关的依赖,好的run
一下程序,竟然Crash了