问题:在编译之前修改代码(类似于模糊处理的任务)
第一种方法:
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插件+自定义注解**
1条答案
按热度按时间kmpatx3s1#
经过深入的研究和斗争,我自己找到了答案:
Gradle转换API + Javassist +自定义注解+自定义Gradle插件+理解字节码