7

我是 java 新手,我需要出于某些目的来操作 java 字节码(请参阅this)。Java 字节码操作需要以下导入:

  1. org.objectweb.asm
  2. java.lang.instrument

我通过从asm 网站下载 ASM 包解决了 org.objectweb.asm ,相关导入已解决。
我不知道如何解决 java.lang.instrument,我的默认 ADT 包没有:

在此处输入图像描述

如何解决此导入?我应该下载任何库吗?从哪里?
任何帮助,将不胜感激。
谢谢。

4

4 回答 4

5

java.lang.instrument软件包不适用于 Android。就像 AWT 和 Swing 一样。看看这个问题:

Android & Dalvik - 获取对象的大小

但这是有道理的。Android 应用程序是在源代码级别用 Java 编写的,但它们不在 JVM 上运行——它们在 dalvik VM 上运行。那里没有规定他们必须支持标准 Java 库的合同。

对不起 :(

于 2013-11-06T06:13:29.553 回答
3

你不走运——找到一种不依赖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

于 2013-11-06T06:12:58.790 回答
0

Javassist是另一种操作 java 字节码的工具。已经有人尝试在 android 中使用 javassist。您可能想尝试一下。据我所知,除了仪器(通常用于测试)之外,在 android 运行时上进行字节码操作是不可能的。编译时间的操作是另一回事,因为在转换为 Dalvik 字节码之前首先生成了 java .class 文件。因此,如果您在 dexed 之前修改 .class 文件,则 dexed 类将是修改后的类。

这篇文章也值得一读,因为它注意到ASMDEX声称可以操纵 DEX 字节码。

于 2014-02-02T15:07:09.117 回答
0

java.lang.instrument包裹已被移除。所以你不能在运行时执行字节码操作。但是,您可以在构建时使用 javaassist 或 ASM 执行字节码操作。

示例项目执行字节码操作。它的用法在这里讨论。

于 2015-07-29T16:48:44.643 回答