天天看點

華邁SDK遇坑:java.lang.UnsatisfiedLinkError: No implementation found for int com.huamaitel.api.HMJniInter

項目中需要涉及視訊監控這塊,使用華邁的SDK。把Demo上的邏輯捋了捋,準備移植到項目當中,然而這一切沒有那麼簡單,讓我懷疑到人生

一丶加載SO庫問題

華邁SDK遇坑:java.lang.UnsatisfiedLinkError: No implementation found for int com.huamaitel.api.HMJniInter

按照Demo上建立jniLibs檔案夾,将so庫放在裡面,jar放在lib目錄下。調用初始化方法的時候出現了上述的錯誤,花了4,5個小時才解決這個問題,最後百度得知因為在編譯.so檔案時的targetSdkVersion低于目前的targetSdkVersion,Demo上目标版本是19,我将版本該為19重新編譯就好了。也有可能會報Couldn't load libhmsdk.so - dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.lvfu.testhuamai-1/base.apk",這個錯誤,也可以用上面的解決辦法或者直接将放有so庫的armeabi-v7a檔案放在libs目錄下試試

二丶登入連接配接問題

本以為被上面的問題折磨後就萬事大吉了,誰知道調用登入方法的時候一直失敗,沒有傳回失敗資訊,直接傳回null。之前為了解決問題建立了一個demo,幹脆根據華邁的demo移植好了,再移植到項目。是以在建立的demo上執行登入操作,發現竟然好了。比較發現唯一不同的是,建立demo的so庫是放在libs目錄下的(為解決第一個問題百度網友說的另外一種方法),而項目中的so庫是模仿華邁demo放在jniLibs目錄下的,就這樣解決這個問題了。note:在libs目錄下加載so庫,記得在app.gradle下配置(和buildTypes同級)

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}      

三丶擷取裝置資訊一直為空

不多說了,到這裡我已經被折磨得體無完膚了。。

在看擷取裝置資訊的代碼時,發現是根據treeId變量擷取裝置的。前面有一段判斷代碼,當時感覺沒什麼用就沒有copy進來,隻是copy了擷取treeId的相關方法。最後實在沒辦法,将這段沒粘的代碼粘過去就好了。

到此我已經精疲力盡。網上對相關SDK問題也很少,文檔92頁也沒有提到什麼問題,關鍵是相關QQ群也加不進去。。

華邁SDK遇坑:java.lang.UnsatisfiedLinkError: No implementation found for int com.huamaitel.api.HMJniInter
int result = MainApp.getJni().getDeviceList(MainApp.serverId);
if (result != HMDefines.HMEC_OK) {
    return;
}
// step 2: Get user information.
HMDefines.UserInfo userInfo = MainApp.getJni().getUserInfo(MainApp.serverId);
if (userInfo == null) {
    return;
}
/**
 * TODO:判斷選擇: huamaiyun和see1000中需要添加userInfo.useTransferService !=8
 *
 * 這個判斷 seebao中需要去掉,否則容易報錯!
 */
// step 3: Get transfer service.
// if (userInfo.useTransferService != 0&&userInfo.useTransferService !=8) {
if (userInfo.useTransferService != 0) {
    result = MainApp.getJni().getTransferInfo(MainApp.serverId);
    if (result != HMDefines.HMEC_OK) {
        return;
    }
}
MainApp.treeId = MainApp.getJni().getTree(MainApp.serverId);      

繼續閱讀