2 versionen (free + donate) gleichzeitig mit minimalem aufwand maintainen

  • Antworten:13
Tim Meißner
  • Forum-Beiträge: 238

16.12.2010, 14:13:20 via Website

Hey!

Habe eine kleine Frage:
wie macht man es am besten, 2 verschiedene Versionen der selben App, die sich nur im Bezug auf Werbung unterscheiden mit dem wenigst möglichen Aufwand zu maintainen? Will nicht immer Codechanges übertragen müssen usw.
Hat da jemand Vorschläge bzw. wie macht ihr das?

freundliche Grüße
Tim Meißner

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

16.12.2010, 14:21:37 via Website

1) konstante setzen
2) library project

was dir lieber ist ;)

swordiApps Blog - Website

Antworten
Smartphone-Concepts
  • Forum-Beiträge: 86

16.12.2010, 14:30:19 via Website

Tim Meißner
wie macht ihr das?

Library
Alle Funktionen die von beiden Versionen genutzt werden liegen in der Library, diese wird dann lediglich erweitert

Antworten
Tim Meißner
  • Forum-Beiträge: 238

16.12.2010, 18:24:18 via Website

Ok nehmen wir an ich will eine Konstante setzen.
Dabei habe ich folgendes Problem:
1. Der Packagename ist der selbe? Wie löse ich das?
2. Wie kann ich die AdMob Werbung im Code deaktivieren? also sowas wie AdManager.Disable() oder so?^^

Hoffe ihr könnt mir auch dabei helfen.
Gruß
Tim

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.12.2010, 19:01:36 via Website

Mittels Compiler:

public final static boolean isFreeVersion = true;

Somit kannst du im Code drauf eingehen.Ist die Variable final blendet der Comiler sogar den Code aus der NON Free Version.
Bau die zwei Build Scripte und das ganze wäre mittels ANT sogar noch einfach zu lösen:

public final static boolean isFreeVersion = @ANT_ERSETZEN_LASSEN@;

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Tim Meißner
  • Forum-Beiträge: 238

16.12.2010, 19:12:22 via Website

Damit habe ich noch nie gearbeitet. Hast du dazu Tutorials oder könntest du es netterweise noch ein wenig ausführlicher erklären?

Bleiben tut aber dann mein AdMob Problem.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.12.2010, 19:44:57 via Website

ANT hat doch ne gute Seite,einfach mal nachschauen: ant.apache.org

Zu AdMob: Nö, das ist aus meiner sicht eher eine "Dependency"... auch wenn das jetzt eher Maven/Ivy like wäre.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

20.12.2010, 08:12:15 via Website

Tim Meißner
Ok nehmen wir an ich will eine Konstante setzen.
Dabei habe ich folgendes Problem:
1. Der Packagename ist der selbe? Wie löse ich das?
2. Wie kann ich die AdMob Werbung im Code deaktivieren? also sowas wie AdManager.Disable() oder so?^^

