首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gradle中基于产品风味的包装选项

gradle中基于产品风味的包装选项
EN

Stack Overflow用户
提问于 2016-02-22 15:42:13
回答 4查看 1.8K关注 0票数 12

我使用打包选项来排除一些库。可以根据产品的口味来选择包装吗?例如:

代码语言:javascript
复制
android {
    productFlavors {
        flavorDimensions 'models'
            S2 {
                flavorDimension 'models'
                minSdkVersion 22
                ....
            }
            S6 {
                flavorDimension 'models'
                minsdkversion 22
                ....
            }
        }


    packagingOptions {
        exclude 'lib/armeabi/libs2.so'
        exclude 'lib/arm64-v8a/libs6.so
    }
}

现在在上面的代码中,我想在为s6风格生成的apk中只排除'lib/armeabi/libs2.so',在为s2风格生成的apk中只排除'lib/arm64-v8a/libs6.so'

我们怎样才能做到这一点。

EN

回答 4

Stack Overflow用户

发布于 2016-03-15 11:27:16

我遇到了同样的问题,然后,我开发了一个gradle插件来解决这个问题。你可以使用check it(android-soexcluder) out here

它非常容易使用:

代码语言:javascript
复制
soexcluder {
    s2 {
        exclude 'lib/arm64-v8a/libs6.so'
    }

    s6 {
        exclude 'lib/armeabi/libs2.so'
    }
}

除此之外,repository中甚至还有一个示例项目

票数 9
EN

Stack Overflow用户

发布于 2021-01-23 02:13:39

基于@Dodolong解决方案:

代码语言:javascript
复制
  packagingOptions {
      ...
        gradle.startParameter.getTaskNames().each { task ->
            if (task.contains('assemble')) {
                if (task.contains('s2')) {
                    exclude 'lib/**/my_cool_lib1.so'
                } else if (task.contains('s6')) {
                    exclude 'lib/**/my_cool_lib2.so'
                }
            }
        }

  }
票数 3
EN

Stack Overflow用户

发布于 2020-09-29 11:05:51

我遇到了同样的问题,我在依赖闭包中添加了代码短语。其概念是在任务执行时检测风格类型。并查找productFlavors实例以排除库。

代码语言:javascript
复制
android {
    productFlavors {
        flavorDimensions 'models'
            S2 {
                flavorDimension 'models'
                minSdkVersion 22
                ....
            }
            S6 {
                flavorDimension 'models'
                minsdkversion 22
                ....
            }
        }
}

dependencies {
    gradle.startParameter.getTaskNames().each { task ->
        println 'task name is :' + task
        if (task.contains('assemble')) {
            def android = project.extensions.findByName("android")

            if(android != null) {
                com.android.build.gradle.internal.dsl.PackagingOptions packagingOptions = android["packagingOptions"]

                if (packagingOptions != null) {
                    if(task.contains("S2")){
                        packagingOptions.exclude('lib/lib_for_s2.so')
                    } else if(task.contains("S6")) {
                        packagingOptions.exclude'lib/lib_for_s6.so')
                    }
                }
            }
            println 'libraries will be excluded: ' + packagingOptions.excludes
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35548217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档