當前位置:編程學習大全網 - 源碼下載 - 請教關於android linux動態庫.so的加載調用

請教關於android linux動態庫.so的加載調用

有這兩種辦法:

第壹種:

需求:

有時候應用修復了native層壹個小BUG,應用需要更新了,但是用戶必須下載整個APK包進行安裝,而我們需要的只是替換SO

於是想,能不能加載自定義路徑下的 SO 文件呢

答案是完全沒問題:

使用系統方法:

void java.lang.System.load(String pathName)

但是有壹點,pathName 路徑必須有執行權限,意思就是說我們不能加載SD卡上的SO,因為沒有執行權限

那也沒關系,我們復制到應用私有目錄下就OK嘛。

看碼

private void load() {

File dir = getDir("libs", Context.MODE_PRIVATE);

File soFile = new File(dir, "libTestJNI.so");

FileUtils.assetToFile(this, "libTestJNI.so", soFile);

try {

System.load(soFile.getAbsolutePath());

} catch (Exception e) {

}

}

這樣就完全OK,

我們只需要架個服務器,每次啟動時動態監測 SO 文件有沒有更新,有則下載SO,然後加載,這樣就可以避免用戶安裝新的應用,

要知道重新安裝應用的用戶體驗是很差的,要讓用戶無感知的更新他。

第二種:

采用dlopen動態加載第三方庫,無非和system.load壹樣,就是要實現指定路徑加載so的目的,這種方法升級so的話,那就的需要壹個基本so,壹直不變,用來調用dlopen,然後升級另壹個so。

這兩種辦法都會遇到壹個問題,就是不能直接加載SD卡中的so,因為sd卡沒有執行權限,不能直接加載這種二進制文件,需要拷貝到data/data/packagename/files/ 目錄下,再次進行加載即可,拷貝也是有講究的,需要用到context.openFileOutput方法。

  • 上一篇:公司辦理中石化加油卡需要哪些證件?
  • 下一篇:ptt人格模式怎樣理解
  • copyright 2024編程學習大全網