2017-02-10 6 views
0

私のAndroidアプリケーションでは、私は2つのaarライブラリで作業しています。わかりやすくするために、cat.aar & fish.aarという名前にしてください。Android build.gradleファイルの.soファイルのアクセシビリティを変更するにはどうすればよいですか?

cat.aarは64ビットをサポートします。それにはarmeabi-v7a & arm64-v8a関連の.soファイルがあります。 cat aarライブラリには.soのファイルが含まれていません。アプリケーションjniLibsの下に配置する必要があります。

fish.aarは64ビットを明示的にサポートしていません。それはarmeabiとarmeabi-v7aに関連するファイルのみを持っています。.so魚のaar図書館には、.soのファイルもあります。

私の問題

私は私のアプリでは、独立して、猫や魚AARを使用することができていますし、私のアプリは、32ビットおよび64ビットのデバイス上で罰金を実行されています。

私は猫&魚のAARとアプリケーションjniLibsフォルダの下に、魚のLIBは、アプリケーションjniLibsフォルダの下ではなく、独自のAARにその.soファイルにアクセスしようとしているのlib猫に関連.soファイルの両方が含まれます。結果として、私がfish lib apiを呼び出すたびに、libsのエラー.so file not foundでAppがクラッシュします。一方、cat lib apiのみを使用し、fish libは使用しない限り、appは正常に動作します。

私のbuild.gradleファイルは下記を参照してください。 build.gradleで何をする必要があるのか​​教えてください。私のアプリでcat & fish aarの両方を使用できるようにしてください。

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion '24.0.3' 
    sourceSets { 
     main { 

      jniLibs.srcDirs = ['libs'] 
     } 
    } 
    defaultConfig { 
     applicationId "com.samples.fish.fishexplore" 
     minSdkVersion 21 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

} 

dependencies { 
    repositories { 
     flatDir { 
      dirs 'libs' 
     } 
    } 
    compile(name: 'cat', ext: 'aar') 
    compile(name: 'fish', ext: 'aar') 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' 
    androidTestCompile 'com.android.support.test:runner:0.5' 
    androidTestCompile 'com.android.support:support-annotations:25.1.1' 
    compile 'com.android.support:appcompat-v7:25.1.1' 

} 
+0

apkを解凍してディレクトリsturctureにこれらのライブラリの内容を貼り付けますか? –

答えて

1

は着実な心で、私は.soファイルスコープ変更する概念が存在しないことに気づきました。あなたは

app-debug\libs\<arm64-v8a> or <armeabi> or <armeabi-v7a> or other ABI folder. 

この下に、これらすべてがパッケージされているAPKファイルで、LIBS下または.aarパッケージに.soファイルを置くかどうかいいえ母校は、任意のAARまたはjarファイルが.apkからその.soファイルを探します場所ではありません。

私のアプリケーションクラッシュの理由は、両方の猫&魚のaarライブラリはopencv.soファイルを使用しています。 cat libsはそのバージョンをトリムし、fish libには全体でopencv.soが含まれています。だからパッケージapk-fishのopencv.soはlibsにすでにマッチしませんが、libsにはすでに同じ名前のcatのopencv.soがあります。 その結果、魚libはその中で必要な参照のいくつかを見つけることができません。

関連する問題