我正在开发某些 sdk 来为其他 android 应用程序提供一些功能。我的 sdk 项目依赖项的一个库项目有一些 .so lib 文件。使用 gradle 将我的 sdk 项目组装到 aar 包时,我发现不包括 .so 文件。如何将 .so lib 文件组装到 aar 包中?
以下是 sdk 项目的 build.gradle:
apply plugin: 'com.android.library'
android {
signingConfigs {
debug {
keyAlias 'debug.keystore'
keyPassword 'ssdebug'
storeFile file('release-tools/debug.keystore')
storePassword 'ssdebug'
}
release {
keyAlias 'release.keystore'
keyPassword 'dddd'
storeFile file('../seedstore/release.keystore')
storePassword 'dddd'
}
}
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
signingConfig signingConfigs.release
}
sourceSets {
main {
jniLibs.srcDir file('jni/')
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
compile project(':alisdk')
compile project(':jdsdk')
}
经过一千次尝试,我只是做了完全相同的事情,终于通过了。 -
- 我使用 android studio 创建了一个 android 库模块。
- 在此模块中,创建 xxx.java 接口文件,其包名称与 JNI 接口完全匹配。 /
- moduleName/src/main/创建一个文件夹 "jniLibs"
- 将所有 *.so 文件及其平台名称复制到 .../jniLibs 中 它将看起来像: -/jniLibs/ ->/阿梅亚比/->libxxx.so ->/x86/->libxxx.so ...
- 无需更改构建脚本,构建库模块
- .arr 文件应位于/moduleName/build/outputs/xxx.aar
- 使用提取器工具解压缩最终的 xxx.aar,*.so 文件应位于 .aar/jni/下
//笔记:我曾尝试将 *.so 文件添加到 xxx.jar 中,将其添加到模块的库下,添加其编译依赖项。 .aar已将其打包到库中。但是,当用户使用此 .aar 时,本机函数调用会出现链接错误。
另一个更简单的解决方案,在模块 build.gradle 下添加以下语句:
buildTypes {
debug {
ndk {
abiFilters 'armeabi'
}
}
release {
ndk {
abiFilters 'armeabi'
}
}
}