2016-05-19 6 views
3

Ich habe 2 Produkt Geschmack. Lassen Sie uns das Beispiel so sagen:

productFlavors { 
    free { 
     applicationId 'com.free.android' 

    } 
    premium { 
     applicationId 'com.premium.android' 

    } 

Mein Problem ist, wenn ich

Intent resultIntent = new Intent(this, ExpiryListActivity.class); 
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
stackBuilder.addParentStack(ExpiryListActivity.class); 
stackBuilder.addNextIntent(resultIntent); 

Das Problem geschah verwenden, wenn stackBuilder.addParentStack(ExpiryListActivity.class) Die erste App, die die productFlavor frei verwendet nicht android.content.pm.PackageManager$NameNotFoundException Fehler verursacht. Aber die zweite App, die die productFlavor Premium verwendet, verursacht es . Dann lese ich die Dokumente, die stackBuilder.addParentStack(<Class>) Hinzufügen der Aktivität übergeordnete Kette wie von Manifest angegeben. Wie man dieses Problem löst?

Antwort

0

Sieht aus wie ich es gefunden habe. Auf AndroidManifest.xml

<activity 
      android:name=".ui.ExpiryListActivity" 
      android:label="@string/voucher_expiry_list" 
      android:screenOrientation="portrait" 
      android:theme="@style/AppTheme.NoActionBar.Slidable" > 
      <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".ui.MainActivity" /> 
     </activity> 

ersetze ich die Meta-Daten Name von:

<activity 
      android:name=".ui.ExpiryListActivity" 
      android:label="@string/voucher_expiry_list" 
      android:screenOrientation="portrait" 
      android:theme="@style/AppTheme.NoActionBar.Slidable" > 
      <meta-data 
      android:name=".ui.ExpiryListActivity" 
      android:value=".ui.MainActivity" /> 
     </activity> 

Es funktioniert, aber wenn es zurückdrücken kann MainActivity nicht zurück. Aber ich weiß, ob das nicht die beste Lösung ist. Bitte lassen Sie mich wissen, ob es eine andere bessere Lösung gibt. NB: Dies scheint passiert nur auf Android Lollipop (5,0)

1

TL; DR Änderung Ihrer Metadaten als

<meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="originalPackageName.ui.MainActivity" /> 

Das grundlegende Problem ist, dass gradle für die übergeordnete Aktivitätsklasse den Paketnamen erweitert das hast du in den Metadaten geschrieben.

Bei Ihrem kostenfreien Produktgeschmack versucht es eine Klasse an Ort com.free.android.ui.MainActivity

Und bei Ihrem bezahlten Geschmack zu finden, es eine Klasse an der Stelle zu finden versucht com.premium.android.ui.MainActivity

Aber gradle eigentlich nicht die Pakete neu strukturieren, wenn Sie verschiedene applicationId die für Ihr Produkt Aromen und die Klasse erwähnen ist noch originalPackageName.ui.MainActivity gelegen und damit die NameNotFoundException

Dabei ist originalPackageName ein Platzhalter für den Paketnamen, mit dem Sie Ihr Projekt gestartet haben.

+0

Hallo @Aashrai Ravoouro. Danke für deine Antwort. Am Anfang dachte ich auch so. Aber ich kann nicht zwei Manifeste haben. –

+0

Hmm, wie wäre es mit [manifest Platzhalter] (http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support) dann –

+0

Sorry für die späten Antwort @Aashrai Ravooru Ich habe diese nie benutzt. Aber danke für Ihre Referenz. Nachschlagen dafür! –

Verwandte Themen