Verschiedene Versionen unterstützen/testen

  • Antworten:13
Droide
  • Forum-Beiträge: 8

19.08.2012, 08:22:01 via Website

Hey Leute,
ich schreibe gerade ne kleine App. Als build-target habe ich die api14 ausgewählt(4.0). Als min-target die api 8(2.2). So wenn ich die App auf meinem HTC (4.03) laufen lasse ist das kein Problem. Ich nutze unter anderem die ActionBar. Diese ist ja erst ab Android 3.0 verfügbar. Jetzt wollte ich mal mit nem Emulator die App auf nem 2.2 System laufen lassen, um zu schauen wie die App dann dort ohne ActionBar aussieht. Möchte nämlich auch ältere Versionen unterstützen. Allerdings bekomme ich das nicht hin, habe nen Emulator mit 2.2 ausgewählt. Will ich die app nun builden, findet er kein passendes device wegen 4.0. Aber wie kann ich jetzt auswählen dass er es zum testen mal auf 2.2 machen soll? Wenn ich die app später in den store stelle, wie läuft das da eigentlich ab zwecks Versionen dass die richtige installiert wird?

Danke schonmal, blicke da nämlich gerade leider überhaupt nicht durch.

Grüßle

Antworten
Droide
  • Forum-Beiträge: 8

19.08.2012, 08:31:09 via Website

Ok sorry für den voreiligen Post, nach nem Neustart von Eclipse konnte ich nun auch endlich als Build-Target 2.2 auswählen. Allerdings kann er dann nicht kompilieren, eben wegen der ActionBar. Soweit klar, nun stellen sich mir jedoch zwei fragen. Gibt es ne Möglichkeit, iwie abzufragen auf welcher Version die App gerade läuft/installiert werden soll umso dann die ActionBar wegzulassen und das Android 2.2 Gegenstück dafür zu benutzen?

Dann ne weitere Frage, als Beispiel ich lasse alles so wie es ist, dann müsste ich als min-Target im Manifestfile ja die API 3.0 angeben. Wie weiß jetzt aber ein User im Store dass er meine APp nicht nutzen kann bzw nicht installieren kann, oder bemerkt dass Android automatisch und installiert dann gar nicht erst?

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

19.08.2012, 08:37:28 via App

Droide
Ok sorry für den voreiligen Post, nach nem Neustart von Eclipse konnte ich nun auch endlich als Build-Target 2.2 auswählen. Allerdings kann er dann nicht kompilieren, eben wegen der ActionBar. Soweit klar, nun stellen sich mir jedoch zwei fragen. Gibt es ne Möglichkeit, iwie abzufragen auf welcher Version die App gerade läuft/installiert werden soll umso dann die ActionBar wegzulassen und das Android 2.2 Gegenstück dafür zu benutzen?

Dann ne weitere Frage, als Beispiel ich lasse alles so wie es ist, dann müsste ich als min-Target im Manifestfile ja die API 3.0 angeben. Wie weiß jetzt aber ein User im Store dass er meine APp nicht nutzen kann bzw nicht installieren kann, oder bemerkt dass Android automatisch und installiert dann gar nicht erst?
Die App bzw. das Update wird ihm dann gar nicht erst angeboten.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Droide
  • Forum-Beiträge: 8

19.08.2012, 08:49:31 via Website

Ok dankeschön.
Würde ich jetzt ausversehen als min-target api 8 wählen, welche gar nicht unterstützt wird. Dann würde im die app angeboten werden, er könne sie auch laden jedoch würde es beim start/install zum fehler kommen und es würde wohl schlechte bewertungen hageln oder !?

Dann weiß ich ja schonmal dass das min-Target quasi absichert, hat aber jemand nen Tipp zwecks Action Bar wie ich das umsetzen kann für früher Versionen, auch ohne die Sherlock Action Bar zu nutzen.

Danke schonmal für die Hilfe

Antworten
Droide
  • Forum-Beiträge: 8

19.08.2012, 10:13:20 via Website

Mhh damit komme ich nicht so ganz klar. Was soll dass sein? Aber habe gerade gesehen dass es für die Sherlock ActionBar auch nen Zusatz für ne MapActivity gibt, dann könnte ich doch Sherlock nutzen.

Nochmal zu den verschiedenen Versionen, nur um sicherzugehen dass ichs richtig verstanden habe. Ich habe ja mein build-target, so mit diesem kompiliere ich die app. Das angebene min-target sagt dem store welche versionen meine app unterstützt, sprich wer es laden kann. Läd ein User meine App wird das .apk File installiert und die app kann genutzt werden. Nutze ich jedoch ne Funktion wie die ActionBar und gebe an min Target = 8, dann kann ein User mit 2.2 die App laden, jedoch stürzt sie beim starten ab. habe ich das so richtig verstanden?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

