1

我需要编写一个应用程序,它将使用共享库。我需要将该应用程序安装在 Android 1.6 及更高版本的设备上。我在清单文件中添加了共享库信息,如下所示:

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

现在,android:required字段是从上面的 Android 2.1 添加的,Android 1.6 将忽略此标记,因此应用程序将无法安装并显示“INSTALL_FAILED_MISSING_SHARED_LIBRARY”。

我的问题是,有什么方法可以不需要在清单中定义共享库信息,而是可以动态加载系统库(在我的情况下为“com.google.android.maps”)并使用反射来访问库的类和方法?

4

2 回答 2

1

我解决了这个问题。不需要在清单文件中提及使用库。该库可以动态加载,我们可以从中加载类和方法。

上面提到的使用 System.loadlibray 加载库的解决方案不起作用。相反,我使用这种方法来实现它:

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

在此之后,应用程序可以加载该类并调用该方法。

谢谢您的帮助..

于 2012-07-31T07:01:05.483 回答
1

我搜索了一下,我找到了这段代码,

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

另外,您的系统共享库是用 C++ 编写的吗?

于 2012-06-13T11:07:04.187 回答