2016-12-04 3 views
0

In meinem Projekt habe ich zwei Geschmacksrichtungen (kostenlos und kostenpflichtig). Der bezahlte hat einige Aktivitäten, die die aus dem Hauptpaket erweitern und zusätzlich eine Lizenzierungsimplementierung haben. Ich versuche nun, mein Manifest so einzurichten, dass es immer die Aktivität öffnet, die sich auf den aktuellen Geschmack bezieht. Wie geht das?Android Geschmack verwandte Absicht

Ich mache es so im Moment.

if(isFree) 
    startActivity(new Intent(this, ActivityA.class)); 
else 
    startActivity(new Intent(this, com.project.app.paid.ActivityA.class)) 

Das Problem ist, dass die kostenlose Version beschwert, dass es das Paket "com.project.app.paid." Das ist gut, weil Proguard es entfernt.

+0

Wie ist das anders als [Ihre Frage hier] (http://stackoverflow.com/questions/40858582/android-flavor-intent-activity)? –

+0

Eine Möglichkeit wäre, den beiden Aktivitäten einen '' für private Aktionen hinzuzufügen und dann 'android: exported =" false "', um zu verhindern, dass Anwendungen von Drittanbietern diese Aktivitäten starten. Verwenden Sie dann eine "Absicht" mit dieser Aktionszeichenfolge. – CommonsWare

+0

@Mike M. Das hat nicht funktioniert, weil die Aktivitäten nie explizit aufgerufen werden, so dass sie durch Proguard entfernt werden und ich keine Bounties setzen kann, um die Frage zu stellen. – XxGoliathusxX

Antwort

0

Ich weiß, das ist alte Post, aber da es nicht beantwortet wurde, lassen Sie mich Sie in die späte Richtung zeigen, falls jemand anderes auf diesen Beitrag stößt.

Sie können viel mit Aromen tun, aber was Sie versuchen, ist viel einfacher als jeder andere beantwortet hat.

Zuerst haben Sie eine Build-Variante, um Ihren Geschmack zum Debuggen und Ausführen auszuwählen. Verwenden Sie das also, sonst wird das gesamte Debugging die Standard-Hauptversion verwenden.

Zweitens, müssen Sie nicht Paketname erhalten, verwenden Sie einfach ein Build-Config-Flag oder überprüfen Sie Geschmack. I.E.

android { 
    signingConfigs { 
     releaseA35Demo { 
      storeFile file("$projectDir/../yaskeystore.jks") 
      storePassword System.getenv('YOUR_APP_STUDIO_STORE_PASSWORD') 
      keyAlias System.getenv('YOUR_APP_STUDIO_KEY_ALIAS') 
      keyPassword System.getenv('YOUR_APP_STUDIO_KEY_PASSWORD') 
     } 
    } 

    flavorDimensions 'default' 

    productFlavors { 
     a35Demo { 
      dimension 'default' 
      applicationId "com.appstudio35.yourappstudio" 
      buildConfigField "String", "SERVER_URL", '"http://fakeNumbers.compute-1.amazonaws.com:3006"' 
      buildConfigField "int", "BUSINESS_ID", "1" 
      versionCode 1 
      versionName "0.01.01-b1" 
      minSdkVersion 21 
     } 
     a35DemoDev { 
      dimension 'default' 
      applicationId "com.appstudio35.yourappstudio.dev" 
      buildConfigField "String", "SERVER_URL", '"http://fakeNumbers2.compute-1.amazonaws.com:3006"' 
      buildConfigField "int", "BUSINESS_ID", "2" 
      versionCode 1 
      versionName "0.01.01-b1" 
      minSdkVersion 21 
     } 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

      productFlavors.a35Demo.signingConfig signingConfigs.releaseA35Demo 
      productFlavors.a35DemoDev.signingConfig signingConfigs.releaseA35Demo 
     } 
    } 
} 

Dann verweisen sie einfach in Code wie:

BuildConfig.BUSINESS_ID 

Überall dort, wo Sie es brauchen. Stellen Sie nur sicher, dass Sie nicht versehentlich die BuildConfig eines Bibliotheksprojekts verwenden, wenn die BuildConfig automatisch importiert wird.

Der nächste Weg ist, wenn Sie Ihren Geschmack überprüfen möchten, können Sie einfach BuildConfig.FLAVOR, um zu sehen, auf dem Sie sich befinden. Beachten Sie jedoch, dass es einige Compiler-Warnungen gibt, die Sie verwenden, da Sie mit einem Flavor überprüfen und die BuildConfig davon ausgeht, dass es IMMER das ist, was Sie gerade für das Dropdown-Menü Build Variant haben. Das ist nicht wahr, Sie können dies immer ignorieren oder immer falsche Warnung, ich versichere Ihnen, es funktioniert.

Schließlich wird Ihr Paket von der Build-Variante gesteuert, die Sie debuggen Ich werde ein Bild hinzufügen, so dass Sie sehen können, wo Sie das ändern können.

enter image description here

Hoffnung, das hilft.

Aber das letzte, was ich sagen werde ist, dass Ihre MainActivity automatisch behandelt wird, müssen Sie das Paket für die MainActivity nicht einfach nur starten. Es wird die jeweilige Geschmacksrichtung für die, in der Sie sich befinden, verwendet. Wenn Sie eine Datei in eine Geschmacksrichtung verschieben, erstellen Sie normalerweise Ihre Geschmacksvariante und Ihre Varianten, sodass sie die jeweilige MainActivity verwenden. Was Sie tun, ist ein bisschen hacky, aber ich denke, es funktioniert. Allerdings würde ich empfehlen, dass das Flavor-Tool seinen Job macht und es für Sie startet.

Entfernen Sie einfach MainActivity von Main und stellen Sie sicher, es ist in Ihren beiden Geschmacksrichtungen bezahlt und kostenlos und Sie sind gut zu gehen. Zum Beispiel sehe ich habe eine Anwendung, Ordner oder die Datei nicht in meinem Haupt:

enter image description here

nun die offensichtlichen Punkte, um es noch zu sehen.

enter image description here

Also, wenn Sie das Aroma seine Arbeit tun lassen werden Sie in Ordnung sein. Wenn du versuchst, es in deinem Main zu verlassen, musst du mit den Konflikten und Warnungen umgehen.