Vývoj SW pro mobilní zařízení s Androidem Ing. Jan Kaláb, IPEX a.s., 6.12.2012
Vývoj SW pro mobilní zařízení s Androidem Obsah 1. Historie OS Android a vývojové milníky 2. Vnitřní architektura systému 3. Programovací jazyky 4. Vývojová prostředí 5. Ladění
6. Distribuce aplikací 7. Demo aplikace pro tuto konferenci 8. Užitečné odkazy
Vývoj SW pro mobilní zařízení s Androidem Historie OS Android a vývojové milníky
•
2003 o
•
• •
o
Android Inc. Andy Rubin
2005 o
•
Google kupuje Android
o o
•
2007 o
Open Handset Alliance
2008 o
2009
o
2010 o
•
o
•
2.2 Froyo 2.3 Gingerbread
2011 o
HTC Dream (G1)
1.5 Cupcake 1.6 Donut 2.0 Eclair
o
3.0 Honeycomb 4.0 Ice Cream Sandwich
2012 o o
4.1 Jelly Bean 4.2 ...
Vývoj SW pro mobilní zařízení s Androidem Vnitřní architektura systému
https://commons.wikimedia.org/wiki/File:Android-System-Architecture.svg
Vývoj SW pro mobilní zařízení s Androidem Programovací jazyky Java 6 Doporučeno Dalvik VM Spor s Oracle
• • •
XML Popis zdrojů
•
o o o o
UI Řetězce Styly …
C
• • • •
NDK JNI SDL Různé architektury!
Další Bash SL4A
• •
o
Python, Lua, Perl, PHP, …
Vývoj SW pro mobilní zařízení s Androidem Vývojová prostředí Eclipse Doporučeno ADT Dá se naklikat vše
• • •
o
o o o o
o
UI Šablony aplikací Build Emulátor Debugger …
Ant
• •
CLI Build, install, lint, …
Vývoj SW pro mobilní zařízení s Androidem Vývojová prostředí NetBeans NBAndroid
Maven android-maven-plugin
Visual Studio NDK
vim
• •
• •
vim-android
Vývoj SW pro mobilní zařízení s Androidem Ladění Android Debug Bridge adb logcat
•
•
•
•
stack trace filtr (dalvikvm:S)
android.util.Log.wtf("tag", "zpráva");
I/Velvet.VelvetFactory( 1728): refreshing search history. I/LocationManagerService( 291): request network (pid 1728) 300000 300000 E/GPS ( 291): [gps_inject_location][line = 721] : Failed with GPS driver is not initialized I/Gmail ( 2138): MainSyncRequestProto: lowestBkwdConvoId: 0, highestHandledServerOp: 2326570, normalSync: true D/Digital Clock( 1987): Update broadcast received.
Vývoj SW pro mobilní zařízení s Androidem Ladění Device Monitor Švýcarský nůž
•
• • • • •
logcat Hierarchie UI Profilování OpenGL …
Vývoj SW pro mobilní zařízení s Androidem Distribuce aplikací Play Store Registrace 25 $ Omezená velikost
• •
•
• • • •
•
50 MB APK 2 × 2 GB data
Statistiky Aktualizace Crash reporty Licencování
Ruční distribuce Umístíte APK na web Nutno povolit instalace v zařízení
• •
Alternativní markety GetJar SlideMe Amazon
• • •
Vývoj SW pro mobilní zařízení s Androidem Služby a funkce API
• • • • • • • • • •
Notifikace Telefonie Kontakty SIP Zprávy NFC Geolokace Senzory OpenGL Media
• • • • • • • • • •
Bluetooth Síťová spojení Správa účtů Rozpoznávání hlasu Syntéza hlasu Fotoaparát Vstupní metody Gesta SQLite databáze …
Vývoj SW pro mobilní zařízení s Androidem DEMO Zadání: Vytvořit dednoduchou aplikaci s jedním tlačítkem, která po stisknutí otevře prohlížeč s webem konference Teorie a praxe IP telefonie. SDK https://developer.android.com/sdk Windows, Linux, Mac
Vývoj SW pro mobilní zařízení s Androidem Založení projektu
•
android create project • • • •
•
•
-t android-4 #1.6 -p . -k cz.ipex.iptelefon -a IpActivity
git init git add git commit ant debug install
Vývoj SW pro mobilní zařízení s Androidem AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cz.ipex.iptelefon" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="16" />
Vývoj SW pro mobilní zařízení s Androidem Zdroje res values (řetězce, styly, metriky, barvy, pole, …) values-cs (české řetězce, styly, metriky, barvy, …) … layout (vzhled) layout-large (vzhled pro tablety) layout-land (vzhled na šířku) … drawable (bitmapy) drawable-hdpi (bitmapy ve vysokém rozlišení) … menu raw …
Vývoj SW pro mobilní zařízení s Androidem Řetězce values/strings.xml
<string name="app_name" translatable="false">Teorie a praxe IP telefonie <string name="button">Open web values-cs/strings.xml
<string name="button">Otevřít web
Vývoj SW pro mobilní zařízení s Androidem Layout
<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" android:layout_centerInParent="true" android:onClick="openBrowser" />
Vývoj SW pro mobilní zařízení s Androidem Crash! Po stisku tlačítka aplikace spadne! Proč?
Vývoj SW pro mobilní zařízení s Androidem Crash! Po stisku tlačítka aplikace spadne! Proč?
Logcat! E/AndroidRuntime(14716): FATAL EXCEPTION: main E/AndroidRuntime(14716): java.lang.IllegalStateException: Could not find a method openBrowser(View) in the activity class cz.ipex.iptelefon.IpActivity for onClick handler on view class android.widget.Button with id 'button' E/AndroidRuntime(14716): at android.view.View$1.onClick(View.java:3578) E/AndroidRuntime(14716): at android.view.View.performClick(View.java:4084) E/AndroidRuntime(14716): at android.view.View$PerformClick.run(View.java:16966) E/AndroidRuntime(14716): at android.os.Handler.handleCallback(Handler.java:615) E/AndroidRuntime(14716): at android.os.Handler.dispatchMessage(Handler.java:92) E/AndroidRuntime(14716): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(14716): at android.app.ActivityThread.main(ActivityThread.java:4931) E/AndroidRuntime(14716): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(14716): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(14716): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:791) E/AndroidRuntime(14716): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) E/AndroidRuntime(14716): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(14716): Caused by: java.lang.NoSuchMethodException: openBrowser [class android.view.View] E/AndroidRuntime(14716): at java.lang.Class.getConstructorOrMethod(Class.java:460) E/AndroidRuntime(14716): at java.lang.Class.getMethod(Class.java:915) E/AndroidRuntime(14716): at android.view.View$1.onClick(View.java:3571) E/AndroidRuntime(14716): ... 11 more
Vývoj SW pro mobilní zařízení s Androidem Aktivity
• • •
To, co uživatel vidí Životní cyklus Back stack
Vývoj SW pro mobilní zařízení s Androidem IpActivity.java package cz.ipex.iptelefon; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; public class IpActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void openBrowser(View view) { if (BuildConfig.DEBUG) Log.i("ip-telefon", "Click!"); startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.iptelefon.cz"))); }
}
Vývoj SW pro mobilní zařízení s Androidem Intent Záměry, akce • • • • •
Otevření prohlížeče Odeslání zprávy Sdílení na sociální síť Navigace …
Android ví, co která aplikace umí… …a můžeme mu říct, co umí naše aplikace.
Vývoj SW pro mobilní zařízení s Androidem Release keytool -genkey -v -keystore release.key -alias ip-telefon -keyalg RSA -keysize 2048 -validity 10000 ant.properties key.store=release.key key.alias=ip-telefon
project.properties proguard.config=${sdk.dir}/tools/proguard/proguardandroid.txt:proguard-project.txt Ant
ant clean && ant release bin/IpActivity-release.apk
Vývoj SW pro mobilní zařízení s Androidem Hotová aplikace ke stažení na Play Store Podmínky pro publikování: Ikona Grafika, video Popisky Kontakty
• • • •
Instalace hotové aplikace ke stažení:
Vývoj SW pro mobilní zařízení s Androidem Užitečné odkazy Zdrojové soubory dema aplikace https://github.com/Pitel/ip-telefon Dokumentace, tutoriály, blog, design, … https://d.android.com Seriál na Zdroják.cz http://www.zdrojak.cz/serialy/vyvijime-pro-android
Instalace a konfigurace ústředen Asterisk
Děkuji za pozornost