运行时在android上的字节码操作

时间:2016-03-24 16:51:40

标签: java android instrumentation

我想知道为什么运行时无法在android上运行字节码操作的原因?是因为目前还没有支持库,或者是因为DEX格式是不能被操纵的东西

2 个答案:

答案 0 :(得分:2)

在运行时,在加载类之后,不能修改该类的定义。对于任何类似JVM的系统都是如此,包括Android的Dalvik。但是,您可以在编译之后修改类,但在之前将修改为APK,我已经为Android应用工具做了大量工作。构建APK后,您无法进行任何更改,因为APK已签名以验证存档的内容。

不要与Objective-C中类似的技术混淆,称为方法调配,它允许您在运行时有效地更改对象定义。 Objective-C运行时是可变的,JVM运行时不是。

如果你想要在加载到Android应用程序之前修改一个外部dex,你也可以这样做,但是再一次,一旦ClassLoader加载了这些类,它们可以&#39 ;修改。

答案 1 :(得分:1)

嗯,有DexClassLoader,它至少可以从apk外部获取类。如何在.jar中创建classes.dex是另一个故事。引用文档:

  

从.jar和.apk加载类的类加载器   包含classes.dex条目的文件。这可以使用   执行未作为应用程序一部分安装的代码。

     

此类加载器需要应用程序私有,   可写目录,用于缓存优化的类。   使用Context.getCodeCacheDir()创建这样的目录