A. rn刚进入app程序会白屏怎么解决

在启动页设置回 android:theme="@答style/splash_style"
<activity android:name=".Activity.SplashActivity"
android:theme="@style/splash_style"
android:screenOrientation="portrait">
<style name="splash_style" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@mipmap/splash</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowActionBar">false</item>
</style>

B. 现在有哪些APP是用React Native开发

直接登入React Native官网,在React Native官网案例上可以查询到,其中就有我们大家熟知的QQ空间,还有一些我们不太熟知的软件

C. 自己做APP,我是使用ReactNative还是分别做Android和iOS Native的

还是分别
c

D. react native 怎么样

React.native是目前唯一靠谱有前途的移动跨平台解决方案。

搞移动跨平台,解决方案已经有过很多了。Xamarin, Cordova, 基于webView的PhoneGap, 还有一大票各种创业公司的方案。它们都很垃圾。原因很简单:为达成“一次编写到处运行”的目的,这些方案不得不对两个主要平台(iOS和Android)的SDK做进一步的抽象,这意味着它们只能兼容两个平台共有的组件,结果就是写出来的app只能做到最平庸的用户体验。特别是微软的Xamarin,连自家的Windows Phone都搞不好,还给Apple和Google的SDK做包装,那能好么?基于Web的方案就更不用说了,本质就是拿HTML套个壳外加一些原生写的插件。
React.native的高明之处在于:它并不追求一次编写到处运行,它放弃了全部代码跨平台这一不切实际的目标。RN的目标很实际:用同一门语言(Javascript),同样的高层架构(Virtual DOM)和设计模式(component-based),针对不同平台分别作出最佳的用户体验。这也就是RN中“native”一词的含义。
在实际开发中,要做到最佳用户体验,针对iOS和Android应该要分别编写UI代码的。实际上RN也鼓励这么做。Android是Android,iOS是iOS,web是web,三者有不同的界面语言和用户习惯,凭什么要一样呢?但除却UI,业务逻辑、data object、web call等等却是可以一样的。再加上采用了同一门语言和设计模式,RN在生产力上非常有竞争力。从另一方面看,Flux设计模式反过来也被原生开发社区接受,Rex库在Java和Swift上都有翻版原生实现,所以你不一定要用RN写app,但你还是可以借鉴采用React的设计模式。React项目对于整个开发社区的影响很正面,比PhoneGap这种催生了一大票廉价app码农的垃圾技术正面多了。
另外,纯Javascript的开源库也可以直接应用到ReactJS/ReactNative中,这也进一步提升了生产力。

E. 如何愉快地调试一个 React Native for Android APP

首先确保你的电脑和手机设备在同一个Wi-Fi环境下。
其次你需要开启USB调试才能在你的设备上安装你的APP。一定要确定你已经打开设备的USB调试开关!
确保你的设备已经被成功连接,可以输入adb devices核实:

在右边那列看到device说明你的设备已经被正确连接了。注意,你只应当连接仅仅一个设备。
因为如果你连接了多个设备(包含模拟器在内),你后续的一些操作可能会失败。拔掉不需要的设备,或者关掉模拟器,确保adb devices的输出只有一个是连接状态。
现在我们可以运行 react-native run-android 来在设备上安装并启动我们的应用了


句命令执行后,实际上就是在本地起一个node server,并且将你的android
project编译打包,再上传到你的手机上。然后当js文件有改动或debug模式下手动选择reload
js时候会自动更新bundle文件,达到改动js文件后即时显示的调试效果。
这“红屏”又是什么鬼?别着急,是正常的,我们需要连接上开发服务器,下面的步骤会解决这个问题。

摇晃手机,或者运行adb shell input keyevent 82,可以调出开发者菜单。

点击进入Dev Settings
点击Debug server host for device
输入你电脑的IP地址和端口号(譬如我的是192.168.3.15:8081)

