Intereting Posts
Как сделать панель состояния белой с черными значками? Установить реферер, не работающий на некоторых устройствах redmi Logback-Android: ошибка «нет применимого действия» при использовании FixedWindowRollingPolicy с SizeBasedTriggeringPolicy Как я могу получить оба номера IMEI с мобильного телефона с двумя SIM-картами? Как я могу динамически выбирать, какую активность запускать при открытии приложения? Sobel Edge Detection в Android Прямая трансляция с помощью Android-устройства Почему у Android нет адреса mac для 3g, когда iOS? Установка уровня альфа на вид не работает Обновление пользовательского интерфейса Android с помощью потоков Дооснащение + RxJava не кэширует ответы, подозрительные заголовки ответов Контрольный список материалов: скрытие панели приложений на свитке? Самый эффективный способ изменения размера растровых изображений на Android? Как получить представление вкладки TabLayout? @IntDef аннотирование и возвращаемое значение из кода другого, который нельзя аннотировать или как временно отключить аннотацию от влияния на код?

INSTALL_FAILED_DUPLICATE_PERMISSION … C2D_MESSAGE

Я использую уведомления Google в своем приложении, и до сих пор я сделал это в манифесте ниже:

<!-- GCM --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- GCM requires a Google account. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <!-- This app has permission to register and receive data message. --> <!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE --> <permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.myapp.permission.C2D_MESSAGE" /> <!-- END GCM --> 

Он отлично работал, пока я не обновил свой Nexus 7 до Android 5.0.
Теперь, когда я пытаюсь установить приложение на этом устройстве с помощью Eclipse, я получаю эту ошибку:

INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.myapp.permission.C2D_MESSAGE pkg = com.myapp

Я не понимаю, что не так … он работал отлично до Android 5.0.
Я знаю, что я использую C2D_MESSAGE в двух строках, permission и permission uses-permission но я скопировал этот код из оригинального руководства Google GCM, поэтому все должно быть хорошо.

Solutions Collecting From Web of "INSTALL_FAILED_DUPLICATE_PERMISSION … C2D_MESSAGE"

Я нашел решение, которое работает для меня.

В моем устройстве (Nexus 7) Android 5.0. Lollipop Я следую этим шагам.

После удаления приложения вы найдете App Name приложения в списке приложений из Downloaded вкладки.

  • Перейдите в настройки
  • Программы
  • Внизу списка вы найдете YourApp с YourApp «NOT INSTALLED»
  • открыто
  • Нажмите « OptionMenu и выберите «Uninstall для всех пользователей».

После этого процесса я успешно устанавливаю новое приложение, и оно работает хорошо.

Удалить

 <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature"/> 

Запустите приложение … Затем добавьте permisson снова и запустите приложение.

Готов!.

У меня была та же проблема с пользовательским разрешением подписи на Android-21 и решила его, убедившись, что я делаю полную деинсталляцию.

Это краевой регистр, который возникает, когда:

  1. Приложение определяет настраиваемое разрешение с использованием безопасности уровня подписи
  2. Вы пытаетесь обновить установленное приложение версией, подписанной другим ключом
  3. На тестовом устройстве работает Android 21 или новее с поддержкой нескольких пользователей

Пример командной строки

Вот сценарий командной строки, который демонстрирует проблему и как ее решить. На этом этапе установлена ​​версия отладки, и я пытаюсь установить производственную версию, подписанную с ключом выпуска:

 # This fails because the debug version defines the custom permission signed with a different key: [root@localhost svn-android-apps]# . androidbuildscripts/my-adb-install Example release 920 KB/s (2211982 bytes in 2.347s) pkg: /data/local/tmp/Example-release.apk Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.example.android.example.PERMISSION_EXAMPLE_PLUGIN pkg=com.example.android.example] # I use uninstall -k because apparently that is similar to uninstalling as a user # by dragging the app out of the app tray: [root@localhost svn-android-apps]# /android-sdk-linux/platform-tools/adb uninstall -k com.example.android.example The -k option uninstalls the application while retaining the data/cache. At the moment, there is no way to remove the remaining data. You will have to reinstall the application with the same signature, and fully uninstall it. If you truly wish to continue, execute 'adb shell pm uninstall -k com.example.android.example' # Let's go ahead and do that: [root@localhost svn-android-apps]# /android-sdk-linux/platform-tools/adb shell pm uninstall -k com.example.android.example Success # This fails again because the custom permission apparently is part of the data/cache # that was not uninstalled: [root@localhost svn-android-apps]# . androidbuildscripts/my-adb-install Example release 912 KB/s (2211982 bytes in 2.367s) pkg: /data/local/tmp/Example-release.apk Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.example.android.example.PERMISSION_EXAMPLE_PLUGIN pkg=com.example.android.example] # In spite of the warning above, simply doing a full uninstall at this point turned out to # work (for me): [root@localhost svn-android-apps]# /android-sdk-linux/platform-tools/adb uninstall com.example.android.example Success # Release version now successfully installs: [root@localhost svn-android-apps]# . androidbuildscripts/my-adb-install Example release 898 KB/s (2211982 bytes in 2.405s) pkg: /data/local/tmp/Example-release.apk Success [root@localhost svn-android-apps]# 

