我正在使用带有gradle插件的Android Studio来开发应用程序.我在DSL Reference上学习了一些android gradle插件的用法.但我发现有一件事是doc上的applicationVariants部分很难理解.它只给出了这样的描述:
DomainObjectSet <ApplicationVariant> applicationVariants
应用程序变体列表.由于集合是在评估之后构建的,因此应该与Gradle的all迭代器一起使用来处理未来的项目.
但是ApplicationVariant中的属性是什么?我不知道.我没有找到任何引用链接来描述ApplicationVariant.
仅在页面底部的Gradle Plugin用户指南中.它记录了applicationVariants,libraryVariants和testVariants中的可用属性.但我发现其中一些属性已被弃用了很长时间,而且Android没有更新此页面.
那么我在哪里可以找到ApplicationVariant中最新的属性?
我使用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并启动应用程序时,它崩溃了.有这样的错误:
那真是怪了.引发了 …