Intereting Posts
Android JDBC не работает: ClassNotFoundException на драйвере Как WhatsApp может быть сквозным зашифрованным, когда WhatsApp Web все еще работает Facebook shareDialog ничего не показывает Android – удаление рекурсивных представлений в макете Как создать многострочный редактор с просмотром прокрутки в действии? Раздражающий «Ошибки запускающего разработчика» Android Pre Компилятор «по проекту» диалог Strange Lint Warning – Неожиданный текст, найденный в файле макета: "" Прямая трансляция с помощью Android-устройства Включить экран в Activity – не работает с FLAG_KEEP_SCREEN_ON Java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет VM Освежающая активность при получении уведомления gcm push К сожалению, MyApp остановился – журналы ошибок в logcat Как я могу использовать cursorLoader в ViewPager? Как запустить приложение в фоновом режиме в android? Ошибка при развертывании образца кода с помощью android, проект: андроид api demos

Не удается найти манифест, определяемый получателем ~ 1% от времени

У меня есть @AAR, который требует записи в манифесте приложения-потребителя. Во время начальной загрузки моей библиотеки я проверяю AndroidManifest.xml для нужного ресивера, и если я не могу его найти, я бросаю RuntimeException как моя библиотека не будет работать должным образом. Это работает на 99% установок, но есть небольшое количество установок, которые RuntimeException это RuntimeException когда приемник явно существует.

Android v4.4 – v5.1.1 включены в отчеты о сбоях. Samsung, Lenovo, Nexus 4, Nexus 5 и т. Д. – все это относится к устройствам.

Самая интересная подсказка заключается в том, что ~ 75% аварий приходится на укоренившиеся устройства. Предположение заключалось в том, что это результат некоторого пользовательского ПЗУ или другого приложения, которое мешает обнаружению приемника.

Я тестировал с укорененным Nexus 5 w / 4.4.4, и он отлично работает. Я тестировал с запасом Nexus 5 w / 5.1.1, и он отлично работает. Я тестировал Nexus 5 с CyanogenMod 12.1 (последняя версия), и он отлично работает. Я применил все доступные параметры защиты конфиденциальности, и все еще работает нормально.

Действительно в недоумении и не хотят отказываться от затронутых пользователей.

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <application> <receiver android:name="com.example.MyBroadcastReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="${applicationId}" /> </intent-filter> </receiver> <!-- Activities, etc. removed for brevity --> </application> </manifest> 

Класс

 public class CheckSetup { // Other methods removed for brevity public void checkManifest() { List<ResolveInfo> receiversInfo; Intent checkIntent = new Intent(applicationContext, MyBroadcastReceiver.class); receiversInfo = packageManager.queryBroadcastReceivers(checkIntent, 0); boolean receiverFound = false; if (receiversInfo != null) { for (ResolveInfo resolveInfo : receiversInfo) { if (resolveInfo.activityInfo != null && resolveInfo.activityInfo.name.equals(MyBroadcastReceiver.class.getName()) && resolveInfo.activityInfo.packageName.equals(packageName)) { receiverFound = true; } } } if (!receiverFound) { throw new RuntimeException(String.format("%s definition not found in AndroidManifest.xml", MyBroadcastReceiver.class.getName())); } } } 

Solutions Collecting From Web of "Не удается найти манифест, определяемый получателем ~ 1% от времени"

Единственный способ, которым я смог воспроизвести это поведение, – это установить стороннее приложение, которое позволяет мне выборочно отключать Services и Receivers . Я не уверен, почему кто-то захочет это сделать, и как только отключится, нет возможности повторно включить их из моего AAR.

Лучшим случаем было исключение во время разработки и просто выход в LogCat для выпуска готовых выпусков.

Пример такого приложения можно найти здесь:

https://play.google.com/store/apps/details?id=cn.wq.myandroidtools

Вы можете удалить андроид: exported = "true" и проверить? В идеале Android: экспорт должен быть ложным.