說說開發 ByteX 裡的外掛的第一步
阿新 • • 發佈:2021-12-16
說說開發 ByteX 裡的外掛的第一步
byteX 裡的外掛可以單獨執行,也可以註冊到公用平臺上被呼叫,那麼具體是使用了什麼樣的 gradle 語法將自己註冊到共用平臺上的呢?
筆者會簡單說幾個像筆者一樣的新人不知道的點,再詳細一些的內容(比如摳具體的原始碼方法)就不贅述啦。這些知識點也是開發基於 byteX 的外掛的基本知識。
(以 ReferCheckPlugin
為例進行分析)
gradle transform 都應該有一個 [x.properties](http://x.properties)
方法說明自己的 Plugin 類,外掛原始碼裡的這個檔案在哪呢?
答 :
這是因為外掛專案使用一個叫做 PluginConfigProcessor
@PluginConfig
註解裡的值,寫入到對應專案的 META-INF/gradle-plugins/%s.properties
裡, 其中 %s
是註解 @PluginConfig
的值。
所以相當於這個檔案沒有手寫,是使用註解處理器生成的。
一個外掛的屬性應該如何進行宣告? 使用專案應該如何進行配置?
答:
- 外掛屬性如何進行宣告?
答: 每一個外掛都是繼承於 CommonPlugin<E extends BaseExtension, X extends BaseContext>
的。其中第一個泛型引數 E extends BaseExtension
-
下面給出宣告示例:
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"; } }
- 在使用外掛的專案中,如何設定外掛的屬性?
答 : 在使用外掛的專案裡,在其模組的 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" ] }