在我的Android应用程序中,我正在使用2个aar库。让我们将其命名为cat.aar
& fish.aar
为简单起见。
cat.aar
支持64位。它有armeabi-v7a和amp; arm64-v8a相关.so
个文件。
cat aar library中不包含.so
个文件,我必须将它们放在应用程序jniLibs下。
fish.aar
没有明确支持64位。它只有armeabi和armeabi-v7a相关的.so
文件。 fish aar library还有.so
个文件。
我的问题
我可以在我的应用程序中独立使用猫或鱼,我的应用程序在32位和64位设备上正常运行。
当我同时包括cat&应用程序jniLibs文件夹下的fish aar和.so
与cat lib相关的文件,fish lib正在尝试访问应用程序jniLibs文件夹下的.so
文件,但不在其自己的文件夹中。因此,每当我调用fish lib api时,App都会在libs下崩溃并显示错误.so file not found
。只要我只使用cat lib api而不使用fish lib,app就可以正常运行。
请参阅下面的build.gradle文件。请指导我在build.gradle中需要做哪些更改,以便我能够同时使用cat&在我的应用程序中钓鱼。
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '24.0.3'
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
defaultConfig {
applicationId "com.samples.fish.fishexplore"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
repositories {
flatDir {
dirs 'libs'
}
}
compile(name: 'cat', ext: 'aar')
compile(name: 'fish', ext: 'aar')
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support:support-annotations:25.1.1'
compile 'com.android.support:appcompat-v7:25.1.1'
}
答案 0 :(得分:1)
凭借稳健的心态,我意识到没有.so
文件范围更改概念。无论你是将.so
文件放在libs下还是放在.aar包中,在apk文件中所有这些都打包在
app-debug\libs\<arm64-v8a> or <armeabi> or <armeabi-v7a> or other ABI folder.
这是任何aar或jar将从.so
查找.apk
个文件的地方。
我的申请崩溃的原因是 - 猫和猫fish aar libs正在使用opencv.so
个文件。 cat libs修剪了它的版本,当fish lib有整个opencv.so
时。因此,虽然包装apk - fish的opencv.so
将不会合并到libs中,因为libs已经拥有同名的cat opencv.so
。
结果,鱼lib无法找到一些必要的参考。