我有一些外部共享库要添加到一个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')
}