對(duì)接原生模塊方面毯焕,其實(shí)官網(wǎng)講得已經(jīng)非常詳細(xì)了打厘,這里不多做贅述望伦,詳情點(diǎn)擊這里疹启。
雖然詳細(xì)古程,但是還是得補(bǔ)充一些點(diǎn),如下:
1喊崖、創(chuàng)建自定義原生模塊文件之前需要先將自己的sdk放置在/android/app/libs下(如果沒有l(wèi)ibs挣磨,則需要新建該文件夾,然后將sdk放進(jìn)去)
2雇逞、修改/android/app/build.gradle文件,添加如下配置:
android {
...
defaultConfig {
...
ndk {//設(shè)置支持的SO庫(kù)架構(gòu)
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茁裙、接下來(lái)就按照官網(wǎng)步驟進(jìn)行即可塘砸。(需要注意的是官網(wǎng)中有的代碼中逗號(hào)用的是中文逗號(hào),不仔細(xì)看可能看不出來(lái)晤锥,這個(gè)也是踩的其中一個(gè)坑5羰摺)
本文僅指出兩個(gè)例子,其他地方還需大家自行編譯嘗試
4矾瘾、需要注意的地方:kt文件中的日志輸出必須傳遞兩個(gè)參數(shù)(而且還得是string類型的)女轿,第一個(gè)參數(shù)是模塊名稱,第二個(gè)參數(shù)可以是你想打印的結(jié)果壕翩,和前端的console.log()不太一樣蛉迹,這點(diǎn)值得注意。
5放妈、查看第四點(diǎn)的日志方法是在Android Studio屏幕的左下角點(diǎn)擊logCat婿禽。如果結(jié)果太多,右邊有搜索框大猛,輸入你的日志方法中的第一個(gè)參數(shù)即可扭倾。
6、對(duì)接sdk模塊時(shí)挽绩,由于sdk中的方法都是異步的膛壹,所以需要導(dǎo)入promise包
import com.facebook.react.bridge.Promise
@ReactMethod fun init(promise: Promise) { // 此方法寫在自己定義的模塊kt文件中
// 獲取應(yīng)用程序上下文
val context: Context = reactApplicationContext.applicationContext // 該context也需進(jìn)行導(dǎo)入 import android.content.Context
// 調(diào)用 SDK 的初始化方法并傳入上下文
val initResult: Int = PlayerSdk.init(context)
// 將結(jié)果通過回調(diào)函數(shù)返回給 JavaScript 端
// 根據(jù)結(jié)果創(chuàng)建 Promise 對(duì)象并返回給 JavaScript 端
if (initResult == 0) {
promise.resolve("SDK_OK")
} else {
promise.reject("SDK 初始化失敗")
}
Log.d("initResult", ""+initResult+"")
}
7、前端進(jìn)行調(diào)用時(shí)也需要使用.then進(jìn)行調(diào)用
import { NativeModules } from 'react-native';
const { XXXModule } = NativeModules; // 自己定義的模塊名稱
const [result, setResult] = useState(''); // 修改state進(jìn)行展示唉堪,可以根據(jù)自己的需求來(lái)
PlayerSdkModule.init().then((message) => {
setResult(message)
console.log(message);
})
.catch((error) => {
result = error
console.error(error);
});
return (
<View>
<Text>{result}</Text>
</View>
);