Gradle任务编译前修改代码(android)

vshtjzan  于 2022-12-31  发布在  Android
关注(0)|答案(1)|浏览(230)

问题:在编译之前修改代码(类似于模糊处理的任务)
第一种方法:
1.运行任务(backupTask)以备份"src/main/java"目录
1.修改原代码
1.构建后恢复备份以获取原始代码
示例:

task backupCode(type:Copy){
    def src = "src/main/java"
    def dst = "src/main/backup"
    from src
    into dst
    filter {String line ->
        line.replace('Hello',"Bello")
    }
    dependsOn 'deleteModified'
}
task restoreCode(type:Copy){
    def src = "src/main/backup"
    def dst = "src/main/java"
    from src
    into dst
}
task deleteModified(type:Delete){
    delete "src/main/modified"
}
preBuild{
    dependsOn 'generateModifiedCode'
    doLast {
        //restore
        restoreCode()
    }
}
    • 另一个用例:**使用try catch块修改带注解的函数
@WrapFunction
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.e("TAG","Nello World")
    }
    • 编译前生成的代码**(但不修改原始代码)
@WrapFunction
    override fun onCreate(savedInstanceState: Bundle?) {
       try{
           super.onCreate(savedInstanceState)
           setContentView(R.layout.activity_main)
           Log.e("TAG","Nello World")
       }catch (ex:Exception){
           
       }
    }
    • 必需:**是否有任何最佳方法可以在编译前修改代码而不影响原始代码?其主要思想是创建一个自定义的gradle插件,如proguard模糊处理。该插件可以修改编译代码,但原始代码保持不变。
    • 注意:我了解反射+自定义Gradle插件+自定义注解**
kmpatx3s

kmpatx3s1#

经过深入的研究和斗争,我自己找到了答案:
Gradle转换API + Javassist +自定义注解+自定义Gradle插件+理解字节码

相关问题