2016-05-23 10 views
10

私はいくつかの依存関係を持つアンドロイドプロジェクトを持っています。 そのうち2つ(依存関係AとBと呼ぶ)にネイティブライブラリ(.soファイル)があります。Android apk - gradleを使ってサードパーティの依存関係から.soファイルを除外する方法

依存関係Aには、arm64-v8a、armeabi、armeabi-v7a、x86およびx86_64というアーキテクチャがあります。 依存関係Bのアーキテクチャは次のとおりです。armeabi、x86

したがって、私のアプリケーションがarmeabi-v7aデバイス(たとえば)で動作し、依存関係Bがネイティブメソッドを呼び出すと、それを取得するための関連ライブラリが見つかりませんこれはarmeabi-v7aフォルダには存在しないため、ライブラリがあるarmeabiに自動的には戻らないため)。

これを回避する方法はありますか? たとえば、arm64-v8a、armeabi-v7a、およびx86_64フォルダを最終apkに統合しないために、build.gradleファイルにいくつかの設定を追加できますか?

私はpackagingOptions/excludeを試みましたが、結果はありません:質問のフォルダはまだそこにあります。

答えて

18

クリーンビルドを試してみましたが、私はしなかったし、以前のビルドからファイルを引き継いでいました。私は私のアプリ/ビルド/フォルダを削除するだけで確実に終了しました。

android { 
    packagingOptions { 
     exclude 'lib/armeabi-v7a/libSomeLibYouDontWant.so' 
    } 
} 

以前クラッシュしていたアプリで私の仕事をしました。

代替はさらに

Gradle exclude arm64 libs

How to use 32-bit native libraries on 64-bit Android device

+1

役立つかもしれないいくつかの同様の質問がありますが、あなたは次の構文を使用することができます

android{ defaultConfig{ ndk{ abiFilters "armeabi", "x86" } } } 

を使用することです** libe/armeabi-v7a/** "'([PackagingOptions](https://)を参照してください)。たとえば、 'armeabi-v7a'フォルダのように、ABIフォルダ**全体を無視します。 google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html)) – Eido95

関連する問題