Android L permission conflict between release and debug apks

android, android-gradle-plugin, google-cloud-messaging

Solution

I can successfully have both `debug` and `release` editions of a GCM client app installed on the same Android 5.0 Nexus 9 at the same time, by amending the manifest to use placeholders:

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

Note that you should also use `${applicationId}` in your `<receiver>` for the `<category>`:

    <receiver
        android:name="GCMBroadcastReceiverCompat"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE"/>

            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>

(frankly, I am unconvinced that the custom `<permission>` is even needed anymore, given that I tried removing it and can still receive GCM messages)

If you then define your `build.gradle` as you have it, with an `applicationIdSuffix` for one of the build types (e.g., `debug`), you will wind up with separate custom permissions by build type, and you will be able to have them installed side by side.

Problem

I've upgraded to Android L and have both a released version of my app in "Google play" and a debug version which we use for development. They are signed with different keys. My problem is that I install the "Google play" version and then when I try installing the debug version, which is defined like so: ``` debug { debuggable true packageNameSuffix ".debug" buildConfigField BOOLEAN, IS_DEV, TRUE } ``` And this is the error I receive: ``` Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.app.name.permission.C2D_MESSAGE pkg=com.app.name] ``` This is the problematic permission: ``` <permission android:name="com.app.name.permission.C2D_MESSAGE" android:protectionLevel="signature"/> <uses-permission android:name="com.app.name.permission.C2D_MESSAGE"/> ``` I am aware of (http://commonsware.com/blog/2014/08/04/custom-permission-vulnerability-l-developer-preview.html) and of the fact that this was created due to a security issue, but I still need to be able to work with a team each having their own debug signing key. I've tried uninstalling using adb uninstall (https://stackoverflow.com/a/27090838/2746924) and I've tried clearing all apps cache on device.

Original source

Related problems