Пример Eclipse

Идя в противоположном направлении (пытаясь установить сборку отладки из Eclipse, когда сборка релиза уже установлена), я получаю следующий диалог:

Диалог переустановки Eclipse

Если вы просто ответите «да» в этот момент, установка будет успешной.

Пример устройства

Как указано в другом ответе, вы также можете перейти на страницу сведений о приложении в настройках устройства, выбрать меню переполнения и выбрать «Удалить для всех пользователей», чтобы предотвратить эту ошибку.

Я решил это, не прибегая к удалению альтернативного apk в первую очередь (какая боль, правда?). Чтобы успешно установить как отладочную версию, так и версию apk, просто используйте встроенный заполнитель $ {applicationId} gradle в AndroidManifest.xml, чтобы изменить значения android: name во время компиляции.

Фрагмент build.gradle:

 buildTypes { debug { applicationIdSuffix ".debug" ... } } 

Фрагмент файла AndroidStudio.xml:

 <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature"/> 

Вы можете проверить измененный файл AndroidManifest.xml в apk с помощью aapt l -a app-debug.apk чтобы гарантировать, что местозаполнитель был правильно применен. Если вы используете различные вкусы продукта, я уверен, что вы можете применить вариант этого метода в соответствии с вашими потребностями.

Предоставляя эту ошибку, он явно укажет имя пакета приложения, из-за которого было отказано в разрешении. И просто удаление приложения не решит проблему. Чтобы решить проблему, нам нужно сделать следующий шаг:

  1. Перейдите в настройки
  2. Перейти к приложению
  3. Перейти к списку загруженных приложений
  4. Вы можете увидеть удаленное приложение в списке
  5. Нажмите на приложение, перейдите к дополнительной опции
  6. Нажмите кнопку « Удалить» для всех пользователей.

Проблема решена: D

Удалите с вашего файла манифеста любую «жесткую кодировку» ссылки на имя вашего пакета.

(Это лучшая практика, даже если вы не используете productFlavors )

Например, если ваш манифест содержит:

 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <uses-permission android:name="com.yourpackage.name.permission.C2D_MESSAGE"/> <permission android:name="com.yourpackage.name.permission.C2D_MESSAGE" android:protectionLevel="signature"/> <permission android:name="com.yourpackage.name.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> 

Изменено:

 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature"/> <permission android:name="${applicationId}.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> 

