Могу ли я удалить это разрешение? (Это вызывает INSTALL_FAILED_DUPLICATE_PERMISSION в устройстве Android 5.0)
Мой тестер сказал, что не может установить приложение из Play Store на свой Nexus 5 (Lollipop). Он сказал, что получил эту ошибку
Unknown error code during application install “-505”
Я взял его телефон и попробуйте установить приложение через ADB, я получил эту ошибку
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION
perm=com.example.gcm.permission.C2D_MESSAGE
pkg=com.mailchimp.alterego]
После некоторого чтения я наткнулся на это письмо от @Commonsware
http://commonsware.com/blog/2014/08/04/custom-permission-vulnerability-l-developer-preview.html
Очевидно, что и мое приложение, и приложение Mailchimp (которое установлено на телефоне моего тестировщика) имеют дублированное разрешение com.example.gcm.permission.C2D_MESSAGE. Затем я проверяю свой журнал git, чтобы увидеть, когда я добавил эту строку в мой AndroidManifest и обнаружил, что это было, когда я внедрял GCM. Тогда я следовал этому уроку
https://developer.android.com/google/gcm/client.html
Я думаю, и я, и разработчик Mailchimp следовали одному и тому же учебному пособию, добавили одно и то же разрешение, и теперь у нашего приложения есть дублирующее разрешение.
Итак, я удалил это разрешение из моего AndroidManifest и теперь я могу установить приложение на телефон моего тестера. Я тестирую сообщение GCM, отправляя пакет на сервер GCM из моего php-скрипта, и приложение все еще получает сообщение GCM таким, каким оно было.
Итак, будут ли возникать другие проблемы из-за этого недостающего разрешения и какой смысл иметь это разрешение в любом случае? (поскольку без него мое приложение все еще получало сообщение GCM)
Меня беспокоит, если наше приложение использует плагин / библиотеку, которая требует разрешения. Мы не сможем установить наше приложение на устройстве Lollipop, если будет установлено другое приложение, которое использует ту же библиотеку, не так ли?
-- НОТА --
Я уже читал этот вопрос, мало кто предлагает то же самое, что я сделал, снял разрешение. Но никто не говорит о том, что произойдет после того, как мы это сделаем или почему мы должны добавить это.
INSTALL_FAILED_DUPLICATE_PERMISSION... C2D_MESSAGE
- РЕДАКТИРОВАТЬ 1 -
Я вернулся к учебнику, учебник был прав, это была моя неправильная реализация
Я (и разработчик Mailchimp) должен добавить разрешение с именем нашего пакета приложения + ".permission.C2D_MESSAGE" вместо того, чтобы просто скопировать и вставить com.example.gcm.permission.C2D_MESSAGE
<permission android:name="com.mycompany.myappname.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
Но, это поднимает еще один вопрос ко мне, учебник сказал, что если мы не добавим это разрешение или имя не будет соответствовать шаблону, приложение не получит сообщение. Но я получил сообщение, когда я тестирую, даже когда я удаляю это разрешение... странно.
3 ответа
Как описано в INSTALL_FAILED_DUPLICATE_PERMISSION... C2D_MESSAGE, вы должны использовать ${applicationId}
вместо этого статический идентификатор приложения в AndroidManifest.
Пример:
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
Это исправит вашу проблему, и если вы начнете использовать Flavor, все тоже будет отлично работать.;)
Android 5.0. У вас есть многопользовательский режим, поэтому вы должны удалить его для всех пользователей.
После удаления приложения. Вы можете найти это имя в списке приложений на вкладке "Загруженные".
Зайдите в Настройки-> Приложения. В нижней части списка вы нашли YourApp с тегом "НЕ УСТАНОВЛЕНО" -> "Открыть" -> нажмите "Меню настроек" и выберите "Удалить для всех пользователей".
После этого процесса вы успешно устанавливаете новое приложение и работаете хорошо.
Измените имя вашего пакета на какое-то другое имя пакета, вместо того, чтобы удалить эти разрешения.
package="com.example.gcm"
в
package="com.appname" //use any name here like your app name or company name