Thanks for the report. I've filed
https://code.google.com/p/android/issues/detail?id=69198


On Thu, May 1, 2014 at 8:00 AM, Mateusz Grzechociński <
[email protected]> wrote:

> Hint:
> I played a little bit with *flavorlib *sample from gradle-samples-0.10
> which uses new merging utility. Seems like everything works pretty fine
> when I use *${packageName}* in *main/AndroidManifest.xml *files. It puts
> final packageName wherever ${packageName} was.
> Things go wrong when I create *flavor1/AndroidManifest.xml*, then it
> crashes with above NPE.
>
> *main/AndroidManifest.xml*
> <?xml version="1.0" encoding="utf-8"?>
> <manifest xmlns:android="http://schemas.android.com/apk/res/android";
>           package="com.android.tests.flavorlib.app"
>           android:versionCode="1"
>           android:versionName="1.0" xmlns:tools="
> http://schemas.android.com/tools";>
>
>     <uses-sdk android:minSdkVersion="15" />
>
>     <application
>             android:icon="@drawable/icon"
>             android:label="@string/app_name"
>             tools:replace="icon, label">
>         <activity
>                 android:name=".MainActivity"
>                 android:label="@string/app_name">
>             <intent-filter>
>                 <action android:name="*${packageName}*.foo">
>                 </action>
>             </intent-filter>
>         </activity>
>         <receiver
>                 android:name=".gcm.GcmBroadcastReceiver"
>
> android:permission="com.google.android.c2dm.permission.SEND">
>             <intent-filter>
>                 <action
> android:name="com.google.android.c2dm.intent.RECEIVE"/>
>                 <category android:name="*${packageName}*"/>
>             </intent-filter>
>         </receiver>
>     </application>
> </manifest>
>
> *flavor1/AndroidManifest.xml*
> <?xml version="1.0" encoding="utf-8"?>
> <manifest xmlns:android="http://schemas.android.com/apk/res/android";
>           package="com.android.tests.flavorlib.app"
>           xmlns:tools="http://schemas.android.com/tools";>
>
>     <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="18"
>  tools:replace="minSdkVersion"/>
>
>     <application android:icon="@drawable/ic_launcher"
>                         android:label="@string/lib_name"
> tools:replace="icon, label">
>         <activity android:name=".devopts.DevOptionsActivity"
> android:screenOrientation="portrait"/>
>     </application>
> </manifest>
>
> W dniu czwartek, 1 maja 2014 16:04:49 UTC+2 użytkownik Mateusz
> Grzechociński napisał:
>
>> Hi,
>>
>> With v0.10 of Gradle Android plugin you guys introduced new manifest
>> merger. One to it's killer feature is placeholder support. As documentation
>> says, there is already one placeholder which can be used: ${packageName}.
>>
>> My project has a productFlavor which changes package name (from
>> my.package to my.package2):
>>
>> productFlavors {
>>    mo {
>>      packageName "my.package2"
>>    }
>> }
>>
>> Since I use GCM, so far I had to have separated AndroidManifest.xml files
>> which provided copy&pasted xml with only package name changed:
>>
>> */mo/AndroidManifest.xml*
>>
>> <manifest xmlns:android="http://schemas.android.com/apk/res/android";
>> package="my.package"> <!-- Changed by Gradle during build -->
>>
>>     <permission android:name="my.package.permission.C2D_MESSAGE"
>>         android:protectionLevel="signature" />
>>     <uses-permission android:name="my.package2.permission.C2D_MESSAGE" />
>>
>>     <application>
>>
>>         <receiver
>>             android:name=".gcm.GcmBroadcastReceiver"
>>             android:permission="com.google.android.c2dm.permission.SEND"
>> >
>>             <intent-filter>
>>                 <action android:name="com.google.android.c2dm.intent.RECEIVE"
>> />
>>                 <category android:name="my.package2" />
>>             </intent-filter>
>>         </receiver>
>>
>>     </application>
>>
>> </manifest>
>>
>> After upgrading to 0.10 and enabling new manifest merger, I thought I can
>> remove all flavor-related AndroidManifest.xml files and put in my
>> */main/AndroidManifest.xml:*
>>
>> <manifest xmlns:android="http://schemas.android.com/apk/res/android";
>> package="my.package">
>>
>>     <permission android:name="*${packageName}*.permission.C2D_MESSAGE"
>>         android:protectionLevel="signature" />
>>     <uses-permission android:name="*${packageName}*.permission.C2D_MESSAGE"
>> />
>>
>>     [...]
>>
>>     <application>
>>
>>         [...]
>>
>>         <receiver
>>             android:name=".gcm.GcmBroadcastReceiver"
>>             android:permission="com.google.android.c2dm.permission.SEND"
>> >
>>             <intent-filter>
>>                 <action android:name="com.google.android.c2dm.intent.RECEIVE"
>> />
>>                 <category android:name="*${packageName}*" />
>>             </intent-filter>
>>         </receiver>
>>
>>     </application>
>>
>> </manifest>
>>
>> When done, i get:
>> :app:processMoDebugManifest FAILED
>>
>> FAILURE: Build failed with an exception.
>>
>> * What went wrong:
>> Execution failed for task ':app:processMoDebugManifest'.
>> > java.lang.NullPointerException (no error message)
>>
>> * Try:
>> Run with --info or --debug option to get more log output.
>>
>> * Exception is:
>> org.gradle.api.tasks.TaskExecutionException: Execution failed for task
>> ':app:processMoDebugManifest'.
>> at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.
>> executeActions(ExecuteActionsTaskExecuter.java:69)
>>  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.
>> execute(ExecuteActionsTaskExecuter.java:46)
>>  at org.gradle.api.internal.tasks.execution.
>> PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecu
>> ter.java:35)
>>  at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.
>> execute(SkipUpToDateTaskExecuter.java:64)
>> [...]
>> Caused by: java.lang.NullPointerException
>> at com.google.common.base.Preconditions.checkNotNull(
>> Preconditions.java:192)
>>  at com.android.manifmerger.Actions$ActionLocation.<init>(
>> Actions.java:341)
>> at com.android.manifmerger.ActionRecorder.recordAttributeAction(
>> ActionRecorder.java:203)
>>  at com.android.manifmerger.PlaceholderHandler.visit(
>> PlaceholderHandler.java:85)
>> at com.android.manifmerger.PlaceholderHandler.visit(
>> PlaceholderHandler.java:96)
>>  at com.android.manifmerger.PlaceholderHandler.visit(
>> PlaceholderHandler.java:96)
>> at com.android.manifmerger.PlaceholderHandler.visit(
>> PlaceholderHandler.java:96)
>>  at com.android.manifmerger.PlaceholderHandler.visit(
>> PlaceholderHandler.java:96)
>> at com.android.manifmerger.PlaceholderHandler.visit(
>> PlaceholderHandler.java:62)
>>
>> Any ideas? Can't I use ${packageName} in main/AndroidManifest.xml file?
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "adt-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Xavier Ducrohet
Android SDK Tech Lead
Google Inc.
http://developer.android.com | http://tools.android.com

Please do not send me questions directly. Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to