2016-08-23 57 views
-2

我使用Android Studio作为我的Android代码库,我的代码使用ZipInputStream.java,这是由Android SDK和JDK提供的。它与哪个版本的SDK或JDK无关。JDK库而不是Android SDK库

奇怪的是,当我在Android-M和更低版本的设备和模拟器上运行我的apk时,上述类的版本来自SDK,但是在Android N仿真器上,而使用相同的apk,ZipInputStream.java来自JDK。

如何强制Android N默认使用SDK中的类,而不是JDK?

请注意,我已经通过使用api 23和24作为目标和编译sdk版本来构建apk,这两个版本都是构建工具和support-v4的23.x和24.x版本。我甚至尝试过使用JDK 7和8。似乎Android N操作系统中有一些关于如何通过SDK类选择JDK类的问题,我可能会错过。帮助将不胜感激。提前致谢。

+3

*以上提到的类的版本来自SDK * no ...如果您在设备/仿真器上运行应用程序,它使用设备/仿真器的运行时库中的ZipInputStream实现...您是如何“检查”它的? – Selvin

+0

我通过在文件的两个版本中放置断点来确认。另外,对于Android-N,其行为与文件预期的JDK版本完全相同。对于 FoY

回答

1

但在AndroidÑ模拟器,同时使用相同的APK,ZipInputStream.java来自JDK

的装置/仿真器始终使用ZipInputStream实现,它位于该装置/仿真器。设备/仿真器上没有Java源代码。

现在,Android 7.0/N从基于Apache Harmony的原始版本to ones that are based on the OpenJDK中移除了许多java.*javax.*类。我不知道ZipInputStream是否改变。

如何强制Android N默认使用SDK中的类而不是JDK?

你不知道。框架类的实现(包括java.*javax.*类)来自设备/仿真器,而不是您的应用。

整体而言,从Harmony迁移到OpenJDK has been fairly smooth。如果您遇到兼容性问题,其中ZipInputStream不再像以前那样运行,请创建一个可重现的测试用例并file an issue

+0

谢谢。相当详细的答案。不知道投票的人是否知道这一点。如果他们知道他们会评论。再次感谢。 – FoY