INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE

? AndroidUser99 @ | Original: StackOverFlow
---

Я использую уведомления 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 Пермь = com.myapp.permission.C2D_MESSAGE PKG = com.myapp

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

---

Top 5 ответ

1x-code @

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

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

An application defines a custom permission using signature level security You attempt to update the installed app with a version signed with a different key The test device is running Android 21 or newer with support for multiple users Command line example

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

# 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 example

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

INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE

Если вы просто ответить да на данный моментустановить удастся.

Device example

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

2Preethi Rao @

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

1.Go настроек 2. Перейти к приложению 3. Перейдите к загруженному приложение список 4.You можете увидеть неустановленного приложение в списке 5. Нажмите на приложение, перейдите в более опции 6.click при удалении для всех пользователей опций

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

3Yasir @

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

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

4Giuseppe @

попробуйте удалить приложение с АБР :

adb uninstall com.yourpackage
5TacB0sS @

CommonsWare прав, но, на мой взгляд, это( ошибка ) плохой способ сказать : "АПК установлена ​​на устройстве подписан с другом сертификат с тем, что Вы пытаетесь установить " .

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

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

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

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

    ...

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
    }

    ...
}

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