如何在Android build.gradle文件中更改.so文件的可访问性?

时间:2017-02-10 07:44:36

标签: android android-studio build.gradle aar

在我的Android应用程序中,我正在使用2个aar库。让我们将其命名为cat.aar& fish.aar为简单起见。

cat.aar支持64位。它有armeabi-v7a和amp; arm64-v8a相关.so个文件。 cat aar library中不包含.so个文件,我必须将它们放在应用程序jniLibs下。

fish.aar没有明确支持64位。它只有armeabi和armeabi-v7a相关的.so文件。 fish aar library还有.so个文件。

我的问题

我可以在我的应用程序中独立使用猫或鱼,我的应用程序在32位和64位设备上正常运行。

当我同时包括cat&应用程序jniLibs文件夹下的fish aar和.so与cat lib相关的文件,fish lib正在尝试访问应用程序jniLibs文件夹下的.so文件,但不在其自己的文件夹中。因此,每当我调用fish lib api时,App都会在libs下崩溃并显示错误.so file not found。只要我只使用cat lib api而不使用fish lib,app就可以正常运行。

请参阅下面的build.gradle文件。请指导我在build.gradle中需要做哪些更改,以便我能够同时使用cat&在我的应用程序中钓鱼。

    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'

}

1 个答案:

答案 0 :(得分:1)

凭借稳健的心态,我意识到没有.so文件范围更改概念。无论你是将.so文件放在libs下还是放在.aar包中,在apk文件中所有这些都打包在

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

这是任何aar或jar将从.so查找.apk个文件的地方。

我的申请崩溃的原因是 - 猫和猫fish aar libs正在使用opencv.so个文件。 cat libs修剪了它的版本,当fish lib有整个opencv.so时。因此,虽然包装apk - fish的opencv.so将不会合并到libs中,因为libs已经拥有同名的cat opencv.so。 结果,鱼lib无法找到一些必要的参考。