Затем, в своем модульном файле gradle, установите соответствующий applicationId :

 signingConfigs { stage { storeFile file('keystore/stage.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } production { storeFile file('keystore/playstore.keystore') storePassword store_password keyAlias key_alias keyPassword key_password } } productFlavors { staging { signingConfig signingConfigs.staging applicationId defaultConfig.applicationId + ".staging" versionName defaultConfig.versionName + "-staging" } production { signingConfig signingConfigs.production } } 

Вы можете следовать этому руководству для получения дополнительной информации

Попробуйте удалить приложение с помощью adb:

 adb uninstall com.yourpackage 

Установка приложения в OS 5.0 я получаю это сообщение:

 INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.myapp.permission.C2D_MESSAGE pkg=com.myapp 

Нет дублированных пакетов, и мы можем решить эту проблему, удалив вручную старое приложение или используя adb:

adb uninstall com.yourpackage

CommonsWare прав, но, на мой взгляд, это (ошибка) плохой способ сказать: «Установленный на устройстве apk подписан другим сертификатом, а затем новым, который вы пытаетесь установить» .

Вероятно, это новая ошибка, поскольку в прошлом она задавала вопрос о необходимости удаления приложения с устройства из-за неправильного сертификата.

Решение настолько болезненным, насколько это возможно, было бы удалить приложение вручную.

Кроме того, что мы сделали для развития команды, мы добавили хранилище отладки в наш репозиторий и градиент точки, чтобы использовать его так:

 android { ... signingConfigs { debug { storeFile file("../certificates/debug.keystore") } } ... buildTypes { debug { signingConfig signingConfigs.debug } } ... } 

И теперь, когда вы передаете устройства между членами команды, мы все используем один и тот же сертификат отладки, поэтому проблем нет. 🙂

В Android 5 проверьте свои настройки -> приложения. Вместо того, чтобы удалять только активного пользователя (так как у андроида 5 может быть несколько пользователей, а у моего телефона был гостевой пользователь) нажмите на кнопку аксессуара в правом верхнем углу панели действий / панели инструментов и выберите «удалить для всех пользователей». Похоже, что в Android 5, когда вы просто удаляете из пусковой установки, вы удаляете приложение только для активного пользователя.

Приложение все еще находится на устройстве. Это меня ослепило, так как я пытался установить версию выпуска, не работал, поэтому я думал, что все должно быть, потому что у меня все еще есть версия отладки, и удалила приложение. Но, чем все еще не удалось установить .. Первая подсказка была записью в списке приложений удаленного приложения с сообщением рядом с ним о том, что оно было удалено (изображение).

Удаленное приложение по-прежнему отображается в приложенияхУдалено для всех пользователей

Ничто из этого не помогло мне. Мое приложение отлично работало раньше, чем Lollipop. Но когда я протестировал его на Lollipop, появилась ошибка выше. Он отказался установить. У меня не было установленных ранее версий, поэтому все вышеупомянутые решения в моем случае недействительны. Но благодаря этому SO-решению теперь он работает нормально. Как и большинство разработчиков, я следил за вводящим в заблуждение руководством Google, и я добавил разрешения, скопировав и вставив их так:

 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="com.google.android.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 

Это будет работать со старыми версиями <Lollipop. Итак, теперь я перешел на:

 <uses-permission android:name="com.mycompany.myappname.c2dm.permission.RECEIVE" /> <permission android:name="com.mycompany.myappname.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 

См. Эту ссылку, в которой говорилось, что она будет работать, когда они будут подписаны одним и тем же ключом. Клавиша release и ключ отладки не совпадают.

Так сделай это:

 buildTypes { release { minifyEnabled true signingConfig signingConfigs.release//signing by the same key proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-android.txt' } debug { applicationIdSuffix ".debug" debuggable true signingConfig signingConfigs.release//signing by the same key } } signingConfigs { release { storeFile file("***\\key_.jks") storePassword "key_***" keyAlias "key_***" keyPassword "key_"***" } } 

Раньше он говорил, что приложение с другой подписью находится на устройстве. При установке из IDE он также спросит, хотите ли вы его удалить?

Но я думаю, что с Android 5.0 они изменили причину деинсталляции. Это не происходит, если вы устанавливаете приложение с той же подписью

Я столкнулся с той же проблемой с Nexus 5 Android Lollipop 5.0.1:

 Installation error: INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.android.** pkg=com.android.** 

И в моем случае я не мог исправить эту проблему при uninstalling приложения, потому что это было android app для android app , но мне пришлось изменить имя custom permissions приложения в manifest потому что оно было таким же, как и приложение для Android, которое я не мог удалить или сделать любое изменение.

Надеюсь, это поможет кому-то!

В моем случае я получил следующую ошибку

Ошибка установки: INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.map.permission.MAPS_RECEIVE pkg = com.abc.Firstapp

Когда я пытался установить приложение с именем пакета com.abc.Secondapp . Здесь было com.abc.Firstapp что приложение с именем пакета com.abc.Firstapp уже установлено в моем приложении.

Я решил эту ошибку, удалив приложение с именем пакета com.abc.Firstapp а затем установив приложение с именем пакета com.abc.Secondapp

Надеюсь, это поможет кому-то во время тестирования.

В вашем файле AndroidManifest.xml измените свои специально объявленные имена разрешений, например:

 <!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE --> <permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.myapp.permission.C2D_MESSAGE" /> <!-- END GCM --> 

к этому,

 <!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE --> <permission android:name="com.myapprocks.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.myapprocks.permission.C2D_MESSAGE" /> <!-- END GCM --> 

Com.myapprocks эта часть решает конфликт с другим вашим приложением.

В моем случае я использовал стороннюю библиотеку (например, поставщик), а в библиотеке есть пример приложения, которое у меня уже было установлено на моем устройстве. Так что приложение-образец теперь конфликтует каждый раз, когда я пытаюсь установить собственное приложение, реализующее библиотеку. Поэтому я просто удалил приложение-образец поставщика, и он работает после этого.

Замените ниже строки:

 <permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />