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.packageto
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(PostExecutionAnalysisTaskExecuter.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.