我有一个Android项目,它使用具有相互依赖性的库:
Android应用程序依赖于以下本机库
mylibrary还取决于tess-two和opencv4android
以下是我的Android应用程序的build.gradle文件:
apply plugin: 'com.android.application'
dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile project(':libraries:opencv4android')
compile project(':libraries:tess-two')
compile project(':libraries:mylibrary')
}
android {
compileSdkVersion 19
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
}
// packagingOptions {
// exclude 'lib/armeabi/liblept.so'
// exclude 'lib/armeabi/libtess.so'
// exclude 'lib/armeabi-v7a/liblept.so'
// exclude 'lib/armeabi-v7a/libtess.so'
// exclude 'lib/mips/liblept.so'
// exclude 'lib/mips/libtess.so'
// exclude 'lib/x86/liblept.so'
// exclude 'lib/x86/libtess.so'
// }
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
由于duplicate files during packaging of APK
和liblept.so
被复制两次,因此此配置的gradle构建失败,并显示libtess.so
错误。
当我取消注释我可以成功构建的打包选项时,我在运行时得到UnsatisfiedLinkError
,因为liblept.so
并且libtess.so
根本不包含在apk中。
如何才能将liblept.so
和libtess.so
恰好包含在apk中?
答案 0 :(得分:0)
我认为我找到了解决方案,但是,我不太了解它。
mylibrary和tess-two模块的build.gradle
个文件包含
android.sourceSets.main.jniLibs.srcDirs = [' libs']
在tess-two中评论此定义导致libtess.so
和liblept.so
仅被复制到apk一次。
如果有人理解此解决方案,请发表评论或回答。
编辑:
与此同时,我找到了一个更好的解决方案: 我将以下代码添加到我的主应用程序gradle.build文件中:
packagingOptions { // otherwise libtess.so and liblept.so are copied to apk twice resulting in an error
pickFirst('lib/*/liblept.so')
pickFirst('lib/*/libtess.so')
}