如何通过gradle 2.2.1向我的jar中添加共享库



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

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

我的构建。它是:

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

但是它会导致崩溃:

. lang。UnsatisfiedLinkError:无法从loader dalvik.system.PathClassLoader加载xxx

如何正确使用

像这样添加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

构建。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')
}

最新更新