我意识到这是不可能的,因为Android没有JVM但是有解决这个问题的方法吗?我需要为Android应用程序执行字节代码注入操作。有什么建议吗?
答案 0 :(得分:3)
您无法直接将字节码注入已加载的类/方法中。但是,您可以动态创建新类,将它们写入dex文件,然后动态加载它们
有关从磁盘上的dex文件动态加载类的详细信息,请参阅this blog帖子。
为了动态创建新的dex文件,您可以考虑使用属于dexlib component代码库的smali/baksmali,这是一个用于读取/写入dex文件的通用库。< / p>
或者,您可以在应用程序中包含smali并以smali汇编格式生成类,并直接使用smali将它们组合成新的dex文件。
答案 1 :(得分:3)
Android中可以进行代码注入,请查看Github上托管的Disabler项目。
Disabler允许使用代码注入现有项目来动态优化,跟踪和修改Android项目。代码是动态注入的,无需修改旧功能即可添加日志记录/分析或禁用部分流程。
该工具的主要功能:
在幕后,它使用 AspectJ 和 Eclipse 构建机制( javac 替换为 ajc )< / p>
答案 2 :(得分:0)
您想在运行时或编译时注入吗?
编译时 - 有几个非常成熟的解决方案来操作java源代码/字节码 - ASM,java-assist等
专门针对Android,请尝试ASMDEX