`
chriszeng87
  • 浏览: 741109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在代码中判断是否是ART模式

阅读更多

 

 

private boolean getIsArtInUse() {
    final String vmVersion = System.getProperty("java.vm.version");
    return vmVersion != null && vmVersion.startsWith("2");
}

 

 

package com.example.getcurrentruntimevalue;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MainActivity extends Activity {
    private static final String SELECT_RUNTIME_PROPERTY = "persist.sys.dalvik.vm.lib";
    private static final String LIB_DALVIK = "libdvm.so";
    private static final String LIB_ART = "libart.so";
    private static final String LIB_ART_D = "libartd.so";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = (TextView)findViewById(R.id.current_runtime_value);
        tv.setText(getCurrentRuntimeValue());
    }

    private CharSequence getCurrentRuntimeValue() {
        try {
            Class<?> systemProperties = Class.forName("android.os.SystemProperties");
            try {
                Method get = systemProperties.getMethod("get",
                   String.class, String.class);
                if (get == null) {
                    return "WTF?!";
                }
                try {
                    final String value = (String)get.invoke(
                        systemProperties, SELECT_RUNTIME_PROPERTY,
                        /* Assuming default is */"Dalvik");
                    if (LIB_DALVIK.equals(value)) {
                        return "Dalvik";
                    } else if (LIB_ART.equals(value)) {
                        return "ART";
                    } else if (LIB_ART_D.equals(value)) {
                        return "ART debug build";
                    }

                    return value;
                } catch (IllegalAccessException e) {
                    return "IllegalAccessException";
                } catch (IllegalArgumentException e) {
                    return "IllegalArgumentException";
                } catch (InvocationTargetException e) {
                    return "InvocationTargetException";
                }
            } catch (NoSuchMethodException e) {
                return "SystemProperties.get(String key, String def) method is not found";
            }
        } catch (ClassNotFoundException e) {
            return "SystemProperties class is not found";
        }
    }
}

 

 

art模式的官方介绍:https://source.android.com/devices/tech/dalvik/art.html

0
2
分享到:
评论

相关推荐

    ART by matlab

    在`ARTMAP`文件中,通常包含了网络初始化、输入处理、模式匹配、类别创建和更新等核心功能的函数。这些函数会使用MATLAB的矩阵运算和逻辑判断来实现ART网络的算法逻辑。例如,`initART`函数用于设置网络初始状态,`...

    The Art Of Assembly Language

    模式匹配部分则是关于如何在汇编语言中进行字符串搜索和文本处理等操作。 中断、陷阱和异常处理部分介绍了汇编语言中如何响应和处理外部事件,这是实现操作系统的任务调度和硬件驱动的重要机制。 驻留程序、进程、...

    Android安卓安全加固反调试检测手段(java层+native层)(附代码实现).pdf

    在art模式下,检测的结果存放在libart.so中的全局变量`gDebuggerActive`中,但由于新版本Android不允许使用非ndk原生库,这种方法可能无法使用。 ##### 2.5 轮询检测法 通过轮询`TracePid`的方式,可以检测系统中...

    The Art & Science of JavaScript

    通过这些练习,读者可以学习到如何组织代码、设计模式以及测试策略,这些都是成为一名专业JavaScript开发者所必需的。 总之,《JavaScript艺术与科学》是全面了解JavaScript语言和Web开发的宝贵资源。无论你是初学...

    The Art of Assembly Language 2nd Edition

    这本书旨在帮助读者掌握汇编语言的核心概念,并提升在低级别编程中的技艺。 汇编语言的学习通常分为几个关键部分: 1. **基本概念**:首先,你需要了解计算机的基本架构,如CPU、内存和I/O设备。汇编语言中的每条...

    The Art of Assembly Language

    13.2 判断CPU是否支持MMX指令集 13.3 MMX编程环境 13.4 设计MMX指令集的目的 13.5 饱和算未能和回转模式 13.6 MMX指令操作数 13.7 MMX技术指令 第14章 类与对象 14.1 本章概述 14.2 通用原则 14.3 HLA中的类 14.4 ...

    Art of Java Web Development

    - **内容概述**:书中首先介绍了状态良好的Web设计(State-of-the-art web design),接着探讨了构建Web应用的各种方法,包括创建自定义JSP标签和使用Model 2设计模式等。 #### 知识点二:Struts框架的应用 - **...

    2012最新java面试大全--很有帮助的

    如何理解MVC模式及其在Android中的应用? MVC(Model-View-Controller)是一种软件架构模式,用于分离数据、用户界面和控制逻辑。在Android中,Activity通常扮演控制器的角色,View负责显示数据,而Model负责处理...

    五子棋课程实训报告.docx

    在本次实训中,学生们需要完成一款能在手机屏幕上运行的五子棋游戏,具备人与人对弈以及人与机对弈模式,满足基本的五子棋规则。 一、设计内容与设计要求 1. 设计内容主要包括创建一个具有清晰界面的五子棋棋盘,...

    三级联动效果

    在网页设计和开发中,"三级联动效果"是一种常见的交互设计模式,特别是在处理地理区域选择、类别筛选等场景。这种效果通常涉及到三个下拉选择框,它们之间存在依赖关系:第一个下拉框的选择会影响第二个下拉框的内容...

    art-of-engineering

    在Python编程环境中,理解和避免这些反模式尤其重要,因为Python以其简洁、易读的语法和强大的功能深受开发者喜爱,但也同样存在可能被误用或滥用的地方。 1. **过度设计**:在软件开发中,过度设计是一种常见反...

    ChatGPT大火下的冷思考.pdf

    以AlphaGo和Fine Art等围棋程序为例,它们在棋局中的表现看似充满创意,但实际上是基于算法的穷举和最优选择,而非真正的自由意志或直觉。这种决定论的特性限制了AI在某些领域的创造性表现。 ChatGPT引发的技术热潮...

    c语言贪吃蛇游戏的双人对战版.rar

    在贪吃蛇游戏中,我们需要用到的关键概念包括循环(用于游戏的持续运行)、条件判断(判断蛇是否吃到食物、是否撞墙或自身)、数组(存储蛇的身体位置)以及函数(如处理键盘输入、更新游戏状态、绘制游戏画面等)。...

    用JavaScript对JSON进行模式匹配 (Part 2 – 实现)

    当模式中使用的运算符未在`operators`中定义时,这个默认运算符会根据测试值的类型决定使用哪个运算符。例如,如果测试值是数组,就使用`in`运算符;如果是正则表达式,使用`re`;如果是函数,使用`ld`;其他情况下...

    Android手机为什么会越用越卡_蓝色1

    这样在运行程序时就不用每次都编译一次,执行效率得到大大提升,同时,新的ART模式也降低了每次GC的时间,一些额外的优化也可以避免GC的频繁发生。 但是,为什么依然会让很多人觉得越用越卡呢?现在,Android越用越...

    基于STM32的视觉分拣系统.pdf

    首先,机器视觉技术是工业自动化中不可或缺的部分,它使用摄像机和计算机代替人眼进行测量和判断,实现物体识别、测量、检测和定位等。在视觉分拣系统中,机器视觉系统首先要完成的任务就是通过CCD摄像头拍摄到工件...

    excel_word精粹杂汇.rar

    5. **图片处理**:Word中可以对图片进行裁剪、调整大小、添加边框等操作,甚至使用SmartArt图形创建专业图表。 6. **协作编辑**:通过OneDrive或SharePoint在线存储,多人可以同时编辑同一份文档,实时查看他人的...

    专业与认识僵界的整合性问题解决平台.ppt

    微软的多媒体产品开发团队中,有创造意见的“Art of Possible”群体,如界面设计师,以及归纳意见、高效执行的“Art of Desirable”群体,如软件代码开发者。其他公司如Interval Research、Nissan Design ...

Global site tag (gtag.js) - Google Analytics