react native对接Android原生模块SDK

对接原生模块方面,其实官网讲得已经非常详细了,这里不多做赘述,详情点击这里
虽然详细,但是还是得补充一些点,如下:
1、创建自定义原生模块文件之前需要先将自己的sdk放置在/android/app/libs下(如果没有libs,则需要新建该文件夹,然后将sdk放进去)
2、修改/android/app/build.gradle文件,添加如下配置:

android {
    ...
    defaultConfig {
        ...
        ndk {//设置支持的SO库架构
            abiFilters 'armeabi-v7a','arm64-v8a' //,'x86', 'arm64-v8a'
        }
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs'] 
            }
        }
    }
}
dependencies {
    ...
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation files('libs/xxxx.jar')
}

3、接下来就按照官网步骤进行即可。(需要注意的是官网中有的代码中逗号用的是中文逗号,不仔细看可能看不出来,这个也是踩的其中一个坑!)


7d228f1a9bb5714de60969137013464.png
image.png

本文仅指出两个例子,其他地方还需大家自行编译尝试
4、需要注意的地方:kt文件中的日志输出必须传递两个参数(而且还得是string类型的),第一个参数是模块名称,第二个参数可以是你想打印的结果,和前端的console.log()不太一样,这点值得注意。


image.png

5、查看第四点的日志方法是在Android Studio屏幕的左下角点击logCat。如果结果太多,右边有搜索框,输入你的日志方法中的第一个参数即可。


image.png

6、对接sdk模块时,由于sdk中的方法都是异步的,所以需要导入promise包
import com.facebook.react.bridge.Promise
@ReactMethod fun init(promise: Promise) { // 此方法写在自己定义的模块kt文件中
        // 获取应用程序上下文
        val context: Context = reactApplicationContext.applicationContext // 该context也需进行导入 import android.content.Context

        // 调用 SDK 的初始化方法并传入上下文
        val initResult: Int = PlayerSdk.init(context)
        // 将结果通过回调函数返回给 JavaScript 端
        // 根据结果创建 Promise 对象并返回给 JavaScript 端
        if (initResult == 0) {
            promise.resolve("SDK_OK")
        } else {
            promise.reject("SDK 初始化失败")
        }
        Log.d("initResult", ""+initResult+"")
    }

7、前端进行调用时也需要使用.then进行调用

import { NativeModules } from 'react-native';
const { XXXModule } = NativeModules; // 自己定义的模块名称
  const [result, setResult] = useState(''); // 修改state进行展示,可以根据自己的需求来
    PlayerSdkModule.init().then((message) => {
      setResult(message)
      console.log(message);
    })
      .catch((error) => {
        result = error
        console.error(error);
      });
return (
    <View>
      <Text>{result}</Text>
    </View>

  );
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容