Невозможно установить некоторые приложения из Google Play на настраиваемый AOSP: элемент недоступен. Причина: 9

При попытке установить некоторые приложения из Google Play появляется следующее сообщение об ошибке:

LibraryUtils.isAvailable: not available restriction=9 DocUtils.getAvailabilityRestrictionResourceId: Item is not available. Reason: 9 

Я использую настраиваемую версию AOSP (настраиваемый хрусталь для Android x86) на оборудовании x86. Я много исследовал, и есть много смутных попыток / догадок в ответах уже в сети, но я специально ищу, что означает «Причина 9». Как только у меня есть это, я надеюсь, что смогу придумать взломать AOSP, чтобы избежать ошибки, когда я загружаю те же приложения, что и они. Это увлечение, которое я делаю, поэтому меня не беспокоят возможные непредвиденные побочные эффекты.

Если вы вытащите APK Play Store из своего устройства, вы можете декомпилировать его. Я декомпилировал APK и сделал простой поиск вашего сообщения об ошибке. Сообщение об ошибке можно найти в классе com.google.android.finsky.utils.DocUtils

 $ grep -lr "Item is not available" com/google/android/finsky/utils/DocUtils.java 

Вот способ:

 public static int getAvailabilityRestrictionResourceId(Document document) { int restriction = document.getAvailabilityRestriction(); int resourceId = R.string.availability_restriction_generic; switch (restriction) { case 2: resourceId = R.string.availability_restriction_country; break; case 8: resourceId = R.string.availability_restriction_not_in_group; break; case 9: if (document.getDocumentType() != 1) { resourceId = R.string.availability_restriction_hardware; break; } resourceId = R.string.availability_restriction_hardware_app; break; case 10: resourceId = R.string.availability_restriction_carrier; break; case 11: resourceId = R.string.availability_restriction_country_or_carrier; break; case 12: resourceId = R.string.availability_restriction_search_level; break; case 21: resourceId = R.string.availability_restriction_for_managed_account; break; case 22: resourceId = R.string.availability_restriction_missing_permission; break; } FinskyLog.d("Item is not available. Reason: " + restriction); return resourceId; } 

В вашем случае ответ имеет ограничение на 9. Это либо получит одну из двух строк. Если мы декомпилируем ресурсы APK с помощью ApkTool, мы можем увидеть значения этих двух строк.

 <string name="availability_restriction_hardware">"Your device isn't compatible with this item."</string> <string name="availability_restriction_hardware_app">"Your device isn't compatible with this version."</string> 

Метод getAvailabilityRestrictionResourceId(Document document) вызывается в следующих классах:

 $ grep -lr getAvailabilityRestrictionResourceId | grep -v DocUtils com/google/android/finsky/activities/AppsPermissionsActivity.java com/google/android/finsky/billing/lightpurchase/OfferResolutionActivity.java com/google/android/finsky/detailspage/WarningMessageModule.java com/google/android/finsky/layout/WarningMessageSection.java 

Было бы полезно, если вы предоставите информацию о том, когда это будет зарегистрировано.


Проблема все еще неопределенная. Из поиска в Google некоторые люди решили подобные проблемы, изменив системное свойство (чаще всего в /system/build.prop ).

Наверное, не ответ, на который вы надеетесь, но я надеюсь, что мои исследования помогут.