2012-06-15 33 views
2

我已經開發了我的ROM系統的應用程序,其中包括一些本地庫。 我已經試過如下:如何升級系統中的應用程序的本地庫中的Android

  1. 不復制此本地庫到/系統/ lib目錄,但讓它在APK。在這種情況下,該庫將不會被複制到/數據/數據/ XXXX/lib目錄在系統啓動時,我的應用程序將無法運行,因爲庫無法找到。 ( PackageManagerService.java 3301 注意:我們不想解開了系統應用的本地可執行文件,除非他們已經被更新(二進制文件已經下/系統/ lib目錄)。換句話說,我們要解壓二進制文件僅適用於非系統的應用程序和系統應用程序的升級。 )

  2. 拷貝庫/系統/ lib目錄下。我的應用程序運行正常第一,但是當我升級吧,圖書館的新版本將被複制到/數據/數據/ XXXX/lib目錄上啓動。但由於Android將在/系統/ lib中找庫前/數據/數據/ XXX/lib目錄(在DexClassLoader :: findLibrary),圖書館的舊版本將永遠被載入。這意味着我將無法升級本地庫。

那麼,我該怎麼做?由於

回答

3

可以使用System.load(),其使用完整路徑參數,以實現不同的庫搜索機制,而相比之下,System.loadLibrary()。下面是一個簡單的例子:

public void loadLibrary(Context context, String libName) { 
    String packageName = context.getPackageName(); 
    String libPath = "/data/data/" + packageName + "/lib/" + libName; 
    if (new File(libPath).exists()) { 
     System.load(libPath); 
    } else { 
     System.loadLibrary(libName); 
    } 
} 
+0

聽起來不錯,謝謝。雖然我也發現這個問題已經解決了ics。 (實際上是蜂窩狀)。 –

相關問題