天天看點

Dexposed:Android平台免Root無侵入AOP架構

本文來自阿裡巴巴技術協會(ata)

本文首發于 http://www.infoq.com/cn/news/2015/07/dexposed

近日,阿裡巴巴無線事業部推出首個重量級android開源項目,名為dexposed,是一個android平台下的無侵入運作期aop架構。旨在解決像性能監控、線上熱更新檔等移動開發常見難題,典型使用場景為:

aop程式設計

插樁 (如測試、性能監控等)

線上熱更新檔

sdk hooking以提供更好的開發體驗

它基于root社群著名開源項目xposed改造剝離了root部分,演化為服務于所在應用自身的aop架構,并在apache 2.0協定下開源。

xposed是xda社群使用者rovo89開發并管理的一個項目,它通過修改android dalvik運作時的zygote程序,使用xposed bridge将第三方代碼注入到android應用的方法調用中,實作非侵入式的在運作期動态修改系統和應用行為的能力。從推出到現在,它受到廣大開發者和使用者的歡迎,出現了數千個子產品和适配不同android rom的安裝器。

dexposed受到xposed的啟發,但它關注于應用本身,僅僅提供改變應用自身運作時行為的能力,不提供注解處理器、織入(weaver)和改變位元組碼的能力。它的使用也很簡單,隻需在應用初始化階段引入一個jni庫即可。另外,dexposed還支援art運作時,不過還在早期階段。

infoq記者聯系到該架構的作者并進行了采訪,以下是我們了解到的更多資訊。

dexposed作者介紹:

胡文江,淘寶花名白衣(@rock白衣),10年加入手機淘寶,目前在阿裡巴巴無線事業部android架構組,主要負責android用戶端基礎架構及性能優化工作。有8年的智能手機軟體開發經驗(從早期的symbian,windowsmobile到今天的androidios),包括将近3年多的移動多媒體軟體開發經驗,将近4年多的大型移動網際網路軟體開發架構經驗。

infoq:請介紹一下dexposed項目,它的原理是什麼樣的,在淘寶内部是如何用的?

白衣:手機淘寶在12年下半年起就在尋找用戶端動态改變的能力,投入了很多人力,做了很多各種各樣有益的嘗試。dexposed項目就是在這種大背景下産生的。 dexposed項目是手機淘寶獨立研發,業界首創的無侵入式android用戶端熱更新檔方案的核心底層支撐技術。 它主要功能特性或者說它最強大的地方,就是在android手機上能對一個用戶端app内的任何java方法進行『熱』動态aop替換,java方法的aop替換是立即生效的。 dexposed中的aop原理來自于xposed。在dalvik虛拟機下,主要是通過改變一個方法對象方法在dalvik虛拟機中的定義來實作,具體做法就是将該方法的類型改變為native并且将這個方法的實作連結到一個通用的native dispatch方法上。這個 dispatch方法通過jni回調到java端的一個統一處理方法,最後在統一處理方法中調用before, after函數來實作aop。在art虛拟機上目前也是是通過改變一個 artmethod的入口函數來實作。 它的典型應用場景可以用于解決線上嚴重問題時的緊急發版問題或者試驗細微的體驗優化,目前手機淘寶在這些場景下都有使用,也在拓展更多的使用場景。感興趣的可以看下github首頁上的sample例程。

infoq:當初是為何決定将這個項目開源出來,能介紹下你們部門對于開源的态度嗎?

白衣:dexposed項目最開始就是受android開源項目xposed的啟發,做了創新性的改造,使之适用于單個application的情況,進而使用戶端app具備實時動态改變方法的能力,高效解決了用戶端app釋出後碰到嚴重線上問題時的緊急發版問題,讓app開發沒有後顧之憂。飲水思源,是以希望将該技術開源出去,回饋開源社群,取dexposed的項目名,既有向原始開源項目緻敬之意,也有将android的dex方法暴露出來之意。至于開源的态度,我們認為開源是大的趨勢,在某些方面開源軟體已經主導創新,開源無處不在。我們相信,開源會走得越來越快,而且今天任何一家公司,你不可能繞過開源技術而閉門造車。是以我們決定開源,并得到了公司的肯定和大力支援,是以說這件事也展現了阿裡積極擁抱開源社群的态度。

infoq:我看到這個項目在去年archsummit上已經預告要開源,但直到現在才開源出來,這期間有什麼故事嗎?

白衣:這裡面主要有兩點,第一是想将dexposed更加完善一些(支援art-android新的java runtime)再開源,但是在研究art上遇到了很多困難,這裡耽擱了比較久的時間,到目前為止對art的支援也隻是初步的beta階段,是以希望大家能一起努力交流,攻克這個難關。第二是阿裡對外開源的項目也比較多,對内部技術的對外纰漏、方案開源的審查和把關上也需要一些時間。

infoq:這個開源項目的階段性目标是什麼?

白衣:現階段的目标就是實作對art的支援。不過後續還有很多有意思的feature在計劃中。大家可以看我們的roadmap,也歡迎大家提供更多想法。

國外在移動開發開源方面非常踴躍,一些大公司如facebook、github、square等都貢獻了很多項目,但在國内還很少有公司有這個意識,甚至有些公司不遵守開源協定。希望阿裡的行為能夠帶動更多的公司從公司層面進行移動開發開源方面的活動,讓移動開發領域能夠出現更多國人項目的身影。

繼續閱讀