注意:如果你的设备是android5.0以上版本(API 21+),就不用折腾这步了
而是:运行adb reverse tcp:8081 tcp:8081 (建立一个从设备向电脑转发的端口,前提是设备和电脑通过USB相连)
不需要更多配置,你就可以使用Reload JS和其它的开发选项了
Chrome开发者工具
在Chrome上调试js代码,需要在开发菜单中选择Debug JS,这会打开一个新的http://localhost:8081/debugger-uitab页。

Chrome中,按下⌘ + option + i或者选择视图(View) -> 开发者(Developer) ->
开发工具(Developer Tools)来打开开发工具控制台。打开有异常时暂停(Pause On Caught
Exceptions)选项,能够获得更好的开发体验。
Chrome中并不能直接看到App的用户界面,而只能提供console的输出,以及在sources项中断点调试js脚本。

要查看APP日志?
在终端下运行adb logcat *:S ReactNative:V ReactNativeJS:V可以看到你的应用的日志。

实时刷新
这个选项可以在你的js代码变更了之后,自动触发所连设备或者模拟器自动刷新。
开启方法:先打开开发菜单,选择Dev Settings,然后选择Auto reload on JS change选项。
到此才能完整的调试Android RN, 繁琐到累绝不爱。。
等等,能否想办法简化一下过程?

既然我们的RN项目里包含了完整的android工程,何不把android工程导入到android studio 去运行?不但可以同时查看js的日志和native的日志,而且开发android的同学最熟悉AS,利用AS的快捷键和各类插件提升调试效率。
have a try , 答案是肯定的!
执行react-native start 也可以起一个node server,只是它不帮你安装APP到device 。

以上就是我踩坑后整理的方法,按这套组合拳就可以愉快地调试了。水平有限,抛砖引玉,如果你有更好的方法!欢迎拍砖!
此处插播一个广告:拍砖请拍到我们的杏树林开放空间(246078103),期待感兴趣的同学加入。
之后要解决的一些issue
1,关于设备MinSdkVerison
RN 只支持Android4.1.2(API16)以上设备,4.0根据网络数据大概占比0.7比例,随着大部分app已经不支持4.0以下设备了,这块倒还可以接受 , 目前我们的病历夹是3.0(API-11) , 口袋是4.0(API-14)
2,我们的androidRN现在只能通过Debug JS才能渲染出界面,而不能正常的用Reload JS
3,在界面跳转时卡的令人发指

F. RN,开发打包APK文件时报错,怎么解决

有重复的资源文件,检查一下。

G. react native 怎么修改入口文件

react native 怎么修改入口文件?
如题,怎么让iOS和android共用一个入口文件?

4个回答

答案对人有帮助,有参考价值1答案没帮助,是错误的答案,答非所问
表示这个需求有点奇怪,为什么需要让 iOS 和 Android 公用同一个入口文件呢?即便重复的东西很多,也可以建一个公用的 js 然后在 index.ios.js 和 index.android.js 里都引入它。
如果非要更改这个入口文件的话,你可以在项目里全局的搜索一下 index.ios 和 index.android, 看看它们的加载流程,比如说 index.ios 就在 AppDelegate.m 里用到了:
jsCodeLocation = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:8081/index.ios.bundle?platform=ios&dev=true", ip]];

你可以尝试去改一改,让它从别的地方加载。 但是总体上还是建议不要这样折腾,以后版本升级之类的时候,给自己填堵。

看图:

RN 本来就是一次开发两个平台,合并入口文件很正常。
以最新的0.31为例
直接上正确答案:
IOS
[[RCTBundleURLProvider sharedSettings] setDefaults];
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"/rn/app" fallbackResource:nil];

RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moleName:@"Demo"
initialProperties:nil
launchOptions:launchOptions];

其中@"/rn/app"就是相对 RN 根目录的入口文件,@"Demo"是你注册的应用名。
android:
复写getJSMainMoleName方法就行
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected String getJSMainMoleName() {
return "rn/app";
}
};

_rnRoot_/rn/app.js 就是你的入口文件,如上例随便你改

H. rn 开发的ios app 能审核过吗

就是审核过了,等待你最后确认发布到appstore,等你确认后就会进入正在为 App Store 进行处理,就静等上线了。