Jetzt verstehe ich auch Deine Frage zum AdMob abschalten besser... Am besten machst Du das wirklich per Library Projekt. Entwickle Deine App fertig. Mach Sie dann zur Library (in Properties, unter Android, dann unten den Haken setzen bei "is Library".

Dann machst Du zwei neue Projekte auf, eines mit Package Namen com.firma.paid und eines mit com.firma.free. Geh bei beiden Projekten auf Properties/Android, und gebe an dass sie Dein Library Projekt verwenden.

Erstelle nun in jedem der beiden neuen Projekte eine Hauptklasse, die von der Hauptklasse Deines Library Projekts erbt.

Schon hast Du die gleiche App in zwei verschiedenen Projekten mit unterschiedlichem package Namen.

Unterschiede zwischen Bezahl- und Kostenlos App implementierst Du nun dadurch, dass Du in Deinen neuen Hauptklassen Methoden der ursprünglichen Hauptklasse überschreibst.

Antworten
Tim Meißner
  • Forum-Beiträge: 238

20.12.2010, 16:23:26 via Website

Die Library Sache klingt relativ simpel.

Da habe ich aber noch ein paar Unklarheiten (hauptsächlich bezüglich der Manifeste):

1. <application android:icon="@drawable/icon" android:label="@string/app_name" <- wie greife ich da auf meine Library zu (mit den Referenzen)?

2. Welche Activitys muss ich in dem NICHT library Manifest angeben?

Beim Activity Wechsel crasht es jetzt immer:


12-20 16:27:40.616: ERROR/AndroidRuntime(7834): android.content.ActivityNotFoundException: Unable to find explicit activity class {de.tm.android.allgemeinwissen.noads/de.tm.android.allgemeinwissen.Fragemanager}; have you declared this activity in your AndroidManifest.xml?

— geändert am 20.12.2010, 16:28:30

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

21.12.2010, 09:03:11 via Website

Tim Meißner
Die Library Sache klingt relativ simpel.

Ist sie auch wenn man es einmal zum laufen gebracht hat. :D

Tim Meißner
1. <application android:icon="@drawable/icon" android:label="@string/app_name" <- wie greife ich da auf meine Library zu (mit den Referenzen)?

Das bleibt genau so. Wird das bei Dir nicht gefunden?

Tim Meißner
2. Welche Activitys muss ich in dem NICHT library Manifest angeben?

Da gibst Du die NICHT library Klasse als Activity an. Schliesslich soll diese ja ausgeführt werden, und nicht die ursprüngliche Klasse in Deiner Library.

Um sicher zu stellen dass Du eine Fehlermeldung bekommst fallst Du die Library Klasse versehentlich ausführen möchtest, kannst Du die Library Klasse als abstract definieren. Ich habe das bei mir z.B. so gemacht dass ich in der Library Klasse eine Methode werbungSetzen() drin habe. Die ist abstract definiert und wird jeweils überschrieben. In der Trial-Version wird dann dort das AdMob Banner gesetzt, in der Vollversion passiert in der Methode nichts.

Antworten
Tim Meißner
  • Forum-Beiträge: 238

21.12.2010, 14:45:47 via Website

zu 1. ja es wird gefunden -> allerdings die referenz aus dem nicht-library projekt (z.b. das icon)

läuft jetzt allerdings alles so wie ich es möchte :)

Antworten
Duckemai
  • Forum-Beiträge: 63

05.01.2011, 22:19:19 via Website

Hallo zusammen!

Dieser Thread ist sehr interessant. Ich hätte eine Frage dazu:

Wer eine Free- und eine Bezahlversion erstellt, möchte diese beiden ja auch irgendwann auf den Android Market hochladen.
Dort sollen sie dann getrennt erscheinen. Also ein App für umsonst und eines gegen Bezahlung. Das sollte mit Eurem Vorschlag ja
problemlos möglich sein.

Wenn ein User nun aber das kostenlose App downloaded und anschließen die Bezahlversion, dann sollte das kostenlose App auf dem
Smartphone von der Bezahlversion überschrieben werden. Da hier aber mit 2 unterschiedlichen
Packagenames gearbeitet wird, vermute ich mal, dass auf dem Phone auch beide Apps voneinander getrennt abgespeichert sind, also
mit 2 Icons.

Lässt sich die von Euch vorgeschlagene Variante des vererbten Library Projekts auch erweitern, so dass immer nur eines dieser Apps
auf dem Phone als Installation vorliegt?

Besten Dank

— geändert am 05.01.2011, 22:23:36

Antworten
Tim Meißner
  • Forum-Beiträge: 238

05.01.2011, 22:24:10 via Website

Du kannst nicht 2 Apps mit dem selben Packagenamen in den Market hochladen.
Von daher geht es nicht. Das muss man dann anders lösen (In-App kauf/aktivierung hab damit aber noch nicht gearbeitet)

— geändert am 05.01.2011, 22:24:34

Antworten
Duckemai
  • Forum-Beiträge: 63

06.01.2011, 14:37:58 via Website

Hallo!

Aber haben denn die zwei Apps unterschiedliche Packagenames? Es sind doch zwei Namen:
com.firma.paid und com.firma.free.
Die müsste ich doch beide auf den market laden können, oder?

Dann müsste man aber die gedownloadeten Apps auf dem Phone wieder zusammenführen.

Antworten