1. 程式人生 > >Android libs 和 jniLibs 的路徑統一

Android libs 和 jniLibs 的路徑統一

       以具體的情景帶入,我在專案中引用了百度語音的sdk,和vlc的aar, 當先前只集成了vlc的時候,視訊能正常播放,整合完百度語音發現語音功能相關一切正常,但是vlc卻崩潰了,百分之百的已經確定是因為後來集成了百度語音的原因從而影響了vlc的整合功能,為什麼會這樣呢?首先檢視日誌記錄如下,可以發現崩潰的原因是找不到nativeNew的實現方法:

 

        然後跟蹤到nativeNew方法所在的地方:

private native void nativeNew(String[] var1, String var2);

        從而可知,這是個jni,呼叫的是aar中so庫裡面的C++方法。後來整合百度地圖的時候,根據百度的介面文件在專案中新建了jniLibs並放入了百度地圖所需要的so檔案,從而猜測是因為這個新增jniLibs資料夾的原因,導致編輯器查詢這個aar中so庫的途徑改變了,或者是這個so庫因為新增jnilibs的原因,沒有成功的增到最後生成的apk中,  經過一番查詢,解決方案如下,在app的build.gradle中加入如下程式碼:

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

       如此寫便將libs的資料夾也作為了jniLibs中的內容的父類路徑,便解決aar中的so庫和專案中jniLibs中的so產生矛盾致使其中一方不能被找到的問題了,雖然寫在jniLibs中,但是對於編輯器來說查詢從libs下手都能搜到