Laboratorium Systemów Mobilnych 2015-02-27 Wykład 1 (Wstęp do programowania w systemie Android) Wojciech Wawrzyniak
Zaliczenie wykładu i ćwiczeń Wykład omówienie zagadnień Ćwiczenie praktyczne zastosowanie Zaliczenie: Zadania + projekt (50%) Egzamin (50%)
Literatura Andorid Developer - http://developer.android.com/index.html Professional Android Application Development - Reto Meier
Wprowadzenie
Android co to jest? System operacyjny oparty na Linux Kompilator Debugger Emulator Dalvik Virtual Machine (DVM)
Dalvik Virtual Machine dlaczego nie zwykła JVM? Plik.dex zamiast.jar Specjalny bytecode Zoptymalizowana pod kątem wielu JVM JIT (just-in-time compiler)
Instalacja środowiska - komponenty JDK SDK Android Środowisko programistyczne (np. Eclipse ) Plug-in do Eclipse (ADT) Ustawienie ścieżki do środowiska w Eclipse
Składniki aplikacji Android Aktywności (Activity) Widoki (Views) Usługi (Services) Dostarczyciele zawartości (Content Providers) Intencje (Intents) Odbiorniki (Broadcast receivers) Widżety (Widgets)
Hello Android Stworzenie prostej przykładowej aplikacji Hello Android
Src kody źródłowe Struktura Aplikacji Gen wygenerowane pliki Assets pliki wykorzystywane w aplikacji np. Obrazki Res zasoby Main.xml wygląd ekranu Strings.xml teksty w aplikacji AndroidManifest.xml
Struktura Aplikacji - src package com.example.helloandroid; import android.os.bundle; import android.app.activity; import android.view.menu; public class MainActivity extends Activity { } @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } @Override public boolean oncreateoptionsmenu(menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; }
Katalog gen /* AUTO-GENERATED FILE. DO NOT MODIFY. */ package com.example.helloandroid; public final class R { public static final class attr { } public static final class dimen { public static final int activity_horizontal_margin=0x7f040000; public static final int activity_vertical_margin=0x7f040001; } public static final class drawable { public static final int ic_launcher=0x7f020000; } public static final class id { public static final int action_settings=0x7f080000; } public static final class layout { public static final int activity_main=0x7f030000; }
Main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin"...> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout> Wygląd definiowany w XML Layout Komponent
Strings.xml Teksty definiowane w XML Posiadają nazwę - name
Budowa Systemu Android
Warstwy systemu Android
Liunx Kernel Android to system oparty na systemie Linux Linux zapewnia podstawowe operacje systemowe Użytkownik nigdy nie widzi podsystemu Linux Istnieją komendy umożliwiające dostęp do Linux shell (adb)
Libraries / Android Runtime Core Libraries: - java.rmi, javax.security.auth.kerberos, javax.sound, javax.transaction + java.io, java.math, java.lang, java.security, java.sql, java.crypto, javax.net
Dalvik VM Dalvik VM - googlowska implementacja Java VM Podstawowe różnice: Zoptymalizowana dla urządzeń mobilnych Uruchamiane są pliki.dex Inny zbiór bibliotek niż w Java SDK.dex + resources =.apk
Application Framework Warstwa zawiera moduły wysokiego poziomu pozwalające na łatwe budowanie aplikacji. Moduły te są preinstalowane jednak istenieje możliwość dodania do tej warstwy swoje autorskie moduły.
Application and Widgets Najwyżej położona warstwa, umieszczamy w niej swoją aplikację oraz tzw. Widget-y. Aplikacją nazywamy program działający na całym pełnym obszarze ekranu. Widget to aplikacja wykorzystująca tylko pewną prostokątną część ekranu.
Programowanie Narzędzia
Programowanie w Android vs? Tylko jedna widoczna aplikacja Aplikacja składa się z Aktywności(ekranów) Aplikacja to Aktywności + proces je zawierający
Dalvik Debug Monitor Server (DDMS)
LogCat Śledzenie logów działającej aplikacji
Debugger
Traceview
GUI - Layout
GUI Ekran Activity View prosty komponent View group layout (grupa) Hierarchia
Layout przykład XML Przykład projekt
Parametry layout FILL_PARENT/MATCH_PARENT - element stara się zająć pełen obszar układu. WRAP_CONTENT - element chce zajmować tylko tyle ile potrzebuje ekranu.
Atrybut id "+" - oznacza, że tworzymy nowy identyfikator. "id/text" - oznacza identyfikator o nazwie text. Analogicznie dla pozostałych View
Przykład Przykład użycie match_parent
Layout - hierarchia
Layouts LinearLayout TableLayout
Layouts - RelativeLayout <RelativeLayout <TextView android:id="@+id/label" android:text="type here:"/> android:layout_width="fill_parent" android:layout_height="wrap_content" <EditText android:id="@+id/entry" droid:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/label"/> <Button android:id="@+id/ok" android:layout_width="wrap_content" android:text="ok" droid:layout_height="wrap_content" android:layout_below="@id/entry" android:layout_alignparentright="true" android:layout_marginleft="10dip"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toleftof="@id/ok" android:layout_aligntop="@id/ok" android:text="cancel" /> </RelativeLayout>
TextView Button Spinner ProgressBar MultilineText Itp. GUI Komponenty
Projekt Timerprzykładowa aplikacja
Jak wspierać różne rozdzielczości i urządzenia?
GUI Wymiary w Android Rozmiar ekranu Gęstość ekranu Orientacja Niezależna gęstość pikesela (dip)
Dpi (niezależność od gęstości)
Jak wspierać różne urządzenia W grafikach używać rozmiarów w postaci dip, Dla tekstów używać: sp px = dp *(dip / 160) Używać <supports-screens> - określamy, jakie rozmiary ekranu są wspierane Różne layouty dla różnych rozmiarów ekranów Dostarczać różne bitmapy dla różnych rozmiarów ekranów
Supports-screens <manifest... > <supports-screens android:smallscreens="false" android:normalscreens="false" android:largescreens="true" android:xlargescreens="true" android:requiressmallestwidthdp="600" />... <application... >... </application> </manifest>
Różne apk dla kilku wersji Mamy 3 wersje w AM Takie wersje są pobierane z AM dla różnych urządzeń