2011-11-22 81 views
2

我意識到這是不可能的,因爲Android沒有JVM,但有沒有解決這個問題?我需要爲Android應用程序執行字節碼注入操作。有什麼建議麼?Android上的Java字節碼注入

+0

你檢查這[線程](http://stackoverflow.com/questions/230193/what-c​​an-you-not-do-on-the-dalvik-vm-androids-vm-that-you-can-in-sun-vm )? – bacchus

+0

而[This one](http://groups.google.com/group/android-platform/browse_thread/thread/21549d6f3228eb50)。 –

回答

3

您不能直接將字節碼注入已加載的類/方法中。但是,您可以動態創建新類,將它們寫入dex文件,然後動態加載它們

請參閱this blog有關從磁盤上的dex文件動態加載類的更多信息。

爲了動態地創建一個新的dex文件,您可以參考smali/baksmali codebase的一部分dexlib component,該代碼庫是讀取/寫入dex文件的通用庫。

或者,您可以在您的應用程序中包含smali,並以smali彙編格式生成您的類並直接使用smali將它們彙編到一個新的dex文件中。

3

代碼注入可能在Android中,請看看Github上託管的Disabler項目。

Disabler允許使用代碼注入現有項目來實時優化,跟蹤和修改Android項目。代碼是即時注入的,不需要修改舊功能來添加日誌記錄/分析或禁用部分流。

工具的主要功能:

  1. 跡:進/出向/從方法,收集參數和退出值)
  2. 輪廓:測量頻率和方法的持續時間調用
  3. 禁用:通過覆蓋用戶定義的方法的返回值來禁用/跳過部分程序流程
  4. 延遲:在代碼的某些部分中引入延遲(即某些程序包)

引擎蓋下,它使用AspectJ的Eclipse的構建機制(javac的AJC代替)

+0

@Hi,我該如何使用這個項目?你有任何託管的例子嗎? –

+0

是的,看看這裏:https://github.com/miktam/Disabler/blob/master/src/com/devoxx/disabler/DisablerActivity。java另外,看看這個演講 - 這裏有很多例子:http://www.devoxx.com/display/DV12/Code+injection+in++Android –

+0

嗨,但是你是否支持飛行代碼爲dex格式的android應用程序注入?我的意思是沒有源代碼的應用。例如,我正在運行一個應用程序,並試圖注入我自己的類用於測試目的? –