【问题标题】:How to change .so files accessibility in Android build.gradle file?如何在 Android build.gradle 文件中更改 .so 文件的可访问性?
【发布时间】:2017-02-10 07:44:35
【问题描述】:

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

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

fish.aar 没有明确支持 64 位。它只有 armeabi 和 armeabi-v7a 相关的.so 文件。鱼 aar 库有.so 文件也在 aar 中。

我的问题

我可以在我的应用程序中独立使用 cat 或 fish aar,并且我的应用程序在 32 位和 64 位设备上运行良好。

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

我的 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'

}

【问题讨论】:

  • 解压apk并将目录结构粘贴到这些库的内容中?

标签: android android-studio build.gradle aar


【解决方案1】:

心安理得,我意识到没有.so 文件范围更改概念。不管你把.so文件放在libs下还是.aar包里,apk文件里都打包在了

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

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

我的应用程序崩溃的原因是 - cat 和 fish aar 库都在使用 opencv.so 文件。 cat libs 已对其进行了修整,而当 fish lib 具有完整的 opencv.so 时。因此,虽然打包 apk -fish 的 opencv.so 不会合并到 libs 中,因为 libs 已经有 cat 的 opencv.so 同名。 结果,fish lib 无法在其中找到一些必需的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2021-02-17
    • 1970-01-01
    • 2014-01-29
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多