我意識到這是不可能的,因爲Android沒有JVM,但有沒有解決這個問題?我需要爲Android應用程序執行字節碼注入操作。有什麼建議麼?Android上的Java字節碼注入
回答
您不能直接將字節碼注入已加載的類/方法中。但是,您可以動態創建新類,將它們寫入dex文件,然後動態加載它們
請參閱this blog有關從磁盤上的dex文件動態加載類的更多信息。
爲了動態地創建一個新的dex文件,您可以參考smali/baksmali codebase的一部分dexlib component,該代碼庫是讀取/寫入dex文件的通用庫。
或者,您可以在您的應用程序中包含smali,並以smali彙編格式生成您的類並直接使用smali將它們彙編到一個新的dex文件中。
代碼注入可能在Android中,請看看Github上託管的Disabler項目。
Disabler允許使用代碼注入現有項目來實時優化,跟蹤和修改Android項目。代碼是即時注入的,不需要修改舊功能來添加日誌記錄/分析或禁用部分流。
工具的主要功能:
- 跡:進/出向/從方法,收集參數和退出值)
- 輪廓:測量頻率和方法的持續時間調用
- 禁用:通過覆蓋用戶定義的方法的返回值來禁用/跳過部分程序流程
- 延遲:在代碼的某些部分中引入延遲(即某些程序包)
引擎蓋下,它使用AspectJ的和Eclipse的構建機制(javac的由AJC代替)
@Hi,我該如何使用這個項目?你有任何託管的例子嗎? –
是的,看看這裏:https://github.com/miktam/Disabler/blob/master/src/com/devoxx/disabler/DisablerActivity。java另外,看看這個演講 - 這裏有很多例子:http://www.devoxx.com/display/DV12/Code+injection+in++Android –
嗨,但是你是否支持飛行代碼爲dex格式的android應用程序注入?我的意思是沒有源代碼的應用。例如,我正在運行一個應用程序,並試圖注入我自己的類用於測試目的? –
你想在運行時注入或編譯時?
對於編譯時 - 有操縱Java源代碼/字節碼幾個非常成熟的解決方案 - ASM,Java的幫助,等
專爲Android,嘗試ASMDEX
- 1. Java字節碼注入
- 2. 什麼是Java字節碼注入?
- 3. As3 swf字節碼注入
- 4. 字節碼注入後java.lang.VerifyError
- 5. 在Android上獲取Java字節碼
- 6. 爲了有害的目的在XML中注入Java字節碼
- 7. 字節碼注入可能有用嗎?
- 8. Java字節碼
- 9. Android代碼注入
- 10. Java字節碼DUP
- 11. Java字節碼庫
- 12. 如何在java中表示java註釋字節碼
- 13. php空字節注入?
- 14. 類Java的字節碼
- 15. java中的字節碼
- 16. Java註釋的默認值是否編譯爲字節碼?
- 17. 通過註釋的Java字段注入
- 18. Android XPOSED代碼注入
- 19. Java源代碼的字節碼
- 20. jar文件中的字節碼注入對策
- 21. java字節碼類定義
- 22. 運行Java字節碼
- 23. 理解Java字節代碼
- 24. 瞭解字節碼java
- 25. Java字節碼invokeinterface指令
- 26. Java字節碼優化
- 27. 優化Java字節碼?
- 28. java字節碼編輯器?
- 29. 跟蹤java字節碼流
- 30. 運行Java字節碼
你檢查這[線程](http://stackoverflow.com/questions/230193/what-can-you-not-do-on-the-dalvik-vm-androids-vm-that-you-can-in-sun-vm )? – bacchus
而[This one](http://groups.google.com/group/android-platform/browse_thread/thread/21549d6f3228eb50)。 –