Llamada API para obtener architecture de procesador

Como parte de mi aplicación, estoy usando el NDK y me preguntaba si vale la pena incluir x86 y mips binarios junto con los binarios ARM estándar.

Pensé que la mejor manera sería hacer un seguimiento de lo que mis usuarios realmente tienen, ¿hay una llamada API para tomar la architecture del procesador para que pueda pasar esto de nuevo a mi instancia de análisis de Google?

Gracias

En realidad, puedes obtener la architecture sin la necesidad de la reflexión en absoluto:

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

De mis pruebas, devolvió armv71 e i686 .

EDITAR:

En la architecture MIPS, devuelve ‘mips’ o ‘mips64’

En ARM / Intel de 64 bits, devuelve ‘arch64’ o ‘x86_64’ respectivamente.

También puede usar el SDK de Android, eche un vistazo a la clase 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"); 

Puedes usar la clase Build :

import android.os.Build;

y luego leer:

Build.CPU_ABI

Puedes usar el comando adb

adb shell getprop ro.product.cpu.abi adb shell getprop ro.product.cpu.abi2

y consulte el [sitio]: ¿Cómo saber si un proceso de una aplicación es de 32 bits o de 64 bits mediante progtwigción en Android lollipop?

Si estás buscando la API de Lollipop

 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)); 

Los valores que está buscando son

ro.product.cpu.abi

y

ro.product.cpu.abi2

Estos se pueden obtener usando la API interna SystemProperties.get. Por lo tanto, deberá usar Reflection en SystemProperties.

Puede usar la función getSystemProperty si no está muy interesado en la reflexión. Verifíquelo aquí

Pruebe este comando:

 adb shell getprop ro.product.cpu.abi 

Indica si la CPU es ARM o Intel, 64 o 86_64

Mi código se ve así

 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; } 

termux-app usa un enfoque diferente y tiene una explicación:

 private static String determineTermuxArchName() { // Note that we cannot use System.getProperty("os.arch") since that may give eg "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 eg 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)); } 

De: https://github.com/termux/termux-app/blob/master/app/src/main/java/com/termux/app/TermuxInstaller.java