Ion*_*gru 6 android module static-libraries gradle android-productflavors
我试图建立一个项目,该项目依赖于使用“ .so”文件的库模块。
到目前为止,我有:
#版权所有(C)2010 The Android Open Source Project # #根据Apache许可证2.0版(“许可证”)获得许可; #除非符合许可,否则您不得使用此文件。 #您可以在以下位置获得许可的副本 # #http://www.apache.org/licenses/LICENSE-2.0 # #除非适用法律要求或书面同意,否则软件 根据许可协议分发的#是按“原样”分发的, #没有任何明示或暗示的保证或条件。 #有关特定语言的管理权限,请参阅许可证。 #许可中的限制。 LOCAL_PATH:= $(调用my-dir) 包括$(CLEAR_VARS) #在这里我们给出模块名称和源文件 LOCAL_MODULE:=我的模块 LOCAL_SRC_FILES:= $(TARGET_ARCH_ABI)/my-lib.so LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include 包括$(PREBUILT_SHARED_LIBRARY)
应用插件:“ com.android.library”
android {
编译版本23
buildToolsVersion“ 23.0.2”
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
版本代码1
versionName“ 1.0”
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
发布 {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
sourceSets.main.jni.srcDirs = [] //禁用自动ndk-build调用
//默认情况下,将发布样式设置为
defaultPublishConfig“ X86Debug”
publishNonDefault true
productFlavors {
//有关abiFilter的详细说明,请参阅“支持的ABI” @
// https://developer.android.com/ndk/guides/abis.html#sa
手臂{
ndk {
abiFilter(“ armeabi”)
}
}
arm7 {
ndk {
abiFilter(“ armeabi-v7a”)
}
}
x86 {
ndk {
abiFilter(“ x86”)
}
}
//这是包含所有ABI的胖APK
脂肪
}
}
依赖项{
testCompile'junit:junit:4.12'
编译'com.j256.ormlite:ormlite-android:4.48'
}
...
应用插件:“ com.android.application”
...
android {
...
//如果要对多个口味应用多个过滤器,则顺序很重要
flavourDimensions“ api”,“ abi”
productFlavors {
//定义单独的dev和prod产品风格。
开发{
维度“ api”
//开发人员利用minSDKVersion = 21允许Android gradle插件
//预先处理每个模块并生成可在其中测试的APK
// Android Lollipop,无需耗时的dex合并过程。
minSdkVersion 21
}
产品{
维度“ api”
//应用程序的实际minSdkVersion。
minSdkVersion Integer.parseInt((String)project.ANDROID_BUILD_MIN_SDK_VERSION)
}
//有关abiFilter的详细说明,请参阅“支持的ABI” @
// https://developer.android.com/ndk/guides/abis.html#sa
手臂{
尺寸“ abi”
ndk {
abiFilter(“ armeabi”)
}
}
arm7 {
尺寸“ abi”
ndk {
abiFilter(“ armeabi-v7a”)
}
}
x86 {
尺寸“ abi”
ndk {
abiFilter(“ x86”)
}
}
}
...
buildTypes {
发布 {
//禁用所有组件进行调试
可调试假
//使用更新的Proguard规则
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
//混淆,清理和优化项目代码
minifyEnabled是
//启用zip align进行优化
zipAlignEnabled是
//仅在发布buildType上使用发布键
signingConfig signingConfigs.prod
}
调试{
可调试true
minifyEnabled false
zipAlignEnabled false
}
}
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
配置{
// x86版本
devX86DebugCompile
prodX86DebugCompile
devX86ReleaseCompile
prodX86ReleaseCompile
//手臂版本
devArmDebugCompile
prodArmDebugCompile
devArmReleaseCompile
prodArmReleaseCompile
// arm7版本
devArm7DebugCompile
prodArm7DebugCompile
devArm7ReleaseCompile
prodArm7ReleaseCompile
}
依赖项{
编译fileTree(include:['* .jar'],dir:'libs')
devX86DebugCompile项目(路径:':my-module-lib',配置:'x86Debug')
prodX86DebugCompile项目(路径:':my-module-lib',配置:'x86Debug')
devX86ReleaseCompile项目(路径:':my-module-lib',配置:'x86Release')
prodX86ReleaseCompile项目(路径:':my-module-lib',配置:'x86Release')
devArmDebugCompile项目(路径:':my-module-lib',配置:'armDebug')
prodArmDebugCompile项目(路径:':my-module-lib',配置:'armDebug')
devArmReleaseCompile项目(路径:':my-module-lib',配置:'armRelease')
prodArmReleaseCompile项目(路径:':my-module-lib',配置:'armRelease')
devArm7DebugCompile项目(路径:':my-module-lib',配置:'arm7Debug')
prodArm7DebugCompile项目(路径:':my-module-lib',配置:'arm7Debug')
devArm7ReleaseCompile项目(路径:':my-module-lib',配置:'arm7Release')
prodArm7ReleaseCompile项目(路径:':my-module-lib',配置:'arm7Release')
...
}
这似乎当前有效(至少在编译时有效),但是我觉得很难像这样维护它,并且我必须添加很多依赖项和配置(最后,我要支持所有ABI,以便每个apk)。
有没有更简单,更清洁的方式来做这样的事情?
此外,在生成的APK中,所有ABI都包括在内。我为此做错了吗?
我已经解决了所有ABI都包含在APK中的问题。我只需要在应用程序模块的productFlavors中使用abiFilter。我已经更新了代码以反映这一点。我只注意到了一个小问题:库模块的结果aar仍然包括所有ABI,即使它已针对每种口味正确设置了abiFilter。
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |