我正在寻找一种方法来覆盖我的Android项目中的Class.getResourceAsStream(String path)调用,该项目是一个J2ME到Android代码桥,必须启用代码移植而不做任何更改,所以如果原生j2me代码是调用getResourceAsStream(String path)我需要拦截调用并修改路径以附加正确的android文件夹结构。
任何想法如何实现?
答案 0 :(得分:1)
我认为端口会比听起来更困难,getResourceAsStream()
是问题的一个无关紧要的部分。也许更简单的策略可能是从现有应用程序中提取库并在移植的应用程序中使用该库。
无论如何,关于原始问题。 Class.getResourceAsStream
委托加载ClassLoader
,因此如果您自己编写ClassLoader
,则可以调整路径。
使用您自己的ClassLoader
意味着您的应用程序将具有两个类层次结构,这反过来将使它们无法通信而不依赖于共享加载程序加载的某些API类型。我从来没有在Android上试过这个,但作为一个思考练习,你应该让Android系统加载你的API,并将主应用程序加载器设置为你自己的父(这是Servlet世界中发生的事情),最后使用你的自己加载需要路径调整的类(显然你的加载器不会将资源加载委托给它的父级,而不需要根据需要调整路径)