gpt4 book ai didi

android - 在android上获取类字节码

转载 作者:太空狗 更新时间:2023-10-29 14:10:42 24 4
gpt4 key购买 nike

我想通过网络发送一个类文件 (.class) 以便在远程服务器上执行。我不能使用序列化,因为服务器端不存在该类,我想动态添加新类。我不想使用 RMI。

在 Dekstop Java 上,很容易做到:

  • 加载类Class<?> clazz = Class.forName("mypackage.MyClass") .
  • 使用 URL url = clazz.getResource("MyClass.class") 访问文件(或 jar 容器)

在 Android 上,我用这个 hack 成功加载了一个类实例但是clazz.getResource()总是返回空值。(这是合乎逻辑的,因为 Dalvik 存储格式不同)。

我已经尝试过 Apache BCEL,但它不起作用。以下代码抛出 ClassNotFoundException :

 JavaClass clazz = Repository .lookupClass("mypackage.mMyClass");
byte[] b = clazz.getBytes();

有没有一种方法可以将 Dalvik 字节码转换为 Android 上的常规类字节码,以便我可以从中重建一个 .class 文件,然后通过网络发送它?

谢谢。

最佳答案

Android 不使用 .class 文件。它使用 .dex 文件,这是一种完全不同的格式。 dxdex2jar 等工具大部分时间都可以来回转换,但它并不完美,因为每种格式都有不同的功能,无法完全映射到另一种格式。

无论如何,我认为最简单的做法是在桌面上编译它并将所有 .class 文件作为资源 bundle 在您的 apk 中。实际执行的代码仍然是 classes.dex,但这样您就可以检索存储的类文件并将它们发送到您的服务器。

顺便说一句,将任意类文件发送到服务器执行听起来是一个非常非常糟糕的主意。请不要在您关心的任何计算机上执行此操作。

关于android - 在android上获取类字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com