Probleme mit Android Studio und den Android fundamental codelabs

  • Antworten:7
Michael Ziegler
  • Forum-Beiträge: 6

13.01.2021, 05:29:58 via Website

Hallo!
Ich möchte mich in die App Entwicklung einarbeiten und habe mir dazu ein aktuelles Android Studio (4.1.1 vom 5. November 2020) herunter geladen. Nun dachte ich mir, ich könnte mal die Codelabs von developer.android.com durcharbeiten.

Direkt beim ersten Codelab "Build Your First Android App in Kotlin"(https: //developer.android.com/codelabs/ build-your-first-android-app-kotlin#0), das am 6. November 2020 zuletzt aktualisiert worden war, kam ich aber ins Grübeln. Da wird mit "apply plugin" ein Plugin eingebunden, aber so wie beschrieben geht das gar nicht, weil die gradle file Struktur sich hier inzwischen geändert hatte und inzwischen der "plugins" Block verwendet wird. Das war schon einigermaßen doof, konnte ich mir aber ergoogeln.

So, nun schaue ich mir das Codelab "Android fundamentals 09.2: App settings" (https: //developer.android.com/codelabs/ android-training-adding-settings-to-app#0), aktualisiert am 5. November 2020, an. Da soll man die Bibliothek com.android.support:preference-v7:26.1.0 einfügen. Allerdings wird mir die in meinem gradle file rot angezeigt und die rote Bulb bietet mir an diesen gradle Assistenten zu öffnen (was mir nichts bringt, weil auch Bibliotek damit einzufügen bringt den gleichen Zustand) oder es mit "Add /noinspect" zu unterdrücken. Trotz roter Kennzeichnung der Bibliothek ist ein Build erfolgreich. Im nächsten Schritt soll ich in der selbst erstellten preferences.xml das XML Tag für die eingefügte SwitchPreference so ändern, dass SwitchPreferenceCompat verwendet wird. Da sagt mit Android Studio "Element ist not allowed here". Danach würde ich dann in styles.xml... - geht nicht, weil gar kein styles.xml mit erzeugt wurde, inzwischen werden wohl Themes verwendet?

Da hänge ich irgendwie. Hat sich im letzten Android Studio Release so viel geändert, dass alle Codelabs (die ja auch aktuell sind) nicht mehr gehen? "My First Android App" klingt ja nicht, als würde es sich an die Experten richten. Ich habe zwar gar keine Android Erfahrung, programmiere aber seit Jahren in C, C++ oder C#. Auch Python oder andere Skriptsprachen kann ich eigentlich, nur ANT, Gradle oder IntelliJ sind bisher nicht so mein Gebiet.

Auf GitHub finde ich auch keine aktuellen Fehler dazu und wollte, bevor ich da einen aufmache und mich womöglich blamiere, hier mal fragen, ob mir wer einen Tipp geben kann? Allgemeiner Natur oder gerne auch bei dem aktuellen Problem, dass ich com.android.support:preference-v7:28.0.0 nicht einbinden kann. Ich compiliere mit API Version 30.

Was braucht man noch für informationen?

Danke für jeden Hinweis!

Kommentieren
Jokel
  • Forum-Beiträge: 1.530

13.01.2021, 07:33:46 via Website

Hallo
Ich habe mir mal beide Tutorials angesehen. In keinem der wird eine Supportlib benutzt und das Gradle File bearbeitet.

Du sagst du Kompilerst unter API 30 (compileSdkVersion 30) , wenn du unbedingt Supportlibs benutzen willst muss die compile Version und SupportLib Version übereinstimmen . „com.android.support:preference-v7:26.1.0“ wird nur mit compile 26 gehen.

Ab API 28 ist das Supportlib Prinzip veraltet benutze „androidx“.
Dies wird auch in deinen Tutorials benutz und auch wenn du ein neues Projekt mit dem Studio erstellst.
“com.android.support:preference-v7:28.0.0“ ist veraldet.

https://developer.android.com/jetpack/androidx/releases/preference

https://www.programmierenlernenhq.de/tutorial-android-settings-preferences-und-einstellungen/

https://developer.android.com/kotlin/ktx

— geändert am 13.01.2021, 10:20:53

Hilfreich?
Michael Ziegler
Kommentieren
Michael Ziegler
  • Forum-Beiträge: 6

13.01.2021, 11:21:14 via Website

Danke! Aber in dem Tutorial steht doch in Task 1 unter Punkt 1.3 "Use SwitchPreferenceCompat":

"In the Project > Android pane, open the build.gradle (Module: app) file in the Gradle Scripts folder, and add the following to the dependencies section:
implementation 'com.android.support:preference-v7:26.1.0'"

Sieht man unter dem gleichen Link unterschiedliche Versionen des Tutorials? V28 der Supportlib hatte ich mir auch schon mal gedacht, aber dann würde sicherlich der Rest des Tutorials nicht mehr passen. Und es brachte ohnehin keine Änderung...

Ich schaue mir aber das programmierenlernenhq Tutorial an. Beim Überfliegen habe ich aber schon gesehen, dass hier unter Punkt 2.2 auch das Theme in styles.xml hinzugefügt werden soll. Wenn ich ein neues Projekt in Android Studio anlege und Basic Activity wähle, dann wird bei mir keine styles.xml Datei angelegt. Zumindest ist im Tutorial mal die ganze styles.xml zu sehen, das übernehme ich dann einfach mal. Ich schaue es mir an!

Danke erstmal!

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

13.01.2021, 11:40:04 via Website

Ok in dem Tutorial steht wirklich an der von dir beschrienen Stelle.
implementation 'com.android.support:preference-v7:26.1.0'

erstens ist das Tut in Java du willst Kotlin machen.

Zweitens wird das Tut wohl auf Android API 26 geschrieben worden sein. Und benutzt SupportLibs du benutzt Androidx. Da du auf API 30 bist. Und ein Standart Projekt von AS benutzt.

AndroidX ist einiges anders auch das Layout.
„android.support.v7.preference.SwitchPreferenceCompat” wird auch nicht laufen mit androidx.

Das Tutorial ist alt auch wenn da 2020 steht.

— geändert am 13.01.2021, 11:41:03

Hilfreich?
Kommentieren
Michael Ziegler
  • Forum-Beiträge: 6

13.01.2021, 20:10:11 via Website

Also die programmierenlernenhq-Übung ist aber auch in Java (das macht grundsätzlich nichts), aber einerseits bezieht sie sich sehr auf das Beispiel, das während aller Übungen weiterentwickelt wird und dann ist es kostenpflichtig. Kann man machen, aber ich schaue mal, was ich sonst so zu den AndroidX Preferences finde.

Auf jeden Fall Danke für den Tipp, dass ich im falschen Lib-Universum war! Ich schaue auch mal, dass ich im GiThub einen Fehler zu den Codelabs aufmache.

Hilfreich?
Kommentieren
Michael Ziegler
  • Forum-Beiträge: 6

29.01.2021, 15:18:52 via Website

So, nun habe ich mich mal ein wenig weiter umgeschaut. Ganz offensichtlich gibt es nicht DIE EINE Tutorial Serie, die gut ist. Konnte man wohl auch nicht erwarten. Wenn man ein Thema hat, das einen interessiert, muss man, das ist aber immer so, verschiedene Bespiele suchen und findet dann eines. "Andrews's Tutorials" sind ganz nett oder MindOrks. Nur dass gerade die Tutorials von developers.android.com total Grütze sind und zwar vom ersten Lab an, hatte ich nicht erwartet.

Probleme hatte ich ja bei den Preferences. An sich total nett, man definiert das Preferences File im Android Studio und es baut einem dazu gleich die GUI. Tolle Idee! Super strukturiert finde ich! Aber dann fing es ja damit an, dass ich im Tutorial die vom android studio generierte Preferences Klasse gegen eine PreferencesCompat Klasse austauschen sollte. Hä? Wozu? Generiert mir die neuste Version alten Code?

Nach weiterer Lektüre kam ich zum Ergebnis, dass SharedPreferences die besser Wahl für mich sind und voila: Läuft prima. Nur verliert man damit die ziemlich tolle Funktion die Preferences über das studio definieren zu können. Warum eigentlich? Welche SharedPreferences Funktion hätte man denn nicht in eine neue Version der Preferences Klasse einbauen können? Warum braucht man da gleich ein ganz neues Interface und verliert damit die gute Integration in das studio? Und wenn das schon notwendig ist, warum wurde nicht auch das studio längst angepasst?

Kurze Zeit später las ich dann, dass man die SharedPreferences durch den Preferences Datastore ersetzt... Hallo? Da frage ich mich wirklich, warum Android so erfolgreich ist. Das ist ja kein Beispiel für API-Stabilität. Wer denkt sich denn so einen Quatsch aus? Ein Interface für den Entwickler hätte doch gereicht. Neuere Versionen bringen neue Methoden mit, das ist so, aber muss man jedesmal, wenn man was ändert gleich die ganze API neu bauen? Gerade, wenn es wie bei den Preferences nur darum geht Schlüssel/Werte-Paare zu speichern?

Ich weiß, dass man diese Fragen hier nicht beantworten kann, aber so richtig warm bin ich mit der Entwicklung von Android Apps noch nicht. Das ist doch alles sehr unhandlich.

— geändert am 29.01.2021, 15:21:04

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.01.2021, 15:39:23 via Website

Du musst i.d.r immer unterscheiden, ob die Funtkionen aus der Standard API von Android kommen oder über SupportLibs (androidx) hinzukommen.
Zudem ist der Datastore ja nicht unbedingt das gleiche wie SharedPrefs.
Du erreichts das gleiche, aber der Datastore ist dazu da, ganze Objekte per Protobuf wegzuschreiben.
Das ist mit SharedPreferences unr über den umweg über Json (String) oder Java Object Serializer möglich.

Einen Preferences Store schreibst du halt das ganze Objekt weg, welches deine Key/Value Paare enthält.
https://vladsonkin.com/proto-datastore-android-is-it-worth-it/
https://vladsonkin.com/3-practical-steps-to-master-android-datastore/

Damit ist aber das Konzept der SharedPrefs nicht ersetzt.
Es gibt vor und nachteile von beiden Technologien, z.b. dass SharedPrefs nicht asynchron funktionieren etc.
Klar könnte man beides integieren, aber dann hätte ich ja eine Abhängigkeit der standard SharedPrefs (aus der Android API) mit Funktionen der AndroidX Libs. Das will man vermeiden.
Siehe Hinweis in:
https://developer.android.com/reference/android/content/SharedPreferences

Es gibt doch in allen Programmierumgebungen mehrere Wege zum Ziel. In der Webentwicklung könnte man für einstellungen auch alle möglichen Technologien nutzen sei es Datenbank, Json Files, Redis,....

In erster Linie würde ich den Datastore aus AndroidX zum Speichern von Objekten nehmen, die ich in meiner App brauche. Wenn du ein gutes Datenmodell hast, kannst du ja einstellungen Speichern.
Nur zum Speichern von Key/Value Pairs wäre das aber etwas overkill und solage du keine Asynchronen Funktionen oder sonst was brauchst, reicht das völlig aus.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Michael ZieglerJokel
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

29.01.2021, 16:14:04 via Website

Hallo
Ich Glaube du verwechselt hier etwas.
Und zwar einfache SharedPreferences mit Editor und Commit.
Mit einer Einstellungs Seite zb die PreferencesCompat. Zu der natürlich auch das interface gehört.
Was früher in alten tuts die pref activity war.

Ps zum Thema Support Lib es ist auch ein unterschied ob du die alten Supportlibs benutzt
oder das,neue AndroidX.

— geändert am 29.01.2021, 16:24:56

Hilfreich?
Michael Ziegler
Kommentieren