Android 如何切換到 Transform API?

OneAPM官方技術部落格發表於2016-03-18

摘要: 如果你的 Android 構建中涉及到位元組碼插裝(bytecode instrumentation),或者應用中提供了進行插裝的外掛,並希望它能支援 Instant Run,那麼你必須切換到 Transform API。

目前,位元組碼插裝雖然可以新增到構造過程中,但還沒有對應的 API。通用的方法是找到 dx 任務,抓取其輸入,並替換成自己的輸出。隨後,任務依賴就不得不重新連線,以便將新的中間任務納入。

該方法存在一定的問題,原因如下:

-無法區分某些輸入(如子模組與外部庫)

-主要 dex 類列表的計算也必須包含插裝輸出,因此增加了處理多個遺留dex的難度。

-將一個以上第三方插裝合併時會非常不穩定,而且容易被破壞。

除此之外,該方法不支援 Instant Run。儘管原始構造的APK的確能通過常規的構建步驟,熱調換(hotswap)模式卻可執行不同的任務。

在常規構造中,Instant Run新增了以下步驟:

-用專案類插裝為程式碼替換新增間接法。

-複製類,以便在隨後進行比較並生成覆蓋類

然而,必須在任何第三方插裝之後,才能執行此步驟,而以前的插裝機制(在最後dx之前新增)不可能出現這種情況。

在hotswap構造時, Instant Run 會執行 java 編譯程式,並將輸出與先前構造的輸出進行比較,以生成覆蓋類。隨後, Instant Run 會執行不同的dx任務,該任務僅對覆蓋類進行遠距離交換。這一流程和常規的構造有很大差別,而且之前的連線插裝方法也完全沒有使用該流程。

為了解決這個問題,我們建立了 Transform API 。目的在於提供將第一方和第三方插裝連通並整合至構造流程的 API 。該 API 不處理Gradle任務,但處理需要插裝的其他東西,用外掛進行任務實體化和佈線處理。

訪問http://tools.android.com/tech-docs/new-build-system/transform-api可瞭解更多關於transform API的資訊

目前, Transform API 還在測試階段,我們希望能儘快進入平穩執行階段,因此希望能得到你的建議。請加入我們的開發谷歌組,並提出建議:https://groups.google.com/forum/#!forum/adt-dev

OneAPM Mobile Insight 以真實使用者體驗為度量標準進行 Crash 分析,監控網路請求及網路錯誤,提升使用者留存。訪問 OneAPM 官方網站感受更多應用效能優化體驗,想閱讀更多技術文章,請訪問 OneAPM 官方技術部落格

本文轉自 OneAPM 官方部落格

相關文章