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.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.

Reply via email to