我意識到這是不可能的,因爲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. 爲了有害的目的在XML中注入Java字節碼
- 5. Android代碼注入
- 6. Java字節碼庫
- 7. 類Java的字節碼
- 8. Android XPOSED代碼注入
- 9. Java源代碼的字節碼
- 10. 理解Java字節代碼
- 11. java字節碼編輯器?
- 12. Java字節碼生成
- 13. Java字節碼invokeinterface指令
- 14. 是否可以將LLVM字節碼轉換爲Java字節碼?
- 15. 直接插入字節碼
- 16. 插入字節碼用ASM
- 17. Java/Android:通過套接字讀取/寫入字節數組
- 18. 帶有ASM的Java字節碼檢測:INVOKESPECIAL指令處的代碼注入驗證錯誤
- 19. 固有/字節碼註解安全
- 20. Java的虛擬機的字節碼
- 21. 如何在android/java中的文件中間寫入字節
- 22. Spring:在ArrayList中注入字節數組
- 23. Java字節代碼:與字節夥伴的定製setter/getter
- 24. 合併java/android中的兩個字節
- 25. 不完整的Java字節碼
- 26. Java字節碼的不同行爲
- 27. JavaScript中的Java字節碼編譯器
- 28. java中的多字節編碼
- 29. Java:來自字節碼的新實例
- 30. Java Collections API上的依賴注入
你檢查這[線程](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)。 –