5分钟学会 如何 debug Android Gradle 插件

1,035 阅读2分钟

首先是插件工程中你的gradle build文件的设置

    id 'java-library'
    id 'org.jetbrains.kotlin.jvm'
    id 'kotlin'
    id 'kotlin-kapt'
    id 'maven-publish'
    id 'java-gradle-plugin'

}

dependencies {
    kapt 'com.google.auto.service:auto-service:1.0'
    api gradleApi()
    compileOnly 'com.android.tools.build:gradle:4.0.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.32"
    implementation "org.jetbrains.kotlin:kotlin-reflect:1.5.32"
    testCompileOnly 'com.android.tools.build:gradle:4.0.0'
}



gradlePlugin {

    // 这里要注意了,有了这个配置 我们就无需在插件工程中设置什么resouces-meta-inf 文件夹了,否则会 //有冲突 而且这里用插件配置的方式 比手动写配置文件要方便的多
    plugins {
        greeting {
            id = 'com.smart.gradlelib'
            implementationClass = 'com.smart.gradlelib.MyGradlePlugin'
        }
    }
}



sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

sourceSets {
    main {
        java {
            srcDirs += []
        }
        kotlin {
            srcDirs += ['src/main/kotlin', 'src/main/java']
        }
    }
}


compileKotlin {
    kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
}
java {
    withJavadocJar()
    withSourcesJar()
}

version = '1.1-SNAPSHOT'

publishing {

    repositories {
        maven {

            allowInsecureProtocol = true

            credentials {
                username('admin')
                password('admin123')
            }
            if (version.endsWith('SNAPSHOT')) {
                url('你的maven地址')
            } else {
                url('你的maven地址')
            }
        }
    }


    publications {
        def versionValue = version
        release(MavenPublication) {
            // 插件的组ID,建议设置为插件的包名
            groupId = 'com.smart.gradlelib'
            // 翻译过来是 工件ID,我的理解是插件的名字
            artifactId = 'testdebug'
            version = versionValue
            // 组件类型,我们的插件其实就是Java组件
            from components.java
        }

        snapshot(MavenPublication) {

            // 插件的组ID,建议设置为插件的包名
            groupId = 'com.smart.gradlelib'
            // 翻译过来是 工件ID,我的理解是插件的名字
            artifactId = 'testdebug'
            version = versionValue
            // 组件类型,我们的插件其实就是Java组件
            from components.java
        }
    }
}

然后我们将这个插件发布到maven仓库中

然后去我们的宿主工程中 引入这个插件

新版本的android studio 比较坑,搞了个plugins id的写法 我折腾了好久 也没办法引入我的插件,索性直接还是把bs那套引入进来就可以了

image.png

最后不要忘记在你的app module 下 引入这个插件

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    // 不要遗漏这个哟
    id 'com.smart.gradlelib'
}

然后同步一下,你就发现你的插件生效了,现在就剩最后一步 如何debug你的插件代码,毕竟不停的日志输出来调试就太麻烦了。

首先在我们的宿主工程 敲一下命令:

./gradlew :app:assemble -s -Dorg.gradle.debug=true --no-daemon

image.png

然后你会发现你的命令卡在这里了: 这就成功了一半了

这里要注意的是 如果你的工程是agp7.x版本 则要特殊配置下android11环境

在你的gradle.properties 文件中 配置下

org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-11.0.13.jdk/Contents/Home

然后我们转到我们的插件工程中:

选择Edit

image.png

然后新建一个 remote jvm debug 就可以了,name别忘记写一个容易记住的

image.png

最后在你想debug的地方 打个断点, 然后点击一下debug 你就会发现 刚才宿主工程的 gradle继续执行了 你就可以开始愉快的进行debug了

image.png