一般问题:是否可以使用ClassLoader来替换预加载的(由系统,例如在Android的%Android%/frameworks/base/ploaded classes文件中找到的(类?
具体:在我的应用程序中创建WebView之前,我正试图使用DexClassLoader来替换android.net.*中的一个类。我可以得到一个Class对象,但是getMethods((为我提供了一个数组,这是我在未修改/原始类实现中所期望的。这是由于预加载的类系统吗?
基本设置&伪代码:
- 修改android.net.*类,添加一些测试方法等
- 编译并以classes.dex结束
- jar cf mytest.jar classes.dex
- 在APK资产中包含mytest.jar
- 创建DexClassLoader并通过loadClass((获取Class
- Class对象上的getMethods((返回一个数组,我希望在没有修改的情况下在#1中看到它
如果需要,我可以提供更多关于我正在使用的设置和代码的详细信息。
不,你不能。WebView是引导类路径的一部分,因此也是基类加载程序的一部分。您无法使它使用另一个类加载器中的类。事实上,在你的应用程序启动之前(作为合子预初始化过程的一部分(,它已经被加载并链接到它使用的类。