Android 是否可以使用Dexmaker重写现有类中的方法?

Android 是否可以使用Dexmaker重写现有类中的方法?,android,bytecode-manipulation,dex,Android,Bytecode Manipulation,Dex,是否有可能在运行时通过代理或生成代码,从已加载的类更改方法的行为 更新 请注意:我想从我自己的应用程序中添加一个方法/修改现有的方法,而不是从android框架中添加。不,这是不可能的 您可以使用新名称和经过调整的实现创建一个扩展原始类的新类,甚至可能创建该类的副本。但不能替换现有的类 最好的办法可能是将可能要修改的代码提取到一个单独的类中,然后将该类的实例传递给使用它的任何人。然后,如果需要创建新的实现,可以将其子类化并传入子类。否。这是不可能的 您可以使用新名称和经过调整的实现创建一个扩展原

是否有可能在运行时通过代理或生成代码,从已加载的类更改方法的行为

更新


请注意:我想从我自己的应用程序中添加一个方法/修改现有的方法,而不是从android框架中添加。

不,这是不可能的

您可以使用新名称和经过调整的实现创建一个扩展原始类的新类,甚至可能创建该类的副本。但不能替换现有的类


最好的办法可能是将可能要修改的代码提取到一个单独的类中,然后将该类的实例传递给使用它的任何人。然后,如果需要创建新的实现,可以将其子类化并传入子类。

否。这是不可能的

您可以使用新名称和经过调整的实现创建一个扩展原始类的新类,甚至可能创建该类的副本。但不能替换现有的类


最好的办法可能是将可能要修改的代码提取到一个单独的类中,然后将该类的实例传递给使用它的任何人。然后,如果您需要创建一个新的实现,您可以将其子类化,并将子类传递给您。

真正的问题可能是Dalvik是否允许您替换它在使用dex类装入器时已经知道的类。至少在加载apk的过程中,它不会-如果你在你的应用程序中放置重复的平台类,你会在logcat中看到它们被拒绝。@Chris Stratton澄清了我的一些疑问。如果我在运行时创建一个jar文件,其中包含来自我自己应用程序的这样一个重复类,Dalvik会拒绝它吗?或者它会选择“overwrinding”类吗?假设您可以在启动zygote时首先加载您的jar文件,它会拒绝原始类。但这会影响系统上的每个zygote子进程,也就是说,所有应用程序和大部分平台都会受到影响,并且可能会破坏那些仅以dexopt形式发布的应用程序(与原始版本相反)正如更改一个框架类一样,真正的问题可能是Dalvik是否允许您替换一个在使用dex类装入器时已经知道的类。至少在加载apk的过程中,它不会-如果你在你的应用程序中放置重复的平台类,你会在logcat中看到它们被拒绝。@Chris Stratton澄清了我的一些疑问。如果我在运行时创建一个jar文件,其中包含来自我自己应用程序的这样一个重复类,Dalvik会拒绝它吗?或者它会选择“overwrinding”类吗?假设您可以在启动zygote时首先加载您的jar文件,它会拒绝原始类。但这会影响系统上zygote的每个子进程,也就是说,所有应用程序和大部分平台都会受到影响,而且它可能会破坏那些仅以dexopt形式发布的应用程序(与原始版本不同),就像更改框架类一样。有没有一个示例说明如何做到这一点?这似乎很复杂。有没有一个例子说明如何做到这一点?看起来很复杂。