2016-06-07 8 views
0

ich mit zwei Geschmacksrichtungen wie folgt eine Anwendung entwickle:Gradle bauen auf verschiedene productFlavors andernfalls

productFlavors { 
    free { 
     applicationId "com.udacity.gradle.builditbigger.free" 
     versionName "1.0-free" 
    } 
    paid { 
     applicationId "com.udacity.gradle.builditbigger.paid" 
     versionName "1.0-paid" 
    } 
} 

Jetzt habe ich admob Abhängigkeit für die kostenlose Version und will die kostenpflichtige Version vollkommen werbefrei machen, damit die Entscheidung beim Kompilieren der Abhängigkeit nur für die kostenlose Version. Ich habe versucht, dies zu tun wie folgt:

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile project(":showmessage") 
testCompile 'junit:junit:4.12' 
compile project(path: ':backend', configuration: 'android-endpoints') 
compile 'com.android.support:appcompat-v7:23.1.0' 
freeCompile 'com.google.android.gms:play-services-ads:8.4.0'} 

und wenn ich versuche, die gradle Aufgabe zu nennen installPaidDebug es gibt mir die folgende Fehlermeldung:

/home/hemal/Desktop/Udacity-android-nd/Build It Bigger/app/build/intermediates/manifests/full/paid/debug/AndroidManifest.xml Error:(33, 28) No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version'). Error:Execution failed for task ':app:processPaidDebugResources'. com.android.ide.common.process.ProcessException: Failed to execute aapt

Aber wenn ich einfach die folgende Zeile: compile 'com.google.android.gms:play-services-ads:8.4.0' Das Projekt ist nahtlos aufgebaut.

Wie überwinde ich das?

+0

In Ihrem Manifest fügen Sie einen Verweis auf den Wert aus dem Paket 'play-services-ads' hinzu. also musst du es hinzufügen oder dein Android-Manifest bearbeiten. –

+0

@ShadyAtef Können Sie bitte ausarbeiten? Vielleicht ein Beispiel? –

+0

@Khanal Okay. Wird auf die Antwort dort aufpassen. –

Antwort

1

Wie in den Kommentaren erwähnt, müssen Sie das Metadaten-Tag aus dem Manifest in Ihrem src/main-Verzeichnis in das Manifest in Ihrem src/free-Verzeichnis verschieben.

<!-- This meta-data tag is required to use Google Play Services. --> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

Ihr frei manifest wird in etwa so aussehen:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.udacity.gradle.builditbigger" > 


    <!-- Include required permissions for Google Mobile Ads to run --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 


    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 


     <!-- This meta-data tag is required to use Google Play Services. --> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 


     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 


       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <!-- Include the AdActivity configChanges and theme. --> 
     <activity 
      android:name="com.google.android.gms.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
      android:theme="@android:style/Theme.Translucent" /> 
    </application> 


</manifest> 
+0

Muss ich weitere Tags wie Tags oder Service-Tags zur Manifestdatei für kostenlose Apps hinzufügen? –

+0

Ja, es wird dem Manifest in src/main sehr ähnlich sein, ein Beispiel zu meiner Antwort hinzugefügt. – Joopkins

0

Ich glaube, Sie Split-Manifest-Dateien verwenden, aber beachten Sie, dass Manifest-Dateien zusammengeführt werden, während zu bauen. Sie können überprüfen merging rules, um mehr zu wissen

0

Hatte das gleiche Problem vor. Die Lösung ist manifestieren sich. Entfernen Sie das Meta-Tag aus dem üblichen AndroidManifest und erstellen Sie ein weiteres Manifest in Ihrem kostenlosen Modul und fügen Sie in diesem AndroidManifest Meta-Tags hinzu.

Das Problem ist beim Erstellen der kostenpflichtigen Version, es gibt ein Meta-Tag wie im Manifest definiert (weil es ein gemeinsames Manifest ist), und keine Abhängigkeit (wie Sie die Abhängigkeit nur in der kostenlosen Version hinzugefügt haben). Die kostenpflichtige Version kann also nicht erkennen, wozu dieses Meta-Tag gehört.