其实算是一个比较诡异的需求,但是 leader 交代的,没办法。
有一个普通的 jar 文件(无源码),要求在 Android 上运行,由于这个 jar 有部分方法调用在 Android 上不存在,因此我新建了一个 Android 工程,将这个 jar 作为依赖项引用到项目中。
我在项目中写了该 jar 需要调用的一些方法,转换成了 Android 中存在的操作。随后编译,lint 不通过,当时没注意,随后忽略 lint 报告,直接打包,丢到设备上运行。
设备上程序闪退,通过 logcat 发现,抛出了NoSuchMethodException
,位置就在 jar 中调用 Android 中不存在的方法(该方法已经由我在项目中提供了)。随后查看之前的 lint 报告,说 jar 文件中引用的包不存在(即 Android 中不存在,但是已经在我项目中,我重写的)
所以说,第三方 jar 作为 classpath,是不可以使用主程序的代码?但是将程序打包后,第三方 jar 与主程序位于同样的 classpath 下,由同一个 Classloader 加载( Android 中即 PathDexClassLoader ),按理说,不应该出现这样的情况呀。
所以这种情况下,我可以如何做呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.