JDK库而不是Android SDK库

JDK库而不是Android SDK库,android,android-7.0-nougat,Android,Android 7.0 Nougat,我使用Android studio作为我的Android代码库,我的代码使用ZipInputStream.java,这是由Android SDK和JDK提供的。不管是SDK还是JDK的哪个版本 奇怪的是,当我在Android-M和更低版本的设备和模拟器上运行我的apk时,上面提到的类的版本来自SDK,但在Android N emulator上,同时使用相同的apk,ZipInputStream.java来自JDK 如何强制Android N默认使用SDK中的类而不是JDK中的类 请注意,我尝试过

我使用Android studio作为我的Android代码库,我的代码使用
ZipInputStream.java
,这是由Android SDK和JDK提供的。不管是SDK还是JDK的哪个版本

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

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

请注意,我尝试过使用API23和24作为目标和编译sdk版本构建apk,构建工具和support-v4的版本分别为23.x和24.x。我甚至尝试使用JDK 7和JDK 8。安卓操作系统在选择JDK类而不是SDK类时似乎有一些我可能遗漏的地方。我们将不胜感激。提前谢谢

但是在Android N emulator上,虽然使用相同的apk,ZipInputStream.java来自JDK

设备/仿真器始终使用设备/仿真器上的
ZipInputStream
实现。设备/仿真器上没有Java源代码

现在,Android 7.0/N从最初的基于Apache Harmony的版本中转移了很多
java.*
javax.*
类。我不知道ZipInputStream是否改变了

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

你没有。框架类的实现,包括
java.*
javax.*
类,来自设备/模拟器,而不是您的应用程序


总的来说,从Harmony到OpenJDK的迁移。如果您遇到兼容性问题,其中
ZipInputStream
的行为不再像以前那样,请创建一个可复制的测试用例,并且。

上述类的版本来自SDK no。。。若在设备/仿真器上运行应用程序,它将使用设备/仿真器运行库中的ZipInputStream实现。。。还有,您是如何“检查”它的?我通过在文件的两个版本中放置断点来确认。此外,对于Android-N,它的行为与JDK版本的文件所期望的完全相同。谢谢。非常详细的回答。不知道投票反对我的问题的人是否知道这一点。如果他们知道的话,他们会评论的。再次感谢。