我正在使用 Android Studio 1.5.1 Gradle 2.8 版。Gradle 实验插件 v0.4.0 我也有一个包含本机 C 代码和 java 代码的库。我正在生成一个库 CoreLib-fat-release.aar,其中包含适用于所有架构(libcore.so)的本机库 - arm64-v8a、armeabi、armeabi-v7a、mips、mips64、x86、x86-64。我有第二个库,具体取决于我的核心库。我将核心库作为共享库。
在第二个库 gradle 文件中:
jni {
dependencies {
project ":CoreLib" buildType "release" productFlavor "fat" linkage "shared"
}
}
它能够正确构建,但是当我打开并看到第二个库 aar 文件时,我没有在所有架构文件夹中看到 libcore.so。
例如:SecondLibrary-fat-release.aar => SecondLibrary-fat-release-zip 在 SecondLibrary-fat-release/jni 文件夹中,只有 x86 和 x86_64 文件夹包含 libcore.so 文件。其他文件夹(arm64-v8a、armeabi、armeabi-v7a、mips、mips64)不包含 libcore.so 文件。
由于这个原因,如果我在 64 位设备中使用我的第二个库,它会抱怨 UnSatisfiedLink 错误,说找到 32 位库而不是 64 位。
这是我的第二个库的 build.gradle:
apply plugin: 'com.android.model.library'
model {
android {
compileSdkVersion = 21
buildToolsVersion = "23.0.2"
defaultConfig.with {
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 21
testInstrumentationRunner = "android.test.InstrumentationTestRunner"
}
lintOptions.with {
abortOnError = false
}
}
android.ndk {
moduleName = "secondlibrary
cppFlags.addAll("-I${file(folder_path)}".toString(),
"-I${file(sourcesDir +folder1)}".toString(),
"-I${file(sourcesDir +folder2)}".toString(),
)
cppFlags.add("-frtti")
cppFlags.add("-fexceptions")
CFlags.addAll("-I${file(folder_path)}".toString(),
"-I${file(sourcesDir +folder1)}".toString(),
"-I${file(sourcesDir +folder2)}".toString(),
)
CFlags.add("-O3")
CFlags.add("-funroll-loops")
CFlags.add("-Wall")
ldLibs.addAll(["android", "log", "stdc++", "c", "m", "z", "EGL", "GLESv2"])
stl = "gnustl_shared"
}
// jni is the default dir; config this if yours is in different directory
android.sources {
androidTest {
java {
source {
srcDirs '../test_sources_path/src'
}
}
}
main {
manifest {
source {
srcDirs '.'
}
}
java {
source {
srcDir "src"
}
}
jni {
dependencies {
project ":CoreLib" buildType "release" productFlavor "fat" linkage "shared"
}
source {
srcDirs = ["jni",
path1,
path2,
"libcore.so"]
}
}
jniLibs {
dependencies {
library file(path_to_binaries + "libcore.so") abi "armeabi"
library file(path_to_binaries + "libcore.so") abi "x86"
library file(path_to_binaries + "libcore.so") abi "armeabi-v7a"
library file(path_to_binaries + "libcore.so") abi "mips"
library file(path_to_binaries + "libcore.so") abi "x86_64"
library file(path_to_binaries + "libcore.so") abi "arm64-v8a"
library file(path_to_binaries + "libcore.so") abi "mips64"
}
}
}
}
android.productFlavors {
create("fat")
}
repositories {
libs(PrebuiltLibraries) {
CoreLib {
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file(path_to_binaries + "${targetPlatform.getName()}/libcore.so")
}
}
}
}
}
dependencies {
compile project(':CoreLib-fat-release')
}
注意:如果我将 CoreLib 链接设为“静态”而不是“共享”,则所有 libcore.so 文件都会正确复制到所有文件夹中。
请让我知道这是编程问题还是实验性插件中的错误。如果您知道任何替代方法,请建议我?谢谢你。