2017-02-10 10 views
0

In meiner Android-Anwendung arbeite ich mit 2 AAR-Bibliotheken. Wir nennen es cat.aar & fish.aar der Einfachheit halber.So ändern Sie die .SO-Dateien in Android build.gradle-Datei?

cat.aar unterstützt 64 Bit. Es hat beide armeabi-v7a & arm64-v8a bezogenen .so Dateien. cat aar Bibliothek enthält keine .so Dateien in aar, ich muss sie unter Anwendung jniLibs platzieren.

fish.aar hat keine explizite Unterstützung für 64 Bit. Es hat nur arméabi und armeabi-v7a bezogene .so Dateien. Fisch aar Bibliothek hat .so Dateien auch in der aar.

Mein Problem

Ich bin in der Lage in meiner app unabhängig Katze oder Fisch aar zu verwenden und meine app läuft gut auf 32-Bit und 64-Bit-Geräte.

Wenn ich beide Katze & Fisch aar und .so Dateien im Zusammenhang mit Katze lib unter Anwendung jniLibs Ordner enthalten, Fisch lib versucht, seine .so Dateien unter Anwendung jniLibs Ordner zuzugreifen, aber nicht in seinem eigenen aar. Als Ergebnis stürzt die App mit dem Fehler .so file not found unter libs ab, wenn ich fish lib api aufruft. Während app läuft gut, solange ich nur Cat Lib API, aber nicht Fisch lib.

Siehe unten für meine build.gradle Datei. Bitte führen Sie mich, welche Änderungen ich in build.gradle tun muss, so dass ich beide Katze & Fisch aar in meiner App verwenden kann.

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

Entpacken Sie die apk und fügen Sie die Verzeichnisstruktur mit den Inhalten dieser Bibliothek? –

Antwort

1

beständig und Geist, wurde mir klar, dass es kein .so Dateien Umfang ändert Konzept. Kein mater, ob Sie .so Dateien unter libs oder in .aar Paket, in der APK-Datei setzen alle diese unter

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

verpackt sind, wird dies ist der Ort, jede aar oder Glas vom .apk für seine .so Dateien suchen.

Der Grund für meine Anwendung Absturz ist - beide Katze & Fisch aar Bibliotheken verwenden opencv.so Dateien. cat libs hat Version davon getrimmt und wenn Fisch lib hat ganze opencv.so. Also, während Verpackung Apk - Fisch opencv.so wird nicht in Libs zusammengeführt als libs hat bereits Katzen opencv.so mit dem gleichen Namen. Als Ergebnis konnte Fisch lib nicht einige der erforderlichen Referenzen in diesem finden.

Verwandte Themen