Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何识别库中不兼容的类? 背景_Android - Fatal编程技术网

Android 如何识别库中不兼容的类? 背景

Android 如何识别库中不兼容的类? 背景,android,Android,在过去的几周里,我一直在疯狂地寻求为AWIPS2-EDEX服务器构建一个基于Eclipse框架的Java客户端开源代码的本机Android客户端 感兴趣的特定回购协议:(及其相关性,) 问题 我最终获得了足够的awips2内核,可以在Android Studio中作为基于Gradle的模块构建(请参阅我的github fork)。在我庆祝我成功构建了它之后,我开始在实际的Android应用程序中使用它。。。然后看到构建失败,因为awips2内核依赖于JAXB,而JAXB在其他地方被详尽地记录为与

在过去的几周里,我一直在疯狂地寻求为AWIPS2-EDEX服务器构建一个基于Eclipse框架的Java客户端开源代码的本机Android客户端

感兴趣的特定回购协议:(及其相关性,)

问题 我最终获得了足够的awips2内核,可以在Android Studio中作为基于Gradle的模块构建(请参阅我的github fork)。在我庆祝我成功构建了它之后,我开始在实际的Android应用程序中使用它。。。然后看到构建失败,因为awips2内核依赖于JAXB,而JAXB在其他地方被详尽地记录为与Android(*)根本不兼容

我现在正试图消除模块对JAXB的依赖,但这让我想到。。。还有多少未爆炸的地雷在密码里等着我被绊倒。。。那些可以像“纯Java”一样编译的东西,但是一旦Android特定的东西引用它们就会爆炸

是否有任何工具可以浏览library.jar文件,并识别其中任何Android无法满足的依赖项?

更新:我试图直接在Android上使用awips2内核的项目已经失败。经过进一步调查,awips2内核广泛使用ApacheCamel的影响逐渐显现,我意识到,试图通过Android直接使用awips2内核的当前形式是没有希望的。据我所知,Camel在运行时动态构建和编译自己的类。。。这在Android下是完全不可能的,但“常规”Java允许

这并不意味着我已经放弃了编写Android awips2 EDEX客户端的目标,但看来我重用awips2内核中的现有代码为EDEX编写Android客户端的目标已经失败了&我将不得不从头开始编写自己的Android EDEX客户端


(*)“基本上不兼容”,我的意思是没有已知的方法来构建它,使它能够使用为Android构建的通用Java代码与未修改的JAXB一起工作。这至少是由于两个问题造成的:

  • 命名空间问题。想一想:弹跳城堡vs海绵城堡。显然,Android出于自己的目的劫持了JAXB的一些名称空间,Dalvik/ART的类加载器不允许您使用相同名称空间用自己的代码覆盖它

  • 对Dalvik/ART自省能力的限制。基本上,“真正的”Java具有与Dalvik/ART不支持的注释相关的运行时内省功能。。。JAXB的一些功能依赖于它


  • 据我所知,在过去7年中,许多人在1到2年内找到了部分解决方案,但这两种方法的共同作用最终导致所有试图找到解决方案的人要么认输,要么将问题视为棘手和无望,或者破解它,使它能为他们最初需要的任何东西工作&到此为止。

    “有什么工具吗”——从技术上讲,这与堆栈溢出无关。如果你需要清单上列出的一切,我怀疑你完蛋了。我不希望很多
    javax
    依赖项都能正常工作,你可能需要稍微修改一下才能获得
    org.apache.http
    来使用Android兼容库,Hibernate不太可能正常工作,等等。@commonware,我甚至没有想到Hibernate,这验证了我最初对挖掘更多贪得无厌的运行时依赖关系的担忧。AFAIK,awips2核心包含客户端(“viz”)、服务器(“edex”)、两者(“通用”)和上帝知道还有什么(“功能”)使用的库。我希望我目前的需求(一个能够从EDEX服务器查询和检索数据的Android客户端)只需要“公共”树中的类,并且这些类中没有一个具有javax或Hibernate依赖关系(尽管仍然需要检查)。@Commonware(续)——真正悲惨的事情是,我知道awips2的开发人员会竭尽全力避免这种依赖关系(awips2的精神前身NetCDF Java经过多年的重构才最终被Android直接使用)。不管怎样,它们都发生了,这一事实证明,如果Android兼容性从第一天起就不是一个明确的(经过测试的)目标,那么偶然引入它们是多么容易-(@commonware——呃,我想我刚刚遇到了最后一道也是最难以逾越的砖墙。除非我完全忽略了一些显而易见的事情,或者自2012年以来Android发生了根本性的变化,否则Apache Camel似乎是安卓棺材awips2中的最后一颗钉子。我看到了你7岁时对Camel和一个droid在另一篇帖子中说,从那以后似乎没有什么有意义的改变。据我所知,awips2广泛地、几乎无处不在地、几乎无所不包地使用Apache Camel。我对awips2一无所知,也不知道它的协议记录得有多好,等等。因此,我不知道洁净室客户端实现有多困难。一般来说,让非Android Java代码在Android上运行取决于规模:项目越大(代码+依赖项),Android拦截器出现的可能性就越大。这就是为什么较小的库要么“刚刚工作”,要么可以移植(例如Guava的
    EventBus
    )“有工具吗?”--从技术上讲,这与堆栈溢出无关。如果您需要中列出的所有内容,我怀疑您是完蛋了。我不希望许多
    javax
    依赖项都能正常工作,您可能需要对
    org.apache.http
    进行一些黑客攻击才能使用与Android兼容的库,Hibernate不太可能正常工作,等等我甚至没有想过Hibernate,它验证了我最初对挖掘更多无法满足的运行时依赖关系的担忧