Posted at

Androidの端末のCPUアーキテクチャを調べる

More than 1 year has passed since last update.


Introduction

Androidでどうしてもバイナリを使わなければならない場合、CPUのアーキテクチャ決定が必要となることでしょう。ところが、日本語の文献を見つけること能わずだったので、書きました。そもそも、現代のAndroidアーキテクチャでは、armv7(32Bit),arm64(64bit)が主流です、まれにAtomやmips、armelもありますが、、、

とりあえず、仮想マシンと一般的なスマホが区別できるのがいい思います。


Practice

    List arch = getSupportedABIs();

System.out.print("Arch:"+arch.toString());
if (String.valueOf(arch).contains("arm64")) {
System.out.print("This architecture may be arm64(64Bit)");
}else if(String.valueOf(arch).contains("v7")){
System.out.print("This architecture may be armv7(32Bit) ");
}else if(String.valueOf(arch).contains("x86_64")){//仮想マシン
System.out.print("This architecture may be Virtual Machine(64Bit) ");
}else if(String.valueOf(arch).contains("x86")){//仮想マシン
System.out.print("This architecture may be Virtual Machine(32Bit) ");
}else{
System.out.print(" Architecture is not detected ");
}

//////////

public static List<String> getSupportedABIs() {
if (Build.VERSION.SDK_INT >= 21) {
return Arrays.asList(Build.SUPPORTED_ABIS);
} else {
return Arrays.asList(Build.CPU_ABI, Build.CPU_ABI2);
}
}

これでさばけるはずなのですが、アーキテクチャ名が妙だとおかしな振る舞いをするかもしれません。


Reference

https://stackoverflow.com/questions/15025353/arm-runtime-cpu-type-detection

http://metalkin.tistory.com/81