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.
