android+读写+assert,Android assert 机制
java 中 可以使用assert语法来进行一些判断检,但是 android上 assert似乎不生效, 这是为什么呢。
在将java source code编译成class文件的过程中,如果一个类中使用了assert语法,那么class文件中会生成一个static field。
final static synthetic Z $assertionsDisabled
在类的静态初始化函数,会生成以下代码
static ()V
L0
LINENUMBER 20 L0
LDC Lorg/chromium/base/JavaExceptionReporter;.class
INVOKEVIRTUAL java/lang/Class.desiredAssertionStatus ()Z
IFNE L1
ICONST_1
GOTO L2
L1
FRAME SAME
ICONST_0
L2
FRAME SAME1 I
PUTSTATIC org/chromium/base/JavaExceptionReporter.$assertionsDisabled : Z
RETURN
会先判断Class.desiredAssertionStatus()的返回值,如果是false, 设置
assertionsDisabled为false。
android中 Class.desiredAssertionStatus() 的定义
public boolean desiredAssertionStatus() {
return false;
}
所以$assertionsDisabled会被设置为true。
真正使用assert的地,会被替换为
L0
LINENUMBER 55 L0
GETSTATIC org/chromium/base/JavaExceptionReporter.$assertionsDisabled : Z
IFNE L1
INVOKESTATIC "assert method"Z
IFNE L1
NEW java/lang/AssertionError
DUP
INVOKESPECIAL java/lang/AssertionError. ()V
ATHROW
L1
LINENUMBER 59 L1
如果$assertionsDisabled 为false,则会先判断assert后面的值,如果是true,则会抛出 AssertionError异常,否则就执行后面的代码。
所以在Android要使assert生效,有两种方法:
adb shell setprop debug.assert 1 (只对dalvik虚拟机生,对art虚拟机不生效!)
使用字节码修改工具,比如asm,用以下代码将赋值$assertionsDisabled的地方替换成POP 指令。
@Override
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
if (opcode == Opcodes.PUTSTATIC && name.equals("$assertionsDisabled")) {
super.visitInsn(Opcodes.POP); // enable assert
}
}
android+读写+assert,Android assert 机制相关推荐
- android读写位图,android - 从矢量绘图获取位图
android - 从矢量绘图获取位图 在我的应用程序中,我必须为通知设置一个大图标.LargeIcon必须是一个Bitmap,我的drawables是矢量图像(Android中的新功能,请看这个链接 ...
- android读写文本文件,Android读写文件
一. 从 resource 中的 raw 文件夹中获取文件并读取数据(资源文件只能读不能写) String res = ""; try{ InputStream in = getR ...
- Android读写日历,android – 读写日历
我的目标是阅读和编写日历. 我能够从内容中读取数据:// calendar / calendars和content:// calendar / events String uriString = &q ...
- android 单元测试 assert,android单元测试AndroidTestCase
在实际开发中,开发android软件的过程需要不断的进行测试.而是用Junit测试框架,则是正规android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 第一 ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
原文地址: http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学 ...
- android permission权限与安全机制解析(上)
目录(?)[-] uses-permission 自定义permission permission标签 permission-tree标签 permission-group标签 安全机制 组件权限 权 ...
- epoll监听文件_介绍一下 Android Handler 中的 epoll 机制?
介绍一下 Android Handler 中的 epoll 机制? 目录: IO 多路复用 select.poll.epoll 对比 epoll API epoll 使用示例 Handler 中的 e ...
- 【Android安全】Android SELinux机制 | Android 访问控制模型
SELinux机制 1. 自主访问控制与强制访问控制 自主访问控制(DAC):Discretionary Access Control 设计理念:客体(例如文件)的所有者,按照自己的安全策略,授予系统 ...
- Android全面解析之Context机制
文章已授权『郭霖』公众号发布 前言 很高兴遇见你~ 欢迎阅读我的文章. 在文章Android全面解析之由浅及深Handler消息机制中讨论到,Handler可以: 避免我们自己去手动写 死循环和输入阻 ...
- Android View框架的measure机制
Android中View框架的工作机制中,主要有三个过程: 1.View树的测量(measure)Android View框架的measure机制 http://www.cnblogs.com/xyh ...
最新文章
- 1.2 C语言--函数与数组
- 衡阳a货翡翠,南平a货翡翠
- 【算法设计与分析】Dijskra算法代码:Java版
- Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...
- 物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
- JavaScript-关于变量
- resiprocate 之repro注册
- 的级联选择_OpenCV-Python 级联分类器 | 六十二
- 面试官问现在工资是多少,该怎么回答?
- SQL解析处理和扩展开发工具 Java
- Redis中的lua脚本
- css扫描动画效果demo示例(整理)
- 港科百创 | 一清创新完成Pre-A+轮战略融资
- 32位MD5加密 可用来微信加密
- 人工智能研究中心快递柜——代码分析七
- 欧姆龙气压传感器 2SMPB-02E程序编写
- 07.26爬虫request模块之药监局学习笔记
- FastICA算法类有哪些最新发表的毕业论文呢?
- TCP快速连接(tfo,TCP fastopen)
- 值得关注技术网站汇总,以及技术(自学用)