4

私はいくつかのネイティブライブラリを持っており、apkパッケージを介してそれらをデプロイしたいと思います(つまり、それらをlibsフォルダーまたはリソースにコピーします)。次に、別のアプリケーションをインストールし、以下を使用してそれらのライブラリをロードする必要があります。

System.load(path_to_lib);

どちらの方法でそれを行うことができますか?私が理解しているように、セキュリティ上の理由から、/ data / data / libs_package / lib/native_lib.soパスを使用してライブラリをロードすることはできません。他に方法はありますか?

前もって感謝します。

4

1 に答える 1

2

android-ndk ディスカッション グループのこのスレッドを参照してください。

要約すると、Google の Android 開発者は次のように述べています。

2 つのアプリケーションが共有ユーザー ID を持っている場合は、ロードする共有ライブラリへのフル パスを指定して System.loadLibrary() を明示的に呼び出すことができます。
...
しかし、これをやろうとしないでください。いずれかのアプリの更新が非互換性を引き起こし、あなたを壊したり、ユーザーが他のアプリをアンインストールしてあなたを壊したりするなど、ユーザーに苦痛を与えることになります。

また、別の開発者が次の解決策を提案しています。

したがって、私が今行っていること (そして機能している) は、共有ユーザー ID のないパッケージをたくさん用意することです (それらは同じキーで署名されていますが、ここでは重要ではないと思います)。コア アプリは、他のパッケージの .apk から .so を解凍します (他の多くの Android バグを回避するためのカスタム アンパッカーが既にあります)。それらをコア パッケージで認識される場所に解凍し、そこから dlopen() を実行します。

于 2012-12-19T13:58:49.517 に答える