(marec 2023: článok je rozpracovaný)

API verzie Android

https://developer.android.com/codelabs/android-room-with-a-view#0

https://developer.android.com/courses/fundamentals-training/toc-v2 : vv230214

https://www.tutorialspoint.com/android/android_overview.htm : 1.6 .. 6

https://www.w3schools.blog/android-tutorial : 1 .. 10 ( https://www.w3schools.com/ )

https://www.javatpoint.com/android-tutorial :  1.5 .. 8

https://www.itnetwork.cz/java/android :

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

coroutines (korutiny) : https://developer.android.com/kotlin/coroutines,  https://novotnyr.github.io/scrolls/korutiny-v-kotline/

Android

je operačný systém, na báze Linux-u. V jeho počiatkoch teda poslúžil osvedčený operačný systém Linux, v ktorom boli naportované hardware rozhrania, ako napríklad display, klávesnica, čítačka pamäťových kariet, rozhranie pre špeciálne karty (napríklad SIM). Keďže operačné systémy Unix a Linux sú postavené na báze objektového programovania (OOP), aj samotný Android funguje v tomto duchu. Rozšírenie Android-u má i tú príčinu, že podporuje vývoj doplnkových programov preň a poskytuje kodérom dokumentáciu.

Zjednodušovanie ovládania výpočtovej techniky postupom času štandardizuje jednotlivé funkčnosti rôzných operačných systémov, nie len u systému Android, ale i iOS, Ubuntu-touch a iných.

Keďže Android je najrozšírenejší OS, tak existuje mnoho výrobcov špecializovaných zariadení pre všetky možné oblasti. Aj preto odporúčam sa naučiť moderne programovať pre Android a získať tak možnosť vytvárať vlastné aplikácie, ale aj spolupracovať na rozsiahlých projektoch.

Ako Android funguje ? Princíp je prehľadný a zákonitý. Samotné dataily sú však rozsiahlé. Najvhodnejšie je najprv získať čo najviac informácií o princípe a potom sa oboznámiť s technikami a následne môžeš začať programovať. Samozrejme že dá sa vstúpiť do výukových kurzov pre začiatočníkov, avšak bez úvodných informácií nebude rýchlosť postupu učenia efektívná.

Konvencia pomenovávania Android vývojármi: https://github.com/TreyCai/AndroidNamingConvention

Odporúčania

  • Používaj hlavnú aktivitu a v nej vnorené fragmenty, prípadne menšie množstvo aktivít a potrebné množstvo rodičovských a detských fragmentov
  • Pre dáta použi ViewModel deklarovaný na správnej úrovni aktivity, alebo fragmentu. Pre základné odovzdanie dát použi Bundle. Za zastaralé predávanie dát považuj public dáta, ba aj komunikáciu cez interface.

 

Maven repozitár: https://mvnrepository.com/

Android Studio

  • Android GradlePlugin: 7.3.0 (Sep 2022), ...
  • Nastavenie Gradle user home: Settings (Preferences) -> Build,Execution,Deployment -> Build Tools -> Gradle -> Gradle user home: /Users/<homeDir>/.gradle/
  • Nastavenie Gradle JDK: Settings (Preferences) -> Build,Execution,Deployment -> Build Tools -> Gradle -> Gradle JDK: Embeded JDK version 11.0.15/Applications/Android Studio.app/Contents/jbr/Contents/Home
  • actual versions for AS projekt: File -> Project structure: Gradle = 7.5 , SDK Build Tools = 30.0.3 , NDK = N/A (23.1.7779620) , JDK = 11
  • Párovanie Android <-> AS cez WiFi

JSON - GSON

Jedná sa o analyzátor a generátor JSON, od spoločnosti Google. Licencia je Open source. Alternatívne produkty: Jackson, Boon.

  • serializácia a deserializácia: prevod medzi objektovou a textovou formou
  • vytváranie a spájanie JSON objektov
  • manuály na: jenkov.com,

Pridanie GSON do projektu:

