【问题标题】:How to compile the .so files under dependencies into the .aar package?如何将依赖项下的.so文件编译成.aar包?
【发布时间】:2016-01-20 09:53:40
【问题描述】:

我正在开发某些 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')
}

【问题讨论】:

  • 你找到解决办法了吗?

标签: android android-studio android-gradle-plugin aar


【解决方案1】:

我只是做了同样的事情,尝试了千百次,终于通过了。 -

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

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

【讨论】:

  • 当然,库项目的 aar 输出包含它的 .so 文件。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2021-05-13
    • 1970-01-01
    • 2016-07-28
    • 2017-06-01
    • 2016-01-31
    相关资源
    最近更新 更多