我想知道为什么运行时无法在android上运行字节码操作的原因?是因为目前还没有支持库,或者是因为DEX格式是不能被操纵的东西
答案 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()创建这样的目录