其实算是一个比较诡异的需求,但是 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 ),按理说,不应该出现这样的情况呀。
所以这种情况下,我可以如何做呢?