【问题标题】:Gradle android plugin, how to copy and load different dynamic library according to different product flavors?Gradle android插件,如何根据不同的产品风格复制加载不同的动态库?
【发布时间】:2017-08-08 03:48:33
【问题描述】:

我有一个结构如下的 android 模块:

└─product module
└─src
    └─main
        ├─assets
        │  ├─flavor1
        │  └─flavor2
        ├─java
        └─jniLibs
            └─armeabi

我在模块的 build.gradle 文件中定义了两个产品风味,分别称为风味 1 和风味 2,在 src/main/assets/flavor1/ 和 src/main/asssets/flavor2 文件夹下是完全不同的动态库,例如:libhelper.so。它们适用于不同的产品风味。

我的目的是在 gradle 构建过程中根据产品风格将不同的动态库复制到 jniLibs/armeabi/ 文件夹,这是实现这一目标的方法吗?

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    您可以为此创建一个 gradle 任务。

    task copyNativeLibs {
        Gradle gradle = getGradle()
        Pattern pattern = Pattern.compile(":assemble(.*?)(Release|Debug)");
        Matcher matcher = pattern.matcher(gradle.getStartParameter().getTaskRequests().toString());
        def flavor = matcher.group(1)
    
        if(flavor == 'flavor1') {
        copy {
            from '/yourlibrarypath'
            into 'src/main/assets/flavor1/ '
            }
        } else if() {
        ....
        }
    }
    

    【讨论】:

    • 感谢您的解决方案。但是我应该把这个任务放在哪里(让这个任务有什么样的依赖),以便在选择产品风味后它可以在gradleassemble(.*?)(Release|Debug)进程中自动运行?
    • 您可以在您的 build.gradle 中添加它,并在文件末尾添加 project.afterEvaluate { preBuild.dependsOn(copyNativeLibs) } 然后此任务将作为 assemble* 构建的一部分执行。
    猜你喜欢
    • 2013-11-13
    • 2016-07-11
    • 2015-11-26
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多