Android 如何切換到 Transform API?
摘要: 如果你的 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 官方部落格
相關文章
- 耐克公司是如何將API切換到GraphQL的?API
- 如何從 Docker Desktop 切換到 ColimaDocker
- Android註解使用之註解編譯android-apt如何切換到annotationProcessorAndroid編譯APT
- Win10怎樣切換平板模式_win10如何切換到平板模式Win10模式
- linux下 如何切換到root使用者Linux
- RVM切換到rbenv[MacOS]Mac
- App切換到後臺後如何保持持續定位?APP
- 如何把Mac上的 Wifi 切換到5GHzMacWiFi
- git切換到指定目錄Git
- git切換到遠端分支Git
- Android橫豎屏切換Android
- 解決Android打包com.android.build.api.transform.TransformException的問題AndroidUIAPIORMException
- Laravel Transform 轉換器LaravelORM
- win10系統amd顯示卡如何切換到獨顯Win10
- 蘋果mac apple proc如何切換到root使用者蘋果MacAPP
- 切換到Git的8個理由Git
- 實戰:如何優雅的從 Skywalking 切換到 OpenTelemetry
- Android切換Activity的動畫效果Android動畫
- home鍵監聽(Android應用切換到後臺監聽)Android
- 什麼是Transform轉換ORM
- Android Transform + ASM 初探AndroidORMASM
- com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException:AndroidUIAPIORMExceptionIDE
- 報錯com.android.build.api.transform.TransformException: java.util.zip.ZipException:AndroidUIAPIORMExceptionJava
- com.Android.build.api.transform.TransformException:Java.util.zip.ZipException異常AndroidUIAPIORMExceptionJava
- 從NodeJS切換到Ruby on Rails - nikodunkNodeJSAI
- 切換到ZSH以後遇到的坑
- 搜狗輸入法切換到半形
- Java 8 Stream API 轉換到 Kotlin 集合APIJavaAPIKotlin
- Python中如何切換GIL?Python
- 寶塔如何切換PHP版本PHP
- 快速切換至Kotlin for Android模式KotlinAndroid模式
- Android開發之ViewPager切換動畫AndroidViewpager動畫
- SVG transform變換深入理解SVGORM
- css 3D transform變換CSS3DORM
- 理解SVG transform座標變換SVGORM
- com.android.build.api.transform.TransformException: Error while generating the main dex list.AndroidUIAPIORMExceptionErrorWhileAI
- 微信小程式-uniapp-切換tab時資料列表如何切換?微信小程式APP
- 為什麼Discord從Go切換到Rust?GoRust