如何从build.gradle创建编译时配置类

时间:2017-02-26 16:18:59

标签: android android-gradle

我们在buildTypes中提供了'buildConfigField'方法,它将在BuildConfig类中创建一个静态最终变量。此外,当我们向xml文件添加任何资源时,android默认在R.java文件中创建一个ID常量。我想了解这背后的实现。

我想在build.gradle文件中的android项目中创建一个方法,它将读取json文件并创建类及其相关的静态最终成员变量。

{
  "Config": [
    {
      "name": "usernameType",
      "type": "String",
      "value": "text"
    }
  ]
}

将像这样创建:

public static final Class Config {

  public static final Item username = new Item("<item_type>","<item_name>","<item_value>");

  public class Item {
    public String name, type, value;
    public Item(String name, String type, String value){
      this.name=name;
      this.type=type;
      this.value;
    }

}

我不知道如何实现这个想法,它基本上会在编译时创建配置文件。

1 个答案:

答案 0 :(得分:2)

您可以创建一个Gradle插件,用于定义可以读入JSON的Gradle任务,然后使用JavaPoet写出您的Java文件。

你结束了:

  • Gradle Plugin对象知道如何将自己附加到适当位置的Android构建过程并创建一个...

  • Gradle DefaultTask对象,可配置并运行...

  • 一些普通(非Android)Java代码,它读取JSON(例如,通过Gson)并使用JavaPoet

This sample project演示了设置Gradle插件的基础知识,并在this chaptermy book中提供了完整说明。尽管我的JSON和Java与你的有些不同,This sample project几乎可以满足您的需求。我的书中this chapter详细介绍了这一点。

原则上,您可以在Gradle中完成所有这些操作,但需要的代码量超出我在build.gradle脚本中通常看到的数量。