Ich habe eine einfache Möglichkeit gefunden, dies in Eclipse zu tun. Ich war ziemlich überrascht, wie einfach es war, nachdem ich es entdeckt hatte.
- Prüfen Sie in den Projekteigenschaften für com.app.free die Option "Is Library" auf true (Sie müssen das Projekt mindestens einmal kompiliert haben, bevor Sie dies ändern, sonst erhalten Sie eine Fehlermeldung, dass Bibliotheksprojekte nicht kompiliert werden können; wenn Sie diese Fehlermeldung erhalten, deaktivieren Sie einfach die Option, kompilieren Sie und prüfen Sie sie erneut.
- neues Projekt com.app.pro erstellen
- Fügen Sie das Projekt com.app.free als Bibliothek in den Projekteinstellungen im Android-Abschnitt des Pro-Projekts hinzu.
- eine neue Klasse MyApplication in com.app.pro erstellen und Application erweitern
- override onCreate() HINWEIS: Für die Kollegen, die kopieren und einfügen, ist dies NICHT dasselbe wie das onCreate(Bundle savedInstanceState) Bundle einer Aktivität. Sie müssen das Argument Bundle entfernen, da es sich um eine Anwendung und nicht um eine Aktivität handelt.
- Fügen Sie dann die statische Variable hinzu oder setzen Sie sie, die in der Validierungsmethode gelesen wird, um die Lizenz zu validieren. EX: IS_PRO = true; dann liest die Validierungsmethode die Variable und gibt true zurück, wenn IS_PRO true ist.
- Kopieren Sie den Inhalt des Manifests von com.app.free nach com.app.pro
- Hinzufügen von Android:name="MyApplication " zum Anwendungs-Tag im com.app.pro-Manifest
- com.app.free vor dem Attribut name für alle Aktivitäten anhängen. (dadurch weiß die Anwendung, dass Ihre Aktivitäten im Bibliothekspaket zu finden sind, das die kostenlose Version ist) EX: Android:name=".MainActivity" => Android:name="com.app.free.MainActivity"
- Jetzt kompilieren und Sie haben eine Pro-Version
Diese Methode setzt voraus, dass Sie eine globale Validierungsmethode verwenden. Ich habe zum Beispiel eine Klasse erstellt, die Benutzer mit einer DB verbindet, die auf meiner Domäne gehostet wird und feststellt, wann der Benutzer die App zum ersten Mal installiert hat. Für alle Pro-Only-Aktivitäten prüfe ich LicenseClass.isValidLicense(), die Daten vergleicht und true zurückgibt, wenn es weniger als die gewünschte Anzahl von Tagen ist. In der Funktion isValidLicense() prüfe ich, ob Application.IS_PRO auf true gesetzt ist und gebe true zurück, wenn dies der Fall ist.
Sie können also so viele Änderungen vornehmen, wie Sie wollen, und müssen nur beide neu kompilieren. Das Einzige, was Sie beachten müssen, ist, dass alle Änderungen, die Sie im Manifest com.app.free vornehmen, auch in der Pro-Version übernommen werden müssen. Aber das ist bei jeder Anwendung der Fall, denn bei Android-Apps müssen Sie angeben, welche Aktivitäten Sie auf jeden Fall verwenden werden.
HINWEIS: Sie können alle Assets und Ressourcen löschen (nicht jedoch den Ordner res selbst), die bei der Projekterstellung automatisch generiert werden, da sie nicht verwendet werden. Außerdem ist die einzige benötigte Klassendatei die MyApplication-Datei aus Schritt 3. Das bedeutet, dass Sie auch die MainActivity.class löschen können, die ebenfalls automatisch generiert wird, da sie ebenfalls nie verwendet wird. Sie können auch alle Tags entfernen, die in der Pro-Version nicht verwendet werden. EX: Ich habe eine BuyPro-Aktivität, die sich öffnet, wenn die Validierung fehlschlägt. Da die Validierung in der Pro-Version nie fehlschlägt, ist sie nicht erforderlich. Natürlich sind all diese Löschungen optional, ich wollte Sie nur wissen lassen, was ich gelernt habe.
CONS: Der einzige Nachteil, den ich bisher gefunden habe, ist, dass Sie keine Switch-Anweisungen mit Ihren Ressourcenvariablen verwenden können, da sie keine Konstanten mehr sind. Wenn Sie also ein Projekt als Bibliothek verwenden, wird jede Variable, die Sie z. B. in der Datei strings.xml erstellen, automatisch überschrieben, wenn Sie in der Pro-Version eine Variable mit demselben Namen deklarieren. Für mich ist das kein Nachteil, denn ich mag die Verwendung von Schalterzuständen in Java nicht, weil sie nur den Wechsel auf den Typ int zulassen und konstante Werte erfordern. Das bedeutet, dass ich in Java normalerweise sowieso if ... else-Statements verwenden muss. Außerdem hilft Eclipse bei der Konvertierung von switch-Anweisungen, wenn man den Cursor auf das switch-Schlüsselwort setzt, Strg+1 drückt und dann auf convert to if else klickt. Außerdem finde ich es ziemlich nützlich, dass die Ressourcen überschrieben werden, weil man Dinge tun kann, wie app_name von "app free" zu "app pro" zu ändern oder ein neues Drawable für z.B. das App-Icon hochzuladen, indem man einfach die neue Version an der Stelle erstellt, an der sie in der freien App existiert. EX: Wenn die res/values/string.xml z.B. 100 String-Variablen enthält, Sie aber in der Pro-Version nur den app_name ändern wollen oder müssen, erstellen Sie einfach die res/values/string.xml neu (NICHT kopieren) und fügen Sie die Variable app_name hinzu. Jetzt wird die app_name-Variable in der kostenlosen Version überschrieben, was bedeutet, dass die Datei string.xml in der Pro-Version nur noch 1 Variable statt 100 enthalten muss, da dies die einzige Variable ist, die sich geändert hat. Easy Peasy :-)
EDIT: Ich habe herausgefunden, dass Eclipse nicht zulässt, dass man .apk's für Bibliotheken exportiert, also muss man die Option "Is Library" in der kostenlosen Version deaktivieren, nachdem man sie als Bibliothek in der Pro-Version hinzugefügt hat. Soweit ich das beurteilen kann, ist das Einzige, was dies bewirkt, dass Eclipse Sie nicht vor dem Problem der Switch-Anweisung warnt. Ansonsten scheint es gut zu funktionieren.