在Android App開發中實現任意Java方法的攔截

來源:互聯網
上載者:User

標籤:android   blog   http   ar   os   java   art   問題   log   

在Android的App開發過程中,經常會有一些導致App進程崩潰的Framework層Bug,比如這裡講的Cookie同步引起的崩潰等問題。這種情況下,我們如果能攔截到Framework層的Api調用,對它做個封裝把異常捕捉住,就可以避免這個問題了。
當時,純Java層是做不到的,而Java中的Proxy機制也只能針對自己定義的類,系統Framework層的類就不管用了。這裡面說一種通過借鑒Java的JNI機制來實現進程類任意Java方法攔截。
任何一個Java方法在C++層都對應一個Method類,如果是JNI方法的話,Method類的成員變數nativeFunc指向的就是JNI的Native實現,如果不是JNI方法,則指向Java方法實現,並調用dvmInterpret執行該Java方法。利用這種機制,我們就可以實現方法攔截了。假設我們有一個Java層方法Java_Method需要Hook,我們就把Hook方法Java_Method_Hook提供給Java_Method的C層Method,放放到其成員變數ins中。接下來再定義一個C層方法C_hookHandler,把這個方法賦給Method的nativeFunc成員變數,然後,當C_hookHandler被調用時,就可以通過調用ins成員變數中的Java_Method_Hook來做到對Java_Method攔截了。


更加詳細和系統化的流程,可以參考下面這篇文章,或者Xposed原始碼。
http://blog.csdn.net/luoshengyang/article/details/8914953
Xposed最大的不同是通過替換app_process來實現了對其它進程的Hack,就可以把方法攔截適用到任意進程了。

在Android App開發中實現任意Java方法的攔截

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.