2016-09-14 3 views
0

Похоже, что Build.CPU_ABI устарел в пользу Build.SUPPORTED_ABIS. Однако как узнать ABI, который сейчас используется моим приложением?Как получить текущий ABI приложения?

Например, мой планшет поддерживает сначала x86 и armeabi-v7a. Однако исходная библиотека, которая упакована, находится в каталоге lib/armeabi-v7a. В apk нет каталога lib/x86. Если бы у меня не было родных библиотек, устройство использовало бы x86 ABI. Однако, учитывая, что родная библиотека присутствует и только тип armeabi-v7a, приложение должно вернуться к armeabi-v7a ABI.

Как я могу программно определить, какое приложение ABI в настоящее время работает? Build.SUPPORTED_ABIS автоматически переупорядочивает список? С уважением.

+1

Может быть, есть лучший способ, но вы могли бы иметь функцию в вашем родном коде, который использует [библиотеку cpufeatures] (https: //developer.android.com/ndk/guides/cpu-features.html) и сопоставляет эту информацию с одним из имен ABI. – Michael

ответ

0

Используйте это в Java

System.getProperty("os.arch") 

или C++

char arch_info[11] = ""; 

    // checking if CPU is of ARM family or not 
    if (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) { 
     strcpy(arch_info, "ARM"); 

     // checking if CPU is ARM v7 or not 
     uint64_t cpuFeatures = android_getCpuFeatures(); 
     if ((cpuFeatures & ANDROID_CPU_ARM_FEATURE_ARMv7) != 0) { 
      strcat(arch_info, " v7"); 

      // checking if CPU is ARM v7 Neon 
      if((cpuFeatures & ANDROID_CPU_ARM_FEATURE_NEON) != 0) { 
       strcat(arch_info, "-neon"); 
      } 
     } 
    } 
Смежные вопросы