2012-06-13 59 views
1

我需要編寫一個將使用共享庫的應用程序。我需要將該應用程序安裝在Android 1.6及更高版本的設備上。 我已經加入上清單文件中的共享庫信息如下:Android中的Loadind系統共享庫運行時

<uses-library android:name="com.google.android.maps" android:required="false" /> 

現在,機器人:需要場從Android 2.1的加入上述和該標籤將被Android 1.6被忽略,並且因此該應用程序將無法安裝「INSTALL_FAILED_MISSING_SHARED_LIBRARY」。

我的問題是,是否有任何方式,我不需要在清單中定義共享庫信息,而是可以動態加載系統庫(在我的情況下是「com.google.android.maps」)並使用反射來訪問庫的類和方法?

回答

1

我搜索了一下,我發現這段代碼,

static { 
try { 
    System.loadLibrary("DsmShared"); 
    System.loadLibrary("DsmTestLib"); 
} 
catch(UnsatisfiedLinkError e) { 
    System.err.println("Native code library failed to load.\n" + e); 
} 
} 

而且,你的系統的共享庫在C++ writen?

+0

嗨阿諾, 感謝您的答覆。您提到的API不起作用,它將查找當前應用程序目錄中的libarary。如果找不到,則會拋出異常。我想鏈接到的圖書館是系統共享庫(谷歌地圖庫每說),我沒有任何關於它的其他信息。在這種情況下,如何動態加載和鏈接庫與我的應用程序是我的問題。 – Rajan

+0

嗨Rajan,我明白了,你可以做的是在第一次運行時下載庫,然後用這個方法加載它,下面是你如何加載它:http://stackoverflow.com/questions/3028306/download-a-文件與Android的和顯示進度對進度,然後你檢查它與這種方法。希望你能弄明白;) – 2012-06-15 14:15:35

1

我解決了這個問題。 不需要在清單文件中提到uses-library。 該庫可以動態加載,我們可以從中加載類和方法。

上面提到的使用System.loadlibray加載庫的解決方案不起作用。 相反,我使用這種方法才達到它:

new DexClassLoader("/system/framework/google_sample.jar", "/tmp", null, myService.me.getClassLoader()); 

本申請後可以加載類和調用該方法。

感謝您的幫助..