![](/img/trans.png)
[英]Android Studio ——How can I modify one Class's field before compile by build.gradle
[英]Gradle Task Modify code before compile (android)
問題:在編譯之前修改代碼(像混淆這樣的任務)
第一種方法:
例子:
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 塊修改帶注釋的 function
@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 插件,如混淆混淆。 其中修改了編譯代碼,但原始代碼保持不變。
注意:我了解 Reflection + Custom Gradle Plugin + Custom Annotation
經過深入研究和奮斗,我自己找到了答案:
Gradle Transform API + Javassist + Custom Annotation + Custom Gradle Plugin + 字節碼的理解
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.