2015-05-29 30 views
0

我有一些外部共享庫需要添加一個jar文件。文件結構如下:如何通過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 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

如何正確地做到這一點?

回答

1

添加您的罐子路徑依賴這樣的:

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 
    } 
} 
+0

不可以。該jar文件可以在運行時找到,但不能。問題是共享庫不在正確的文件夾中,因此係統找不到它們。 –

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