7

特定のARMバージョンと拡張機能(Tegra、Neon)用に構築されたネイティブライブラリに依存するアプリケーション(プレーヤー)を配布する必要があります。このネイティブライブラリは非常に大きいため、すべてのバージョンを1つのユニバーサルパッケージで配布することはできません。そこで、アプリケーションを1つの小さなユニバーサル.apkとより特殊な.apk(アクティビティのないプラグイン)に分割することにしました。

メインホストアプリケーションからプラグインアプリの専用のネイティブ共有ライブラリにアクセスするにはどうすればよいですか?簡単に使用できますか

System.loadLibrary("path_to_library"); 

もしそうなら、どうすればそのライブラリへのパスを取得できますか?

それが不可能な場合にこの問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

System.loadLibrary()ライブラリ名を取得し、それを何らかの方法でフルパスにマップします。

foo => libfoo.so

システムは通常apk自体をチェックし、次に通常チェックします/system/lib/

フルパスがある場合は、System.load()

いずれにせよ、apkまたはすべてのシステムライブラリにない限り、ライブラリの場所を管理するのは面倒です。

特定のlibをapkでパックします。

于 2012-06-04T15:45:17.687 に答える
0

8年後、TSの主な懸念事項が解決されました。ABIごとに小さいAPKを生成できる分割があり、パッケージ化を容易にするアプリバンドルがあり、ネイティブライブラリのダウンロードをそれまで遅らせることさえできる拡張機能があります。アプリには本当に必要です…</p>

それでも、同じ手法がSystem.load("/data/data/{app-package}/lib/lib{library-name}.so")引き続き機能し、一部のシナリオで役立つ場合があります。

于 2020-05-09T10:54:26.343 に答える