• 说说开发 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"
          ]
      }
      
  • 相关阅读:
    零点起飞学FlashCS6动画制作
    注意 方法的执行 顺序,并且 如果 为 nil的话,bool类型的数据 也默认是有值的,
    datepicker 的一个属性,
    用户体验 的一个原则,
    break 一下 便会 跳出 整个 switch ,
    原来 同一个 bundleid的项目 的下面 可以 通过这个 解决,诡异的问题,
    section 和 row,
    缓存,plist 和 json
    本地通知,UILocalNotification
    bundle id
  • 原文地址:https://www.cnblogs.com/wkmcyz/p/15695771.html
Copyright © 2020-2023  润新知