我是 java 新手,我需要出于某些目的来操作 java 字节码(请参阅this)。Java 字节码操作需要以下导入:
- org.objectweb.asm
- java.lang.instrument
我通过从asm 网站下载 ASM 包解决了 org.objectweb.asm ,相关导入已解决。
我不知道如何解决 java.lang.instrument,我的默认 ADT 包没有:
如何解决此导入?我应该下载任何库吗?从哪里?
任何帮助,将不胜感激。
谢谢。
我是 java 新手,我需要出于某些目的来操作 java 字节码(请参阅this)。Java 字节码操作需要以下导入:
我通过从asm 网站下载 ASM 包解决了 org.objectweb.asm ,相关导入已解决。
我不知道如何解决 java.lang.instrument,我的默认 ADT 包没有:
如何解决此导入?我应该下载任何库吗?从哪里?
任何帮助,将不胜感激。
谢谢。
该java.lang.instrument
软件包不适用于 Android。就像 AWT 和 Swing 一样。看看这个问题:
但这是有道理的。Android 应用程序是在源代码级别用 Java 编写的,但它们不在 JVM 上运行——它们在 dalvik VM 上运行。那里没有规定他们必须支持标准 Java 库的合同。
对不起 :(
你不走运——找到一种不依赖java.lang.instrument
. java.lang.instrument
是 Java SE 的一部分,但由于 Dalvik 的基本限制,在 Android 上不可用。
该
java.lang.instrument
软件包已从 dalvik 核心库中删除,因为该软件包基本假设 VM 使用的执行格式是.class file
..class
文件根本不会出现在 Android 上。
https://groups.google.com/forum/#!topic/android-developers/MR4W2roQ3Xw
Javassist是另一种操作 java 字节码的工具。已经有人尝试在 android 中使用 javassist。您可能想尝试一下。据我所知,除了仪器(通常用于测试)之外,在 android 运行时上进行字节码操作是不可能的。编译时间的操作是另一回事,因为在转换为 Dalvik 字节码之前首先生成了 java .class 文件。因此,如果您在 dexed 之前修改 .class 文件,则 dexed 类将是修改后的类。