如题,怎么让iOS和android共用一个js入口文件?
RN 本来就是一次开发两个平台,合并入口文件很正常。
以最新的0.31为例
直接上正确答案:
IOS
[[RCTBundleURLProvider sharedSettings] setDefaults];
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"/rn/app" fallbackResource:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"Demo"
initialProperties:nil
launchOptions:launchOptions];
其中@"/rn/app"
就是相对 RN 根目录的入口文件,@"Demo"
是你注册的应用名。
android:
复写getJSMainModuleName
方法就行
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected String getJSMainModuleName() {
return "rn/app";
}
};
_rnRoot_/rn/app.js
就是你的入口文件,如上例随便你改
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
表示这个需求有点奇怪,为什么需要让 iOS 和 Android 公用同一个入口文件呢?即便重复的东西很多,也可以建一个公用的 js 然后在 index.ios.js 和 index.android.js 里都引入它。
如果非要更改这个入口文件的话,你可以在项目里全局的搜索一下 index.ios 和 index.android, 看看它们的加载流程,比如说 index.ios 就在 AppDelegate.m 里用到了:
你可以尝试去改一改,让它从别的地方加载。 但是总体上还是建议不要这样折腾,以后版本升级之类的时候,给自己填堵。