配置
Herina 需要您对 Bundle 管理部分的原生代码进行修改。如果这对您来说是比较困难的,您可以参考 案例文件
。
Android
WARNING
在修改代码之前,请确保已安装 @herina-rn/client
,并且使用 Gradle 对项目进行了同步。否则,您可能会遇到错误。
如何使用 Gradle 同步项目
在 android
目录执行以下命令:
./gradlew build
或者使用 Android Studio 打开 android
目录,点击菜单栏 File / Sync Project With Gradle Files
.
旧架构
首先在 android
目录找到 MainApplication.java
。
然后从 Herina 包导入 BundleManager
。
package com.project.name;
import android.app.Application;
import android.content.Context;
import com.hectorchong.herina.BundleManager;
找到名为 mReactNativeHost
带有 final
修饰符的私有属性,并使用以下代码在里面创建一个名为 getJSBundleFile
的方法。
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@Nullable
@Override
protected String getJSBundleFile() {
return BundleManager.getBundleURL(MainApplication.this, BuildConfig.DEBUG);
}
};
新架构
首先在 android
目录找到 MainApplicationReactNativeHost.java
。
然后从 Herina 包导入 BundleManager
。
package com.project.name;
import android.app.Application;
import android.content.Context;
import com.hectorchong.herina.BundleManager;
最后,使用以下代码在里面创建一个名为 getJSBundleFile
的方法。
public class MainApplicationReactNativeHost extends ReactNativeHost {
public MainApplicationReactNativeHost(Application application) {
super(application);
}
@Nullable
@Override
protected String getJSBundleFile() {
return BundleManager.getBundleURL(getApplication(), BuildConfig.DEBUG);
}
// ..
};
iOS
原生项目
WARNING
在修改代码之前,请确保已安装 @herina-rn/client
,并执行了 pod install
。否则,您可能会遇到错误。
首先打开 ios
目录的 AppDelegate.m
或 AppDelegate.mm
。
从文件顶部导入 RNHerina/BundleManager.h
。
#import "AppDelegate.h"
#import <React/RCTBridge.h>
#import <React/RCTRootView.h>
#import <React/RCTLinkingManager.h>
#import <React/RCTAppSetupUtils.h>
#import "RNHerina/BundleManager.h"
@implementation AppDelegate
找到名为 sourceURLForBridge
的方法,并使用以下代码重写实现。
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
return [BundleManager getBundleURL];
}
Expo
若要将 Herina 引入 Expo 项目,它的操作与原生项目别无二致。
若您在引入时发生了错误,请确保 AppDelegate.h
只存在一个 @interface
。
JavaScript
找到项目根目录的 metro.config.js
文件,替换为以下内容:
const { createMetroConfig, isAppBuilding } = require("@herina-rn/core");
const herinaConfig = require("./herina.config");
const config = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true
}
})
}
};
module.exports = (_, isBuilding) => {
isBuilding = typeof isBuilding === "undefined" ? isAppBuilding() : isBuilding;
return isBuilding ? createMetroConfig(herinaConfig, config, true) : config;
};