Android GCM с продуктами

У меня есть проект андроида android gradle GCM. Сработало хорошо, когда я добавляю 2 аромата, push-уведомление перестало работать. Мой манифест компиляции (взятый из файла app\build\intermediates\manifests\ex\debug) приведен ниже:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.flavor.app"
    <uses-permission android:name="com.flavor.app.permission.C2D_MESSAGE" />

    <permission
        android:name="com.flavor.app.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

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

                <category android:name="com.flavor.app" />
            </intent-filter>
        </receiver>

        <service android:name="com.ex.app.GCMIntentService" />
        <service
            android:name="com.ex.app.AppLocationService"
            class=".AppLocationService" >
            <intent-filter>
                <action
                    android:name=".AppLocationService"
                    android:value=".AppLocationService" />
            </intent-filter>
        </service>

Что мне делать, чтобы исправить эту проблему? Пожалуйста помоги.

UPD1. Я использую gradle v.0.12+. Я думаю, что мой последний файл манифеста выглядит хорошо, GCMRegistrar.checkManifest(this); - без ошибок, но GCMRegistrar.isRegistered(this) всегда false. = (

UPD2. Мой первый проект аромата с оригинальным названием пакета (как проект в основной ветке) работает хорошо, но второй аромат с измененным пакетом не работает (registrationId для push все еще пуст), но в файле манифеста все разрешения верны.

Ответ 2

Симпы используют псевдоним ${applicationId}, подобный этому

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

И для соответствующего приемника используйте этот

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

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

Ответ 3

добавьте следующий код в apps build.gradle, который скопирует выбранный файл flovour json в папку приложения.

gradle.taskGraph.beforeTask { Task task ->
        if(task.name ==~ /process.*GoogleServices/) {
            android.applicationVariants.all { variant ->
                if(task.name ==~ /(?i)process${variant.name}GoogleServices/){ 
                    copy {
                        from "/src/${variant.flavorName}"
                        into '.'
                        include 'google-services.json'
                    }
                }
            }
        }
    }