2015-11-13 1 views
4

У меня возникла следующая проблема с RenderScript на некоторых старых 4.2.2-устройствах (галактика s3 mini, галактика ace 3, галактика свежая,) - Android - Renderscript Support Library - Error loading RS jni library.Использование System.getProperty («os.arch»), чтобы проверить, является ли это armeabi cpu

Я хочу реализовать предложенное решение, но что именно будет значение, возвращаемое

System.getProperty («os.arch»);

для armeabi устройства (не armeabi-v7 устройства).

Спасибо.

ответ

7

Метод System.getProperty - это общий метод Java, here, вы можете найти документацию.

В Linux он возвращает то же значение, полученное из команды uname -m. Возможные значения: например, armv5tarmv5te, armv5tej, armv5tejl, armv6, armv7, armv7l, i686 и многое другое. Точное значение для устройств armeabi не существует, поскольку оно немного отличается от процессора к процессору.

Существует лучшая альтернатива System.getProperty и это поле Build.CPU_ABI (или Build.SUPPORTED_ABIS в новых устройствах):

String abi = null; 

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
    abi = Build.CPU_ABI; 
} else { 
    abi = Build.SUPPORTED_ABIS[0]; 
} 

Возможные значения armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64.

Как вы можете видеть, количество возможных результатов намного ниже System.getProperty, и вы можете напрямую проверить armeabi.

+0

Почему вы только получаете первый элемент Build.SUPPORTED_ABIS от Build.SUPPORTED_ABIS [0], предполагается, что все значения поддерживаются этим устройством, это правильно? –

+2

Да, это правильно. Наиболее предпочтительным ABI является первый элемент в списке, как вы можете видеть в [документации] (http://developer.android.com/reference/android/os/Build.html#SUPPORTED_ABIS). –

+0

Спасибо Mattia) –