zoukankan      html  css  js  c++  java
  • 说说开发 ByteX 里的插件的第一步

    说说开发 ByteX 里的插件的第一步

    byteX 里的插件可以单独运行,也可以注册到公用平台上被调用,那么具体是使用了什么样的 gradle 语法将自己注册到共用平台上的呢?

    笔者会简单说几个像笔者一样的新人不知道的点,再详细一些的内容(比如抠具体的源码方法)就不赘述啦。这些知识点也是开发基于 byteX 的插件的基本知识。

    (以 ReferCheckPlugin 为例进行分析)

    gradle transform 都应该有一个 [x.properties](http://x.properties) 方法说明自己的 Plugin 类,插件源码里的这个文件在哪呢?

    答 :

    这是因为插件项目使用一个叫做 PluginConfigProcessor 的注解处理器,这个处理器会将 @PluginConfig 注解里的值,写入到对应项目的 META-INF/gradle-plugins/%s.properties 里, 其中 %s 是注解 @PluginConfig 的值。

    所以相当于这个文件没有手写,是使用注解处理器生成的。

    一个插件的属性应该如何进行声明? 使用项目应该如何进行配置?

    答:

    1. 插件属性如何进行声明?

    答: 每一个插件都是继承于 CommonPlugin<E extends BaseExtension, X extends BaseContext>

    的。其中第一个泛型参数 E extends BaseExtension 就是该 plugin 的参数类型。其中需要声明各个属性的 getter 和 setter 方法。

    • 下面给出声明示例:

      public class ReferCheckExtension extends BaseExtension {
          private List<String> whiteList;
          private boolean strictMode;
          private boolean moreErrorInfo;
          private String owner;
          private List<String> logMethods;
      
          public void setWhiteList(List<String> list) {
              whiteList = list;
          }
      
          public List<String> getWhiteList() {
              return whiteList;
          }
      
          public void strictMode(boolean strictMode) {
              this.strictMode = strictMode;
          }
      
          public boolean isStrictMode() {
              return strictMode;
          }
      
          public boolean moreErrorInfo() {
              return moreErrorInfo;
          }
      
          public void setMoreErrorInfo(boolean moreErrorInfo) {
              this.moreErrorInfo = moreErrorInfo;
          }
      
          public String getOwner() {
              return owner;
          }
      
          public void owner(String owner) {
              this.owner = owner;
          }
      
          public List<String> getLogMethods() {
              return logMethods;
          }
      
          public void setLogMethods(List<String> logMethods) {
              this.logMethods = logMethods;
          }
      
          @Override
          public String getName() {
              return "refer_check";
          }
      }
      
    1. 在使用插件的项目中,如何设置插件的属性?

    答 : 在使用插件的项目里,在其模块的 build.gradle 中,先应用插件,然后进行属性设置。

    • 下面给出语法配置示例:

      apply plugin: 'bytex.refer_check'
      // refer_check 指向一个 Plugin 对象
      refer_check {
      		// 这些值都是这个 Extension 对象的 getter/setter
          enable pluginEnable
          enableInDebug pluginEnableInDebug
          logLevel pluginLogLevel
          strictMode true
          whiteList = [
                  "com/google/+",
                  "junit/+",
                  "me/ele/lancet/+",
                  "javassist/+",
                  "sun/+",
                  "com/appsee/Appsee",
                  "com/alipay/+",
                  "com/alibaba/+",
                  "com/taobao/+",
                  "org/android/agoo/+",
                  "com/ut/mini/+",
                  "org/mozilla/+",
                  "com/amap/api/+",
                  "com/zhihu/matisse/+", // 知乎开源的图片选择库
                  "org/greenrobot/greendao/+",
                  // checker-compat-qual库,guava依赖的
                  "afu/org/checkerframework/checker/formatter/qual/ConversionCategory",
                  "org/checkerframework/checker/formatter/qual/ConversionCategory",
                  // -------------------------------
                  // Okhttp3的非必须依赖。 Platform using Conscrypt (conscrypt.org) if installed as the first Security Provider.
                  // Requires org.conscrypt:conscrypt-openjdk-uber on the classpath.
                  "org/conscrypt/+",
          ]
          logMethods = [
                  "com/ss/android/ugc/bytex/example/accessinline/OuterClass#run"
          ]
      }
      
  • 相关阅读:
    P1030 求先序排列 P1305 新二叉树
    spfa
    Clairewd’s message ekmp
    Cyclic Nacklace hdu3746 kmp 最小循环节
    P1233 木棍加工 dp LIS
    P1052 过河 线性dp 路径压缩
    Best Reward 拓展kmp
    Period kmp
    Substrings kmp
    Count the string kmp
  • 原文地址:https://www.cnblogs.com/wkmcyz/p/15695771.html
Copyright © 2011-2022 走看看