Android 應用獲取手機的虛擬機器型別
阿新 • • 發佈:2019-01-03
Dalvik虛擬機器,是Google等廠商合作開發的Android移動裝置平臺的核心組成部分之一。它可以支援已轉換為.dex(即“Dalvik Executable”)格式的Java應用程式的執行。.dex格式是專為Dalvik設計的一種壓縮格式,適合記憶體和處理器速度有限的系統。
大多數虛擬機器包括JVM都是一種堆疊機器,而Dalvik虛擬機器則是暫存器機。兩種架構各有優劣,一般而言,基於堆疊的機器需要更多指令,而基於暫存器的機器指令更長。
從Android 5.0版起,Android Runtime(ART)替換Dalvik成為系統內預設虛擬機器。(這不代表你的手機用的6.0系統,使用的就是ART虛擬機器,國產Android系統中很多升級為6.0系統的任然使用的是Dalvik)
Android Runtime(縮寫為ART),是一種在Android作業系統上的執行環境,由Google公司研發,並在2013年作為Android 4.4系統中的一項測試功能正式對外發布,在Android 5.0及後續Android版本中作為正式的執行時庫取代了以往的Dalvik虛擬機器。ART能夠把應用程式的位元組碼轉換為機器碼,是Android所使用的一種新的虛擬機器。它與Dalvik的主要不同在於:Dalvik採用的是JIT技術,而ART採用Ahead-of-time(AOT)技術。ART同時也改善了效能、垃圾回收(Garbage Collection)、應用程式除錯以及效能分析。
demo
public CharSequence getCurrentRuntimeValue() {
String SELECT_RUNTIME_PROPERTY = "persist.sys.dalvik.vm.lib";
String LIB_DALVIK = "libdvm.so";
String LIB_ART = "libart.so";
String LIB_ART_D = "libartd.so";
try {
Class<?> systemProperties = Class.forName("android.os.SystemProperties" );
try {
Method get = systemProperties.getMethod("get",
String.class, String.class);
if (get == null) {
return "未獲取到";
}
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";
}
}