Могу ли я удалить это разрешение? (Это вызывает 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
Другие вопросы по тегам