是否可以使用JDK(1.7)中的类代替Android SDK(ADK,API 23)?
我需要使用的类在JDK(1.7)的Android SDK(API 23)和中存在。默认情况下,使用ADK中的类。但是我想使用JDK中的类。
在我的情况下,我想使用JDK和ADK中DatatypeFactory.newInstance(factoryClassName, classLoader)
包中的javax.xml.datatype
。
由于实现上的差异,我想使用JDK中的类而不是ADK。
如何使用JDK中的类而不是ADK中的类?
最佳答案
你不能这样做。无论如何,不能简单地通过切换导入语句。
您在Android上作为其目标平台运行的代码将无法访问Java SDK类,因此该代码将无法加载类,或者将使用完全相同的完全限定名称加载类的Android版本(您的情况) 。
如果要使用Java SDK中的特定实现,则必须使其在目标平台上可用。
您有2个选项,但都不是很好:将Java SDK用作库
通过将rt.jar
(〜50MB)引入您的项目。但是,这将带来许多潜在的问题,因为Android SDK和Java SDK会镜像某些包和类,并且最终可能会加载错误的版本。
或将来源带入
第二种选择-稍微好一点-是将该类的源带入您的项目中,前提是所有类的依赖项都可以由Android SDK满足,或者也可以作为源引入。这将是痛苦的...
正确的解决方案是
拥抱生态系统
我不知道您的具体要求是什么,但是我敢打赌,Android对此类的实现与Java非常接近。如果您无法通过使用Android SDK来实现某些目标,请尝试在此处询问该特定问题,或者搜索可以实现所需功能的第三方库。也许解决方案比您想像的要容易。