1

共有ライブラリを使用するアプリケーションを作成する必要があります。そのアプリケーションを Android 1.6 以降のデバイスにインストールする必要があります。次のように、マニフェスト ファイルに共有ライブラリ情報を追加しました。

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

現在、上記の Android 2.1 からandroid:requiredフィールドが追加されており、このタグは Android 1.6 では無視されるため、アプリケーションは「INSTALL_FAILED_MISSING_SHARED_LIBRARY」と言ってインストールに失敗します。

私の質問は、マニフェストで共有ライブラリ情報を定義する必要がなく、代わりにシステムライブラリ(私の場合は「com.google.android.maps」)を動的にロードし、リフレクションを使用してライブラリのクラスとメソッドにアクセスしますか?

4

2 に答える 2

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 に答える
1

これで解決しました。マニフェスト ファイルで uses-library を指定する必要はありません。ライブラリは動的にロードでき、そこからロードされたクラスとメソッドを取得できます。

System.loadlibray を使用してライブラリをロードする上記の解決策は機能しませんでした。代わりに、この方法を使用してそれを達成しました。

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

この後、アプリケーションはクラスをロードしてメソッドを呼び出すことができます。

助けてくれてありがとう..

于 2012-07-31T07:01:05.483 に答える