leader 提的诡异需求,有一批旧项目,需要在一个 android 项目中使用。 使用场景是在 android 设备中通过网络下载这些 jar (已使用 dx --dex 转换 bytecode ),加载并启动。 但是由于环境的变化导致原项目中一些资源请求不存在,需要重定向。
目前的做法是,在 android 项目中使用自定义 ClassLoader 加载这些 jar,并启动。
目前碰到的问题是由于旧项目中大量的使用了
Class.class.getResourceAsSteam
和this.getClass().getResourceAsStream
方法。
后者由于是通过我自定义的 ClassLoader 加载, 因此调用请求会被委托到我自定义 ClassLoader 的 getResourceAsStream 方法上。没有问题。
问题就在于Class.class.getResourceAsSteam
这样的调用,由于双亲委派,是由 Boot ClassLoader 加载。
因此我无法重定向这些资源请求。
尝试过这些方案:
Field.getDeclaredFields()
方法,也确实没有该属性目前需要的效果是,可以通过各种奇技淫巧(不包括修改旧项目的源代码),重定向这些代码中的类似
String/Class/System.clsss.getResourceAsStream
方法的调用。
感谢各位能够提供解决方法或者思路的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.