Ysj001 / DoKitPluginCompat

解决 DoKit 插件在 AGP 8+ 上无法使用的问题。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DoKitPluginCompat

由于 DoKit 插件在官方并不兼容 AGP8+,因此如果你想在高版本的 AGP 上使用 DoKit 可以使用本项目的兼容插件包。兼容插件包中对字节码的修改基于 BCUIModifier 接口,通过该接口的实现类来代理并驱动 DoKit 插件中的所有 Transformer 进而兼容原 Dokit 插件的功能。

本兼容包的主版本和 DoKit 保持一致便于理解和使用,例子:

  • 官方插件依赖:io.github.didi.dokit:dokitx-plugin:3.7.1
  • 兼容插件依赖:com.github.Ysj001:DoKitPluginCompat:3.7.1-v1

注意!不要同时使用兼容插件和官方插件

Compile

如果你要编译本项目,可了解如下工程结构

  • app 用于演示
  • buildSrc 管理 maven 发布和版本控制项目统一配置
  • repos 本地 maven 仓库,便于开发时调试
  • dokit_plugin_compat 本项目核心实现

在编译本项目前请先在根目录下执行 gradlew publishAllPublicationsToLocalRepository 然后重新 sync。

Quick Start

  1. 推荐使用下面所示的最新版本:

    • BCU:
    • DoKitPluginCompat:
  2. 在项目的根 build.gradle.kts 中配置如下

    // Top-level build file
    buildscript {
        repositories {
            maven { setUrl("https://jitpack.io") }
        }
        
        dependencies {
            // BCU 插件依赖
            classpath("com.github.Ysj001.BytecodeUtil:plugin:<lastest-version>")
            // DoKitPluginCompat 依赖
            classpath("com.github.Ysj001:DoKitPluginCompat:<lastest-version>")
        }
    }
    
    subprojects {
        repositories {
            maven { url 'https://jitpack.io' }
        }
    }
  3. app 模块的 build.gradle.kts 中的配置如下

    plugins {
        id("com.android.application")
        id("org.jetbrains.kotlin.android")
        // 添加 bcu 插件
        id("bcu-plugin")
        // 添加 dokit 兼容插件
        id("dokit-compat")
    }
    
    // 配置 bcu 插件
    bcu {
        config { variant ->
            loggerLevel = 2
            modifiers = arrayOf(
            	// 添加 DoKit 插装兼容实现
            	Class.forName("com.ysj.lib.dokit.plugin.compat.DoKitTransformCompat"),
            )
        }
        filterNot { variant, entryName ->
            // 请按需配置过滤,可大幅提升编译输速度
            false
        }
    }
    
    // 配置 dokit
    // 详见:https://xingyun.xiaojukeji.com/docs/dokit/#/androidGuide
    dokitExt {
        comm {
            // ...
        }
        slowMethod {
            // ...
        }
    }
    

Other

  • 如果本项目对你有所帮助,欢迎 start。
  • 如果有问题或 bug 欢迎提 issues 给我。

About

解决 DoKit 插件在 AGP 8+ 上无法使用的问题。

License:Apache License 2.0


Languages

Language:Kotlin 100.0%