如何将依赖项下的 .so 文件编译到 .aar 包中



我正在开发某些 sdk 来为其他 android 应用程序提供一些功能。我的 sdk 项目依赖项的一个库项目有一些 .so lib 文件。使用 gradle 将我的 sdk 项目组装到 aar 包时,我发现不包括 .so 文件。如何将 .so lib 文件组装到 aar 包中?

以下是 sdk 项目的 build.gradle:

apply plugin: 'com.android.library'
android {
    signingConfigs {
        debug {
            keyAlias 'debug.keystore'
            keyPassword 'ssdebug'
            storeFile file('release-tools/debug.keystore')
            storePassword 'ssdebug'
        }
        release {
            keyAlias 'release.keystore'
            keyPassword 'dddd'
            storeFile file('../seedstore/release.keystore')
            storePassword 'dddd'
        }
    }
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 22
        signingConfig signingConfigs.release
    }
    sourceSets {
        main {
            jniLibs.srcDir file('jni/')
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),      'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.debug
            }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    productFlavors {
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile project(':alisdk')
    compile project(':jdsdk')
}

经过一千次尝试,我只是做了完全相同的事情,终于通过了。 -

  1. 我使用 android studio 创建了一个 android 库模块。
  2. 在此模块中,创建 xxx.java 接口文件,其包名称与 JNI 接口完全匹配。
  3. /
  4. moduleName/src/main/创建一个文件夹 "jniLibs"
  5. 将所有 *.so 文件及其平台名称复制到 .../jniLibs 中 它将看起来像: -/jniLibs/ ->/阿梅亚比/->libxxx.so ->/x86/->libxxx.so ...
  6. 无需更改构建脚本,构建库模块
  7. .arr 文件应位于/moduleName/build/outputs/xxx.aar
  8. 使用提取器工具解压缩最终的 xxx.aar,*.so 文件应位于 .aar/jni/下

//笔记:我曾尝试将 *.so 文件添加到 xxx.jar 中,将其添加到模块的库下,添加其编译依赖项。 .aar已将其打包到库中。但是,当用户使用此 .aar 时,本机函数调用会出现链接错误。

另一个更简单的解决方案,在模块 build.gradle 下添加以下语句:

buildTypes {
    debug {
        ndk {
            abiFilters 'armeabi'
        }
    }
    release {
        ndk {
           abiFilters 'armeabi'
        }
    }
}

最新更新