小编Ton*_*een的帖子

我怎么知道android gradle插件的applicationVariants中的属性?

我正在使用带有gradle插件的Android Studio来开发应用程序.我在DSL Reference上学习了一些android gradle插件的用法.但我发现有一件事是doc上的applicationVariants部分很难理解.它只给出了这样的描述:

DomainObjectSet <ApplicationVariant> applicationVariants

应用程序变体列表.由于集合是在评估之后构建的,因此应该与Gradle的all迭代器一起使用来处理未来的项目.

但是ApplicationVariant中的属性是什么?我不知道.我没有找到任何引用链接来描述ApplicationVariant.

仅在页面底部的Gradle Plugin用户指南中.它记录了applicationVariants,libraryVariants和testVariants中的可用属性.但我发现其中一些属性已被弃用了很长时间,而且Android没有更新此页面.

那么我在哪里可以找到ApplicationVariant中最新的属性?

android gradle android-gradle-plugin gradle-plugin

16
推荐指数
2
解决办法
5675
查看次数

如何使用Android Gradle插件提供的Transform API?

我使用applicationVariants.dex.dependsOn任务在代码转换为dex文件之前做了一些额外的工作,并且在android gradle插件1.3之前它运行良好.但是从1.4开始,dex任务被禁止访问并且会显示这样的错误提示: 在此输入图像描述

好.我需要使用新的Transform API而不是dex任务.但问题是关于Transform API的文档真的很少.我能找到的是谷歌的官方文件在这里,但它似乎不是很容易理解.

所以我试着写一个自定义变换,我真的不知道我是不对的:

public class MyTransform extends Transform {

    @Override
    public String getName() {
        return "MyTransformImpl";
    }

    @Override
    public Set<QualifiedContent.ContentType> getInputTypes() {
        Set<QualifiedContent.ContentType> set = new HashSet<QualifiedContent.ContentType>();
        set.add(QualifiedContent.DefaultContentType.CLASSES);
        return set;
    }

    @Override
    public Set<QualifiedContent.Scope> getScopes() {
        Set<QualifiedContent.Scope> set = new HashSet<QualifiedContent.Scope>();
        set.add(QualifiedContent.Scope.PROJECT);
        return set;
    }

    @Override
    public boolean isIncremental() {
        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是一个空的自定义变换.我没有添加转换逻辑,但这不是问题.然后我使用gradle文件中记录的api 注册了这个Transform:

def transform = new MyTransform()
project.android.registerTransform(transform)
Run Code Online (Sandbox Code Playgroud)

他们执行汇编任务时,我的自定义转换似乎有效.我可以从执行任务列表中看到它:

在此输入图像描述

最后apk文件生成成功,一切似乎都正确.但是当我安装apk并启动应用程序时,它崩溃了.有这样的错误:

在此输入图像描述

那真是怪了.引发了 …

android transform gradle gradle-plugin

4
推荐指数
1
解决办法
3414
查看次数