- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一台 Pixel-C,我正在为其开发。我的最低 API 级别是 21,这也是 ART 取代 Dalvik 的级别。两种我都试过了:
adb shell setprop dalvik.vm.enableassertions all
adb shell setprop debug.assert 1
而且它们似乎执行成功。我已经放置了
assert false : "assertions are active!";
在我的 onStart 中,我没有在 logcat 中看到任何堆栈跟踪。我希望应用程序在我安装并运行后立即退出。请告诉我如何执行此断言。
请不要提及 JUnit 或其他断言方式,也不要提及任何需要显式抛出错误的解决方案。生产代码不应该抛出错误,也不应该 try catch 和处理它们。这就是为什么将断言添加到语言中的原因,以便在测试环境中违反不变量时有一种方法导致应用程序崩溃,而不会在生产中产生任何开销或风险。
这个 6 年前的问题基本上是一样的,但是对于 Dalvik(IE 已过时),解决方案要么不起作用要么不好: Can I use assert on Android devices?
最佳答案
我不情愿地认为答案似乎是:您不能在 ART 上启用断言。有效的方法是用包裹在 if 语句中的显式抛出的 AssertionError 替换所有断言,如下所示:
if (BuildConfig.DEBUG) {
if (writeBuffer.hasRemaining()) {
// As with all assertions, this condition should never be met.
throw new AssertionError("whole buffer not written");
}
}
显然,在 API 级别 21、22 和 23 中,如果在安装时从非调试构建 block (即 BuildConfig.DEBUG == false),ART 实际上将完全删除字节码。在这些 API 级别,ART 在安装时将字节码编译为 native ,但 Android N 正在发生变化。因此我推断,在 Android N 上,ART 在检查 BuildConfig.DEBUG 的生产过程中可能仍然会看到可忽略不计的性能损失,直到优化器可能对其进行编译在发生一定数量的使用后退出。
我不喜欢这个,因为它删除了选择为 apk 中的特定包运行断言的能力。现在的选择是在整个构建的粒度上,而且只在构建时。
这很糟糕的另一个主要原因是它冗长且丑陋。断言的简洁性使其非常适合内联记录代码。尽管这些乱七八糟的断言可以作为文档,但它们不再威严和清晰。看看那个例子。那应该是一行,而不是五行。
如果您知道为什么 ART 似乎不支持断言,例如关于技术障碍或 Google 内部政治的内部知识,请发表评论或留下新答案。我的假设是,对断言的用途和作用的广泛误解,以及反模式使用的盛行,导致 Android 团队只是禁用该功能,而不是对每个人进行教育。也许 Android 团队也有同样的问题 misunderstandings .
关于java - 如何在 Android 运行时 (ART) 上启用语言级断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997703/
我是 React-native 的新手。 我遇到了这个错误:UnableToResolveError:无法从 Libraries/ART/ReactNativeART.js 解析模块 merge 我使
自 Android Lollipop 以来,Google 已将 DVM 替换为 ART,因为 ART 比 DVM 更快。还有其他原因吗? 最佳答案 ART 带来了一些主要的性能改进,这是 Dalvik
在具有目标 SDK 29 的 Android 应用程序上从 5.11.0 更新到 Facebook Audience 6.2.0 后,我在一小部分 Android 11 设备上看到了大量的崩溃报告。根
我正在尝试将 Android Lollipop 移植到 arndale 板上,但我面临以下有关 ART 崩溃 (AndroidRunTime) 的问题。 > I/art ( 2264): Reloca
我正在使用 newLisp 试用 Artful Mysql 模块,使用示例的“冒烟”测试未连接到 MySQL。 假设: 我是一名新手 Lisp 程序员。 平台是 MacOS X 10.9 新语言 10
Android 5.0+ 中 ART 运行时的一个被吹捧的功能是堆压缩,以减少堆 fragment 。 fragment 堆可以更容易地获得 OutOfMemoryErrors,因为可能没有一个连续的
我正在研究 ARKit(iPhone 框架),ARKit 项目免费提供的文件夹之一是标题为:art.scnassets 的文件夹。 .这些代表什么:art. ? .scn ? .dea ? tex ?
我目前正在使用 React Native ART 模块,除 Text 组件外一切正常,但该错误仅发生在 iOS 和 android 中 一切似乎都按预期工作。 当我尝试在 iOS 中使用 Text 组
对于那些熟悉“Prolog 的艺术”的人,您会建议使用哪些软件工具(例如 IDE、编辑器、编译器等)来学习这本书? 最佳答案 SWI-Prolog是一个免费的 Prolog 实现,带有一个集成编辑器(
我要为 Android 开发我的第一个应用程序(不用担心这只是一个学校项目,不会成为市场上另一个无用的应用程序:>)。 因此,在开始这项任务之前,我做了一些教程,其中之一(我认为它非常有用,因为有 s
我正在尝试从使用 JavaScript 的网站检索 html。我的方法如下: 创建一个 headless WebView(没有在 XML 中定义任何 View )并启用 JS。 创建一个 JavaSc
我希望 Android 运行时 (ART) 写入文件。因此,我将以下代码添加到 WORKING_DIRECTORY/art/runtime/runtime.cc。 std::string pid_
不知ART是不是虚拟机。 dex2oat 将 dalvik 字节代码编译成 native (特定于平台)代码,即 elf 文件。所以正如 android 开发者文章中提到的,它仍然有垃圾收集器。我不明
对于一些使用 ART 的用户,我在使用 Aviary SDK 时遇到了一个奇怪的错误。我很困惑为什么会发生这种情况(显然仅在 4.4.x 上),因为在 Dalvik 上调用此 SDK 时该应用程序可以
我已阅读互联网上有关适用于 Android 操作系统的新 ART 运行时的文章。许多文章称 ART 为新的虚拟机,我认为这是错误的,因为应用程序在安装后完全编译为 native 机器代码。如果 ART
我想知道并在谷歌上搜索答案,但没有找到。那么,更新的 ART 沙盒应用程序是否像 Dalvik VM?更准确地说,这个链接的图片也可以申请ART吗? http://davidchang168.blog
我想使用程序或图形库将图像转换为 ASCII 艺术,但我想指定要使用的调色板(符号)。所以基本上我想要一个图像,它从某个字母 A 呈现为文本,它是完整 ASCII 表的子集,例如 A := {a,b,
我正在阅读这本书 Art of Exploitation,这是一本好书,我从exploit_notesearch.c 文件中看到了那个例子。 简要作者尝试从notesearch.c溢出程序 int m
我有 3 个表 actor 、 movie 、 casting 。我必须找到与 Actor “ART Garfunkel”合作过的人。 我有解决方案,但我无法理解以下查询的工作原理。 **movie*
我的 android 应用程序中有一个 SQLite 数据库,但不幸的是,使用新的虚拟机 ART 它停止工作。 我在 DbHelper 类中遇到错误,特别是当我打开数据库以写入/读取它时。 我需要帮助
我是一名优秀的程序员,十分优秀!