Ich habe eine kostenpflichtige Anwendung auf dem Android-Marktplatz, möchte jedoch eine kostenlose werbefinanzierte Version veröffentlichen.
Der einfachste Weg, dies zu tun, bestand darin, einen Zweig in meinem Subversion-Repository einzurichten, der den zusätzlichen Code zum Hinzufügen der Anzeigen enthält. Als ich dies jedoch auf dem Android-Marktplatz eingereicht habe, sind eindeutige Paketnamen erforderlich. Diese Lösung funktioniert bei mir nicht mehr, da ich das Paket jeder Klassendatei ändern müsste, was das Zusammenführen von Trunk und Branch sehr schmerzhaft machen würde.
Wie kann ich diese beiden Projekte am besten zusammenhalten und Patches gemeinsam nutzen, aber mit einem anderen Paket?
version-control
android
svn
Malfist
quelle
quelle
Antworten:
Haben Sie Compiler-Direktiven in Betracht gezogen ?
Beispiel:
Sie können genau dieselbe Codebasis beibehalten und die beiden Builds mithilfe von zwei separaten Build-Skripten oder einem parametrierbaren erstellen.
Lesen Sie dies und das , um dies mit Java zu tun . Und vielleicht das hier .
quelle
Nur Ihr Anwendungspaket muss eindeutig sein. Siehe hier . Das ist das Paket, das in Ihrer Manifestdatei deklariert ist. Sie können den größten Teil Ihres Codes in
com.mydomain.myapp
und nur eine andere Hauptaktivität in habencom.mydomain.myapp.free
.quelle
Wenn Sie wirklich getrennt arbeiten möchten, ist es am besten, es als zwei Teile desselben Repositorys einzurichten. Auf diese Weise können Sie zumindest Änderungen in den verschiedenen Zweigen zusammenführen. Wenn Sie die Dinge völlig getrennt halten möchten, werden Sie eine Menge schleppender Patch-Dateien ausführen.
Ich habe das getan und ehrlich gesagt ist es in der Praxis keine großartige Strategie. Insbesondere in kompilierten Umgebungen ist es viel besser, einen separaten Build-Prozess kostenlos und kostenpflichtig zu haben, sodass es statt zwei eine Codebasis gibt. Wenn es zwei Codebases Dinge werden auseinander.
quelle
Die Versionskontrolle ist eine schlechte Methode, um solche Dinge zu verwalten. Am Ende steht ein Wartungs-Albtraum - zwei separate Anwendungen, die nahezu identisch sein müssen.
Haben Sie eine Lösung für mehrere Projekte in Betracht gezogen? (caveot:.. Ich habe nicht wirklich das getan, aber es scheint möglich, und ich denke , Android es erlaubt , werde ich es versuchen Sie es später und sehen sicher) Kompilieren Sie alle Ihre App - Code in ein Hauptprojekt jar . Erstellen Sie dann zwei separate Android-Apps, eine für Ihre kostenpflichtige Version und eine für die kostenlose Version. Dies wird Ihr Paketbenennungsproblem lösen. Diese Apps werden für so ziemlich alles nur an das Hauptglas delegiert, außer dass Ihre Anzeigenversion den Code zur Unterstützung der Anzeigen enthält.
Sie können auch feststellen , diese Diskussion zu einem ähnlichen Thema interessant.
quelle
Wenn Sie Ihre App mit einem
feature toggle
erstellen, können Sie Ihr Ziel erreichen, müssen jedoch möglicherweise viel Code überarbeiten.Durch Definieren von 2 (ich würde 3 empfehlen) Feature-Container-Umgebung in einer INI-Datei wie:
Auf diese Weise haben Sie eine Version, die einheitlich ist und nur einen Zweig in Ihrer Versionskontrollquelle benötigt
In Ihren spezifischen Skripten müssen Sie dann überprüfen, ob die Funktion autorisiert ist. Wenn nicht, wird sie nicht angezeigt
quelle