You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native中使用Java类及调用Java API接口方法?

React Native 调用Java API的实现方案

结论

可以使用,但是仅支持Android平台,无法直接在iOS端调用Java代码,需要通过React Native提供的原生模块桥接能力封装后供JS层调用。

具体实现步骤

1. 引入Java API依赖

将你的Java API包放入React Native项目的android/app/libs目录下,在android/app/build.gradle的dependencies配置块中添加对应依赖:

dependencies {
    // 示例:引入libs目录下所有jar包
    implementation fileTree(dir: "libs", include: ["*.jar"])
    // 其余原有依赖保持不变
}

2. 封装原生桥接模块

创建自定义原生模块类,继承ReactContextBaseJavaModule,将需要调用的Java API方法封装后暴露给JS层:

import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

// 替换为你实际的API导入路径
import your.java.api.package.NixarApi;

public class NixarApiModule extends ReactContextBaseJavaModule {
    // 初始化Java API实例
    private final NixarApi nixarApiInstance = new NixarApi();

    public NixarApiModule(ReactApplicationContext context) {
        super(context);
    }

    @Override
    public String getName() {
        // 该名称为JS层调用时对应的模块名,可自定义
        return "NixarApi";
    }

    // 示例:封装你需要调用的API方法,添加@ReactMethod注解标记为可被JS调用的方法
    @ReactMethod
    public void callYourApiMethod(String inputParam, Promise promise) {
        try {
            // 调用Java API的对应方法
            String result = nixarApiInstance.yourTargetApiMethod(inputParam);
            // 异步返回结果给JS层
            promise.resolve(result);
        } catch (Exception e) {
            // 捕获异常返回给JS层
            promise.reject("API_CALL_ERROR", e.getMessage(), e);
        }
    }
}

3. 注册原生模块

  • 新建自定义ReactPackage类,注册刚才创建的模块:
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class NixarApiPackage implements ReactPackage {
    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new NixarApiModule(reactContext));
        return modules;
    }
}
  • 打开android/app/src/main/java/[你的包名路径]/MainApplication.java,在getPackages方法中添加你的自定义Package:
@Override
protected List<ReactPackage> getPackages() {
    List<ReactPackage> packages = new PackageList(this).getPackages();
    // 添加下面这行代码注册你的模块包
    packages.add(new NixarApiPackage());
    return packages;
}

4. JS层调用封装

在React Native的JS/TS代码中直接调用封装好的原生模块即可:

import { NativeModules } from 'react-native';
const { NixarApi } = NativeModules;

// 调用示例
const fetchApiResult = async (param) => {
    try {
        const result = await NixarApi.callYourApiMethod(param);
        console.log('API调用成功,返回结果:', result);
        return result;
    } catch (error) {
        console.error('API调用失败:', error.code, error.message);
        throw error;
    }
}

注意事项

  • 如果你的Java API需要用到存储、网络、相机等权限,需要提前在AndroidManifest.xml中申请对应权限
  • 原生层和JS层传递复杂数据时,建议统一序列化为JSON字符串传递,避免类型映射错误
  • 非必要场景优先使用异步Promise回调的方式调用,不要使用同步调用,避免阻塞JS线程导致页面卡顿
  • 若需要同时支持iOS端,无法复用现有Java API,需要单独编写iOS侧的原生逻辑再做桥接

内容的提问来源于stack exchange,提问作者DISEQBLIURM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:45:02