web-dev-qa-db-ja.com

プロセッサアーキテクチャを取得するためのAPI呼び出し

私のアプリの一部としてNDKを使用しており、x86とmipsのバイナリを標準のARM=バイナリと一緒にバンドルする価値があるかどうか疑問に思っていました。

ユーザーが実際に持っているものを追跡するのが最善の方法だと考えましたが、これをGoogleアナリティクスインスタンスに返すことができるようにプロセッサアーキテクチャを取得するAPI呼び出しはありますか?

ありがとう

31
Ljdawson

実際には、反射をまったく必要とせずにアーキテクチャを取得できます。

String Arch = System.getProperty("os.Arch");

私のテストでは、armv71およびi686

編集:

MIPSアーキテクチャでは、「mips」または「mips64」を返します

64ビットARM/Intelでは、それぞれ「Arch64」または「x86_64」を返します。

62
3c71

Android SDK、Buildクラスを見てください。

    /** The name of the instruction set (CPU type + ABI convention) of native code. */
    public static final String CPU_ABI = getString("ro.product.cpu.abi");

    /** The name of the second instruction set (CPU type + ABI convention) of native code. */
    public static final String CPU_ABI2 = getString("ro.product.cpu.abi2");
16
shem

Adbコマンドを使用できます

adbシェルgetprop ro.product.cpu.abi adbシェルgetprop ro.product.cpu.abi2

[サイト]を参照してください: Android lollipopでアプリのプロセスがプログラムで32ビットまたは64ビットであることを知る方法

Lollipop APIを探している場合

import Android.os.Build;

Log.i(TAG, "CPU_ABI : " + Build.CPU_ABI);
Log.i(TAG, "CPU_ABI2 : " + Build.CPU_ABI2);
Log.i(TAG, "OS.Arch : " + System.getProperty("os.Arch"));

Log.i(TAG, "SUPPORTED_ABIS : " + Arrays.toString(Build.SUPPORTED_ABIS));
Log.i(TAG, "SUPPORTED_32_BIT_ABIS : " + Arrays.toString(Build.SUPPORTED_32_BIT_ABIS));
Log.i(TAG, "SUPPORTED_64_BIT_ABIS : " + Arrays.toString(Build.SUPPORTED_64_BIT_ABIS));
10
tommybee

Build クラスを使用できます:

import Android.os.Build;

そして読む:

Build.CPU_ABI

8
and0421

このコマンドを試してください:

adb Shell getprop ro.product.cpu.abi

CPUがARMまたはIntel、64または86_64であるかどうかを示します

6
Maher Abuthraa

探している値は

ro.product.cpu.abi

そして

ro.product.cpu.abi2

これらは、内部API SystemProperties.getを使用して取得できます。そのため、SystemPropertiesでReflectionを使用する必要があります。

リフレクションにあまり熱心でなければ、関数getSystemPropertyを使用できます。それを確認してください こちら

6
nandeesh

termux-appは異なるアプローチを使用し、説明があります。

private static String determineTermuxArchName() {
    // Note that we cannot use System.getProperty("os.Arch") since that may give e.g. "aarch64"
    // while a 64-bit runtime may not be installed (like on the Samsung Galaxy S5 Neo).
    // Instead we search through the supported abi:s on the device, see:
    // http://developer.Android.com/ndk/guides/abis.html
    // Note that we search for abi:s in preferred order (the ordering of the
    // Build.SUPPORTED_ABIS list) to avoid e.g. installing arm on an x86 system where arm
    // emulation is available.
    for (String androidArch : Build.SUPPORTED_ABIS) {
        switch (androidArch) {
            case "arm64-v8a": return "aarch64";
            case "armeabi-v7a": return "arm";
            case "x86_64": return "x86_64";
            case "x86": return "i686";
        }
    }
    throw new RuntimeException("Unable to determine Arch from Build.SUPPORTED_ABIS =  " +
        Arrays.toString(Build.SUPPORTED_ABIS));
}

から: https://github.com/termux/termux-app/blob/master/app/src/main/Java/com/termux/app/TermuxInstaller.Java

3
Ratata Tata

私のコードはこんな感じ

private String cpuinfo()
{
String Arch = System.getProperty("os.Arch");    
String arc = Arch.substring(0, 3).toUpperCase();
String rarc="";
if (arc.equals("ARM")) {
    rarc= "This is ARM";
    }else if (arc.equals("MIP")){
        rarc= "This is MIPS";
    }else if (arc.equals("X86")){
        rarc= "This is X86";
    }
    return rarc;
}
2
Robs Ned