如何通过 gradle 2.2.1 将共享库添加到我的 jar?

How to add shared libraries to my jar by gradle 2.2.1?

我有一些外部共享库要添加一个jar 文件。文件结构如下:

project
|---lib
  |---armeabi-v7a/xxx.so
  |---x86/xxx.so
|---libs
  |---xxx.jar
  |---xxx.jar

我的 build.gradle 是:

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 22
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            jniLibs.srcDirs = ['lib']
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
}

task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('../../releases/')
    include('classes.jar')
    rename ('classes.jar', 'myjar.jar')
}
makeJar.dependsOn(clearJar, build)

我使用命令查看jar:

$ jar tf myjar.jar
...
armeabi-v7a/
armeabi-v7a/xxx.so
x86/
x86/xxx.so

但它会导致崩溃:

java.lang.UnsatisfiedLinkError: Couldn't load xxx from loader dalvik.system.PathClassLoader

如何正确操作?

像这样将您的 jar 路径添加到依赖项:

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar')
    compile files(‘libs/***.jar')
}

----编辑----

sourceSets {
    main {
        jni.srcDirs = [] // disable automatic ndk-build call
        jniLibs.srcDirs = ['libs'] // add your jni .so file path
    }
}

重构文件结构:

project
|---lib
  |---lib
    |---armeabi-v7a/xxx.so
    |---x86/xxx.so
|---libs
  |---xxx.jar
  |---xxx.jar

build.gradle像这样:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
        resources {
            srcDir 'src/../lib'
        }
    }
}
task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('../../releases/')
    include('classes.jar')
    rename ('classes.jar', 'myjar.jar')
}