I am not having this NPE and I just solved the same issue with GCM pushing it back only into main manifest. Does this happen only when flavors or build types have their own manifest on top of main?
On Thursday, May 1, 2014 5:59:07 PM UTC+2, Xavier Ducrohet wrote: > > 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] <javascript:>> 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] <javascript:>. >> 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.
