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

时间:2015-05-29 10:09:02

标签: android eclipse jar android-gradle

我有一些外部共享库要添加一个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:无法从loader dalvik.system.PathClassLoader

加载xxx

如何正确完成?

2 个答案:

答案 0 :(得分:1)

将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
    }
}

答案 1 :(得分:0)

重组文件结构:

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')
}