- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在构建一个基于 Android 的系统,该系统需要通过二进制协议(protocol)发送数据。我预计会有多个版本的多个协议(protocol)以及维护它们所带来的噩梦。
我突然想到,通过使用 Java 的二进制兼容性,我或许能够回避大部分版本控制问题。
假设应用程序 A
依赖于库 L
。 L
包含一个类C
,在A
中使用,它实现了接口(interface)I
。我构建了 L
和 A
,定义了 I(0)
接口(interface) I
。我在设备上安装了 L(0)
和 A(0)
。 A(0)
动态绑定(bind)提供类 C(0)
的 L(0)
。
现在,我扩展了接口(interface) I
,例如添加了两个新方法。当我尝试编译 L
时,编译失败,因为 C
没有实现新方法。我通过扩展 C
修复了 L
,因此它实现了两个新方法。我现在针对 I(1)
编译 L(1)
并将其安装在设备上。
请注意,此时,A
不会针对I(1)
进行编译。尽管如此,如果这是 Java,A(0)
将使用 L(1)
中的 C(1)
正确地绑定(bind)和运行>.
对于 Java 的实现,JLS 第 13 章二进制兼容性保证了这种行为(以及更多)。如果它适用于 DEX 和 Dalvik,那么我可以让一大类协议(protocol)更改对他们的客户完全不可见。
那么,问题是,DEX 和 Dalvik 是否遵守 JLS 二进制兼容性规范?如果没有,是否有指定 DEX/Dalvik 二进制兼容性的文档?
最佳答案
我不能权威地谈论 Dalvik VM(或相关运行时,如 ART)的当前发布版本,但作为 .dex
格式的设计者,我可以 说出 Intent :
我不会声称我严格遵守 .dex
格式设计中的任何规范。我要说的是,我希望这种格式成为一种合适的容器,用于表示最初用 Java 编程语言编写的程序,包括对独立代码编译和演化环境中的跨代码兼容性的关注。
就是说(正如我暗示的那样)这是一个 super 容易出错的实现领域,并且在实践中经常会在很长一段时间内未被发现的问题正是因为如此很少有程序实际上取决于您感兴趣的保证类型。
因此,我的 Intent 可能并不重要,重要的是世界上的 VM 实际做了什么。我强烈建议在野外的几个不同 VM 上显式测试各种交叉链接和升级方案。根据您设计中的此功能,您可能会发现结果不尽如人意。
关于java - DEX 和 Dalvik 是否支持 Java 二进制兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37057902/
Error:Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files defi
我试图在 avd 中运行我的应用程序,但是当我选择运行 gradle 时出现异常: Error:Error converting bytecode to dex: Cause: com.android
当我提取一个文件 aab 时出现这个错误: Invalid dex file indices, expecting file 'classes٢.dex' but found 'classes2.de
我有一个 ionic 项目。它已成功构建并在我的 android 手机中运行。突然有一天,当我运行命令“ionic cordova run android”时,我得到如下构建错误: Dex: Erro
这个问题在这里已经有了答案: Unable to execute dex: Multiple dex files define (31 个回答) 4年前关闭。 我更新了 android studio
从过去 3 天开始,我遇到了这个错误,并且已经尽了我所能。任何人都可以帮我纠正它。我正在使用 Android 3.0,我的 sdk 和 Google Play 服务已更新,并且我已将 multiDex
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.nnroh.debtmanager, PI
好的,现在我真的被困在这里了。我不知道该做什么,去哪里或任何事情! 我一直在尝试卸载、重新安装 SDK 和 Eclipse 版本,尝试用谷歌搜索出来,但是 nu-uh... 什么都没有!!! 我可以在
怎么了?为什么我有这个问题? Unable to execute dex: Multiple dex files define Lcom/nineoldandroids/animation/Anima
我尝试运行我的 android 应用程序,但出现此错误。 [2014-03-11 11:21:34 - Dex Loader] Unable to execute dex: Multiple dex
我希望指定包中的所有类都驻留在主 dex 文件中。 那里有使用通配符的选项吗? 最佳答案 很遗憾,不支持通配符。 但是,您可以使用 this script 生成 main-dex-list 文件。 .
我目前有一个来自霍尼韦尔的 DEX BLE-1 适配器,用于从自动售货机检索 dex 数据。我有一个 swift 3 iOS 应用程序,它使用 CoreBluetooth 进行扫描并与外围设备配对。该
我正在使用 IntelliJ IDEA 12.1.4,在我的项目中我使用了几个库/项目: ActionBarSherlock ViewPagerIndicator Volley ProgressShe
我在尝试运行我的项目时遇到了这个问题 - com.android.builder.dexing.DexArchiveBuilderException: Failed to process .gradl
我一直在四处寻找,有很多帖子与这个问题有关,但似乎没有确定的解决方案(例如 Error when building apk - "Multiple dex files define Lcom/goog
我正在对 Jan Berkel 的 SBT Android 插件进行一些黑客攻击,我在想是否有一种方法可以将多个 .dex 文件合并到一个 .dex 文件中包含所有这些。 例如,如果我有这个: cla
我在尝试运行我的应用程序时遇到了这些问题,但不知道如何解决... 谁能帮帮我 这是错误: [2014-04-18 18:47:35 - Dex Loader] Unable to execute de
这个问题在这里已经有了答案: Android support multidex library implementation (4 个回答) 4年前关闭。 生成签名的apk时,有这个错误,但构建项目是
我有一个 Android 应用程序,(理论上)它可以变成一个库并放入外部应用程序中。然后外部应用程序可以创建一个包含我的应用程序的选项卡。库应用程序的设置方式与 google-play-service
我正在开发一个 android 应用程序并且 gradle 构建工作正常但是现在当我构建我的 android 项目时,gradle 构建失败并显示以下错误 Error converting bytec
我是一名优秀的程序员,十分优秀!