android上的Java字节码注入

时间:2011-11-22 02:25:47

标签: java android jvm dalvik

我意识到这是不可能的,因为Android没有JVM但是有解决这个问题的方法吗?我需要为Android应用程序执行字节代码注入操作。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您无法直接将字节码注入已加载的类/方法中。但是,您可以动态创建新类,将它们写入dex文件,然后动态加载它们

有关从磁盘上的dex文件动态加载类的详细信息,请参阅this blog帖子。

为了动态创建新的dex文件,您可以考虑使用属于dexlib component代码库的smali/baksmali,这是一个用于读取/写入dex文件的通用库。< / p>

或者,您可以在应用程序中包含smali并以smali汇编格式生成类,并直接使用smali将它们组合成新的dex文件。

答案 1 :(得分:3)

Android中可以进行代码注入,请查看Github上托管的Disabler项目。

Disabler允许使用代码注入现有项目来动态优化,跟踪和修改Android项目。代码是动态注入的,无需修改旧功能即可添加日志记录/分析或禁用部分流程。

该工具的主要功能:

  1. trace:进入/退出方法,收集参数和退出值)
  2. profile:测量方法调用的频率和持续时间
  3. disable:通过覆盖用户定义的方法返回值来禁用/跳过部分程序流程
  4. 延迟:在代码的某些部分引入延迟(即对于某些包)
  5. 在幕后,它使用 AspectJ Eclipse 构建机制( javac 替换为 ajc )< / p>

答案 2 :(得分:0)

您想在运行时或编译时注入吗?

编译时 - 有几个非常成熟的解决方案来操作java源代码/字节码 - ASM,java-assist等

专门针对Android,请尝试ASMDEX

http://asm.ow2.org/doc/tutorial-asmdex.html