2016-08-23 55 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