1

サードパーティのネイティブ ライブラリをフィルタリングし、それらすべてに対して「armeabi」のみを許可する必要があります。1つの例外を除いて!- 特定のライブラリをその「armeabi-v7a」バリアントに含める必要があります。

ライブラリに応じて、サードパーティのネイティブ ライブラリを異なる方法でフィルタリングするにはどうすればよいですか? (またはアプリモジュール上)

最終的に APK に必要なものは次のとおりです。

  • アルメアビ / lib-1.so
  • アルメアビ / lib-2.so
  • アルメアビ / lib-3.so
  • armeabi-v7a / special-lib.so

全文:

いくつかのモジュールで構築されたアプリがあります。いくつかのサードパーティのネイティブ ライブラリを使用します。これまで、すべてのライブラリで「armeabi」バージョンのみを使用していました。これは、互換性が最も高く、アプリのサイズを小さくする (複数の APK を使用しない) ことを目指しているためです。ただし、「armeabi-v7a」形式でのみ利用可能な新しいサードパーティ ライブラリを含める必要があります。

フィルターを使用しています:

productFlavors {
        app {
            ndk {
                abiFilters "armeabi"
}}}

メインアプリモジュールにあります。すべてのモジュールとライブラリからすべてのネイティブ ライブラリをフィルタリングします。ここで、このフィルターを使用する必要があります。

productFlavors {
        app {
            ndk {
                abiFilters "armeabi", "armeabi-v7a"
}}}

これにより、アプリは機能しますが、サイズも大幅に増加します。使いたくありません。これにより、新しいライブラリの armeabi-v7a バージョンが許可されますが、含めたくない他のいくつかのライブラリの armeabi-v7a バージョンも許可されます。

質問:アプリ モジュールの 1 つに存在する 1 つの特定のライブラリに対してのみ「armeabi-v7a」を許可したいと考えています。ABI フィルターまたはその他の方法でそれを達成できますか?

64 ビットに関する注意: 64 ビットのネイティブ ライブラリがある場合は、それらすべてを用意する必要があることはわかっています (アプリが 64 ビット ライブラリを 1 つ見つけると、64 ビット モードで起動し、 32 ビット ライブラリを使用できます)。ただし、armeabi と armeabi-v7a の場合、そのような問題はなく、各ライブラリの両方のバージョンを提供する必要はありません。

4

1 に答える 1

3

各ライブラリの両方のバージョンを提供する必要があることについての最後のポイントについて-いいえ、それはarmeabiとarmeabi-v7aにも当てはまります。

リストしたファイルを含む APK の場合:

  • アルメアビ / lib-1.so
  • アルメアビ / lib-2.so
  • アルメアビ / lib-3.so
  • armeabi-v7a / special-lib.so

これを armeabi-v7a デバイスにインストールする場合、インストーラーは armeabi ディレクトリからファイルをインストールする必要はなく、インストールしません。同じことを言っている信頼できる情報源については、https://developer.android.com/ndk/guides/abis.html#aenを参照してください。(古い Android バージョンにはインストーラーのバグがあり、armeabi ライブラリの一部がインストールされている可能性がありますが、APK にパッケージ化されている順序によってはすべてではありません。https://stackoverflow.com/a/25648943/を参照してください。詳細については3115956を参照してください。ただし、これは単なるバグであり、意図した動作ではなく、古いバージョンでのみ発生します。)

さらに、armeabi-v7a をまったくサポートしていない armeabi デバイスでアプリを実行するとどうなりますか? その場合、special-lib.so はまったく利用できません。そうでない場合、基本的にアプリにはすでに armeabi-v7a が必要なので、すべてのライブラリの armeabi-v7a バージョンを出荷するだけです。

于 2016-07-26T13:29:50.153 に答える