19.08.2012, 12:07:48 via Website

dann kann ein User mit 2.2 die App laden, jedoch stürzt sie beim starten ab. habe ich das so richtig verstanden?

Sie wird abstürzen, wenn dein Code eine nicht vorhandene Funktion aufruft, was ja nicht zwangsläufig beim Start passieren muss.
Mit anderen Worten kannst du die betreffenden Funktionen mit einem if() gegen die Ausführung auf ungeeigneten Systemen schützen, um Abstürze auf älteren Android-Versionen zu verhindern.

Antworten
Ultimate Software
  • Forum-Beiträge: 110

19.08.2012, 15:42:29 via Website

Ein guter Bericht ist in der aktuellen Android360 zum ActionBarSherlock, vielleicht hilft das.

Du kannst aber auch alternativen einbauen, ich mache es folgendermaßen:

Ich baue um alle Teile die in der alten Version nicht gehen eine If-Abfrage bzgl. der Version und implementiere dann eine Alternative. Du MUSST immer mit dem neuesten SDK kompilieren, aber es läuft dann auch auf den alten Emulatoren.... fast ein Zauber, aber so geht es. Solange du auf dem alten Emulator keine "neueren" Functionen verwendest ist alles toppy. (auch wenn sich mir das bis heute nicht erschliesst, dass das geht... wen ich an meine Arbeitsumgebung denke, dort sorgt schon ein JDK-Wechsel für Chaos) ;-)

Achja, die If-Abfrage ist recht simpel, hier ein Beispiel:

1if (Build.VERSION.SDK_INT >= 11) {
2 notificationLevel11AndUp(context);
3 } else {
4 notificationLowerThan11(context);
5 }

— geändert am 19.08.2012, 16:17:23

<td class="alt1"> <!-- google_ad_section_start -->Mehrere WLANs?? Versuch doch mal den <a href="http://goo.gl/7ojEp&quot; target="_blank">SSID Selector</a>: <img src="images/smilies/extra/thumbsup.gif" border="0" alt="" title="Thumbsup" class="inlineimg" /><!-- google_ad_section_end --> </td>

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

19.08.2012, 16:36:18 via Website

Du MUSST immer mit dem neuesten SDK kompilieren

Weil?

Antworten
Droide
  • Forum-Beiträge: 8

20.08.2012, 12:42:43 via Website

Danke für die Antworten. Weiß jetzt wie ich vorgehen muss, habe jetzt aber die Sherlock genommen und klappt bisher soweit :)

Aber ist mit der Compatibility Lib die Android Support Lib gemeint?

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

20.08.2012, 12:48:39 via Website

Droide
Aber ist mit der Compatibility Lib die Android Support Lib gemeint?

Klar. Das Package wurde offiziell als "Android Compatibility Package" angekündigt. Irgendwann im Laufe der Zeit hat Google wohl den Namen geändert. Im Ändern sind die ohnehin ganz groß.

Hier der Link.

Antworten
Droide
  • Forum-Beiträge: 8

21.08.2012, 08:16:07 via Website

Ok danke, dann weiß ich ja bescheid.

Allerdings bevorzuge ich dann doch lieber die Sherlock Action Bar, denn die von der SupportLibrary unterstüzt ja soweit ich weiß nur nen teil für die älteren Android Versionen...meine ich zumindest gelesen zu haben. Oder linkt sie die komplette ActionBar, mit allen Features wie auf oben unten teilen, statisch dazu sodass alles in früheren Versionen genutzt werden kann?

Antworten
Ultimate Software
  • Forum-Beiträge: 110

21.08.2012, 09:12:09 via Website

and dev
Du MUSST immer mit dem neuesten SDK kompilieren

Weil?

OK, ungünstig formuliert, ich meinte genauer: Du musst die größte Android-Version nehmen, deren Funktionen du nutzen möchtest.. warum? Weil ansonsten die alten Android-Versionen natürlich die neuen Funktionen als Fehler (weil unbekannt) ankreiden würden und damit nichts machen könnten.

Die neue Version kennt ja dann neue und alte Funktionen, einzige Ausnahme wo das nicht funktioniert ist, wenn sich die Signatur einer Funktion geändert haben sollte..... dann bleibt nichts anderes als Reflection oder 2 Apps draus machen.

— geändert am 21.08.2012, 09:12:58

<td class="alt1"> <!-- google_ad_section_start -->Mehrere WLANs?? Versuch doch mal den <a href="http://goo.gl/7ojEp&quot; target="_blank">SSID Selector</a>: <img src="images/smilies/extra/thumbsup.gif" border="0" alt="" title="Thumbsup" class="inlineimg" /><!-- google_ad_section_end --> </td>

Antworten