編譯插樁

編譯插樁就是在代碼編譯期間修改已有的代碼或者生成新代碼

爲什麼說是編譯插樁呢?其實它是一個動作和一個修飾,編譯: 代碼在編譯期間,插樁: 在編譯時期將需要的動作或者是邏輯插入已經編譯的class文件中。

任何不能促使自己提高生產力的技術都沒有學習的意義,那怎麼將這個技術使用到Android開發中呢?

首先,在Android中,編譯的過程爲.java -> .class -> .dex,既然能在.class 文件中插入我們想要的邏輯,是否可以在轉換爲.dex之前實現想要的功能呢?

一、來一個疑問?

統計每個Activity打開的次數,用於數據統計,要求是不能只統計自己寫的Activity,第三方的Activity也需要統計,哦,怎麼搞,按照我們慣有的思維,應該是在每個Activity中的onCreate\onDestory中添加上報的代碼,那第三方的Activity不能修改,該怎麼去做統計呢?

1.1 可以在啓動的地方統計

針對上述的問題,在啓動的地方是能統計的,但是,拋開關閉不好統計的影響之外,在第三方的Activity 中啓動的Activity怎麼統計?

1.2 使用插樁技術

這個單獨做記錄,

  • 自定義Gradle文件
  • 自定義Transform

二、 應用場景

對於Android開發者來講,我們不再只需要記住編譯插樁需要怎麼做,和能怎麼做就可以了,這項技術就可以在我們日常開發中添磚加瓦了

2.1 場景及步驟

場景:

  • 日誌埋點;
  • 性能監控;
  • 動態權限控制;
  • 業務邏輯跳轉時,校驗是否已經登錄;
  • 其他
    使用
  • 首先理解自己的業務場景,是否需要此項技術,此項技術是否帶來大工作量而帶來少量的效益
  • 創建自己定義的gradle文件,這項技術就是在groovy 實現的,需要gradle
  • 自定義Transform,在transform方法中實現自己的邏輯

2.2 怎麼插到Activity,也就是Android中

  • ASM

ASM是生成和轉換已編譯的Java類工具,就是我們插樁需要使用的工具。

具體操作在Demo中體現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章