dependencies {
    ...
    implementation 'com.google.code.gson:gson:2.10.1'
}

Príklad zobrazenia stringu JSON v usporiadanom formáte:

AlertDialog alertDialogResponse = new AlertDialog.Builder(getActivity()).create();
alertDialogResponse.setTitle("Main response");
alertDialogResponse.setMessage("responseCode=" + responseCode
                + "\npretty JSON response=\n" + new GsonBuilder().setPrettyPrinting().create().toJson(
                        new Gson().fromJson(responseJson, JsonObject.class)));
alertDialogResponse.setButton(Dialog.BUTTON_POSITIVE,"Ok",new DialogInterface.OnClickListener(){
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // ... code for action onClick to "Ok" button 
    }
});
alertDialogResponse.show();

 

HTTP komunikácia

odosielanie a príjem dát cez REST API rozhranie

  • pridať do: manifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"&gt;
  ...
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application
    ...
        android:usesCleartextTraffic="true"
        android:networkSecurityConfig="@xml/network_security_config">
    ...
    </application>
</manifest>

  • vytvoriť konfiguráciu s povolenými adresami v: app/src/main/res/network_security_config.xml :

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">127.0.0.1</domain>
        <domain includeSubdomains="true">192.168.1.125</domain>
        <![CDATA[]]>
    </domain-config>
</network-security-config>

 

Android LiveData

Pozorovanie zmien v aktívnom zobrazení. Je založené na "Observer Design Pattern in Java". Realizácia je možná z z viacerých miest, napríklad: SQLite, ArrayList, ViewModel). Triedu LiveData je možné rozšíriť o MutableLiveData, ktorá pridáva metódy: postValue() a setValue() pre RecyclerView.

 

MySQL

pripojenie priamo na SQL je možné, avšak Android nieje implicitne dimenzovaný na prenos väčších objemov dát, teda odporúčam komunikovať cez API a teda ak máme dáta na serveri, tak si vyrobme napríklad v PHP vlastné REST API a komunikujme cez HTTP pomocou CRUD:

  • konekt na databázu
  • editácia dát

Poznámka: v AS 2022.1.1 (Eel) sa mi nepodaril connect na MySQL 8.0 , kľaklo to na: Connection connection = DriverManager.getConnection("jdbc:mysql://host:gate/db", "user", "pass"); (nezabodni: Class.forName("com.mysql.cj.jdbc.Driver").newInstance(); ) , problém bol aj s: implementation 'mysql:mysql-connector-java:6.0.6' a MySQL 5.7

Pridanie MySQL Connector do projektu:

dependencies {
    ...
    implementation 'com.mysql:mysql-connector-j:8.0.31'
    // OLD: implementation 'mysql:mysql-connector-java:8.0.31'
    //implementation fileTree(dir: 'libs', include: ['*.jar'])
    // need download this jar and copy to app/libs/ :
//implementation files('libs/jboss-common-jdbc-wrapper.jar')

}

 

SQLite

Poskytuje lokálne uloženie údajov vo forme databáze (obdobne ako MySQL, či iné). Ak potreby aplikácie na množstvo údajov presiahnú nízku mieru, potom tento spôsob prospeje. Napríklad pre offline fungovanie aplikácie je to takmer nutnosť.

 

ViewModel

Umožňuje komunikáciu medzi aktivitami a fragmentami či už rodičovskými, alebo detskými. Ukladá dáta do vyrovnávacej pamäte a udržiava ich, na rozdiel od bežných tried s dátami, ktoré je nutné uložiť pred komunikáciou s okolitými cieľmi. Životný cyklus ViewModel je počas trvania aktivity, či trvania fragmentu, v ktorých boli definované ( od onCreate() po volanie onCleared() ). ViewModel je vhodné použiť na úrovni pre neopakovateľné obrazovky, inak by inštancia trvala. Taktiež jeho inštanciu použijeme len v aktivite a fragmente a neposkytujeme ju ďalej.