JDK 库而不是 Android SDK 库

JDK libs rather than Android SDK libs

我使用 Android studio 作为我的 Android 代码库,我的代码使用 ZipInputStream.java,它由 Android SDK 和 JDK。哪个版本的SDK或JDK都没有关系。

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

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

请注意,我已经通过使用 api 23 和 24 作为目标和编译 sdk 版本,23.x 和 24.x 构建 apk 来尝试此操作构建工具和 support-v4 的版本。我什至尝试同时使用 JDK 7 和 8。似乎 Android N OS 在如何选择 JDK classes 而不是 SDK class是的,我可能会失踪。帮助将不胜感激。提前致谢。

but on Android N emulator, while using the same apk, ZipInputStream.java comes from the JDK

device/emulator 始终使用 device/emulator 上的 ZipInputStream 实现。 device/emulator.

上没有 Java 源代码

现在,Android 7.0/N 从最初的基于 Apache Harmony 的版本 to ones that are based on the OpenJDK 中转移了很多 java.*javax.* 类。不知道ZipInputStream有没有变。

How can I force Android N to use the classes from SDK by default and not JDK?

你不知道。框架 类 的实现,包括 java.*javax.* 类,来自 device/emulator,而不是您的应用。

总体而言,从 Harmony 迁移到 OpenJDK has been fairly smooth. If you are running into compatibility issues, where ZipInputStream no longer behaves as it did, create a reproducible test case and file an issue