簡體   English   中英

Gradle 任務編譯前修改代碼(android)

[英]Gradle Task Modify code before compile (android)

問題:在編譯之前修改代碼(像混淆這樣的任務)

第一種方法:

  1. 運行一個任務(backupTask)來備份'src/main/java'目錄
  2. 修改原代碼
  3. 構建后恢復備份以獲取原始代碼

例子:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM