【发布时间】:2015-10-12 12:55:17
【问题描述】:
使用javaassist 等API 执行字节码操作,在编译后修改类文件。但是,如果java代码被优化了,是不是就不能在错误的地方进行修改呢?有没有办法避免这个问题?普通 Java 和 Android 之间的故事有什么不同吗?
【问题讨论】:
-
字节码从未优化过,至少在重要方面没有优化。
-
我没有完全理解你的意思。你的意思是javac从.java到.class的转换不需要太多优化?
-
是的,在该步骤中几乎没有进行任何优化。它主要是一个简单的翻译。实际上,优化字节码的尝试可能会破坏 JIT 编译器的优化并导致代码变慢。
-
你的意思是混淆工具(比如 ProGuard)?
-
而且,回答你的标题问题,字节码操作是不安全的,你总是可以产生无效的字节码,并可能导致 JVM 在加载(或执行)期间崩溃。
标签: java android java-bytecode-asm javassist bytecode-manipulation