Mobil Informatikai Rendszerek

Hasonló dokumentumok
Mobil Informatikai Rendszerek

Fejlesztői szemmel at K

libgdx alapok, első alkalmazás

iphone és Android két jó barát...

Vizuális, eseményvezérelt programozás XI.

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

ANDROID ALKALMAZÁS FEJLESZTÉS

Mobil Informatikai Rendszerek

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Szoftver technológia. Build systems. Cserép Máté ELTE Informatikai Kar 2019.

Mobil Informatikai Rendszerek

Java I. A Java programozási nyelv

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Mobil készülékek programozása

Több platform egy kódbázis Tanulságok a Tresorittól. Budai Péter, vezető fejlesztő

Google Maps használata OSM, mint alternatív térkép

ANDROID ALKALMAZÁSFEJLESZTÉS

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

3. Osztályok II. Programozás II

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Labor 2 Mikrovezérlők

Java programozási nyelv 5. rész Osztályok III.

ANDROID ALKALMAZÁSFEJLESZTÉS

Cekla. Készítette Doxygen Tue Sep :13:44

Java programozási nyelv 6. rész Java a gyakorlatban

Távközlési és Médiainformatikai Tanszék Hálózatok és szolgáltatások szakirány. Szolgáltatások és alkalmazások. Apple App Store. Sándor Roland Martin

Clang Static Analyzer belülről

Automatizált Java Build. ApacheAnt használatával

Android 5.0.

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

ANDROID ALKALMAZÁSFEJLESZTÉS

Dr. Schuster György október 14.

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Mobil Informatikai Rendszerek

Több app. Egy kódbázis

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

ANDROID ALKALMAZÁSFEJLESZTÉS

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

1. Alapok. Programozás II

Programozás II gyakorlat. 4. Öröklődés

Bevezetés a programozásba Előadás: Fordítási egység

Broadcast Service Widget

Crossplatform mobil fejlesztőkörnyezet kiválasztását támogató kutatás

ANDROID ALKALMAZÁSFEJLESZTÉS

Google Maps V2. OpenStreetMap, Mapsforge

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Android alapok. Android játékfejlesztés

Adatbázis-kezelés ODBC driverrel

Android Wear programozás. Nyitrai István

ANDROID ALKALMAZÁSFEJLESZTÉS

Java I. A Java programozási nyelv

Közösség, projektek, IDE

Programozás I. gyakorlat


Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozás C és C++ -ban

A.NET Framework és programozása C# nyelven. Kedd I104

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Kis Gergely MattaKis Consulting Fejlesztői szemmel

Kiszolgálók üzemeltetése. Iványi Péter

C#, OOP. Osztályok tervezése C#-ban

Alap számológép alkalmazás

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

Mobilplatformok Merre tart a világ? Kis Gergely MattaKis Consulting

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Szoftvertervezés és -fejlesztés I.

Pénzügyi algoritmusok

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

UI megismerése, különböző felbontások támogatása, használati jogok kérése

C++ programok fordítása

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

Mobilalkalmazás fejlesztés. Android I. előadás

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Occam 1. Készítette: Szabó Éva

Pénzügyi algoritmusok

Informatika terméktervezőknek

Web-technológia PHP-vel

Szoftvertechnológia alapjai Java előadások

Bevezetés a programozásba Előadás: A const

JAVA ALKALMAZÁSOK 1. ELŐADÁS 2/22/2017 1

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Java Programozás 11. Ea: MVC modell

A DevOps-kultúra eszközei

9. MPI

I. Bevezetés. 1. ábra A Java "logója"

Konkurens TCP Szerver

IBM WorkLight 5.0 mobil alkalmazás platform

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Google Web Toolkit. Elek Márton. Drótposta kft.

Programzás I gyakorlat

Mintavételes szabályozás mikrovezérlő segítségével

Átírás:

Mobil Informatikai Rendszerek Android NDK Native Development Kit 2016. november 27. Sicz-Mesziár János sicz- m e s z i a r. j a n o s @ nik.uni - obuda.hu

NDK Native Development Kit Egy set of tools, amely lehetővé teszi, hogy C ill. C++ kódot futtassunk az Android alkalmazásunk alatt. A platform library felhasználásával native Activity-ket hozhatunk létre, illetve hozzáférhetünk olyan fizikai erőforrásokhoz is mint például érzékelők, touch screen, stb... Két fontosabb esetben szoktak natív kódot alkalmazni: Nagy teljesítmény igényű alkalmazások, pl játékok és fizikai szimulációk Meglévő kód-könyvtárak újrafelhasználása, közös platform kódok Támogatottság: Android Studio 2.2+, Gradle JNI (Java Native Interface) kommunikáció Cmake, ndk-build Sicz-Mesziár János 11/27/2016 2

Fejlesztő környezet Natív kódok fordításához az alábbiak szükségesek: 1. NDK letöltése: https://developer.android.com/ndk/downloads/index.html 2. CMake: egy külső build eszköz ami a Gradle-el használható 3. LLDB: natív kód hibakereséséhez vagy a fentiek letölthetőek SDK Manager használatával: 1. Tools > Android > SDK Manager 2. SDK Tools tab 3. LLDB, CMake, és NDK kiválasztása Sicz-Mesziár János 11/27/2016 3

NDK Fogalmak ndk-build: Automatikus forrás fájl összegyűjtés Bináris fájlok létrehozása a forráskód alapján (*.so) Bináris fájlok bemásolása a projektbe Java: native kulcsszó használata public native int add(int x, int y); Native shared libraries: lefordított *.so fájlok Native static libraries: tud statikus library-vel dolgozni, vagy más library *.a fájlokat linkelni Java Native Interface (JNI): Java és C++ komponensek adatot cserélnek Application Binary Interface (ABI): meghatározza, hogy a gépi kód miként kerül interakcióval a rendszerrel futás időben Manifest: ha nincs Java kód az alkalmazásunkban (tisztán C- ben írt alkalmazás), akkor itt kell NativeActivity-t deklarálni. Sicz-Mesziár János 11/27/2016 4

NDK Build ANDROID.MK Létre kell hozni egy Android.mk konfigurációs fájlt a jni/ könyvtárban. Az ndk-build ezt a fájlt figyeli: Definiálja a modulokat és neveiket Fordítandó forrásfájlokat Build flageket Linkelt library-ket bővebben itt APPLICATION.MK Az alkalmazás által megkövetelt modulok. Az alábbiakat tartalmazza: Egyes platformok ABI verziói Toolchain Standard libraries bővebben itt Sicz-Mesziár János 11/27/2016 5

NDK Build flow 1. Eldönteni alkalmazásunk mely része lesz natív kódban. (UI-t és képernyő kezelést érdemes Java oldalon hagyni) 2. Új Android projekt létrehozása a szokott módon 3. Ha native-only app, akkor NativeActivity deklarálása a AndroidManifest.xml fájlban. 4. Android.mk fájl létrehozása az /app/src/main/jni könyvtárban. (name, flags, linked libraries) 5. Application.mk fájl létrehozása (opcionális) (target ABIs, toolchain, release/debug mode, and STL) 6. ndk-build paranccsal natív kód fordítása (*.a, *.so fájlok létrehozása) 7. Java kód fordítása (*.dex fájl létrehozása) 8. Csomag összeállítása (*.apk fájl létrehozása) Sicz-Mesziár János 11/27/2016 6

NDK a gyakorlatban 1. NDK csomag letöltése, majd kicsomagolása (pl android-ndk-r11c) 2. Új Android projekt létrehozása 3. Natív kódhívást tartalmazó Java osztály megírása: public class AwesomeLogic { public static native String getlogicversionname(); } 4. Hozzá tartozó C/C++ header fájl generálása a JNI könyvtárba: hu_uniobuda_nik_nativeapplication_awesomelogic.h "%JAVA_HOME%\bin\javah" -jni -d..\app\src\main\jni\ -classpath c:\android-sdk-windows\platforms\android- 23\android.jar;..\app\build\intermediates\classes\debug hu.uniobuda.nik.nativeapplication.awesomelogic 5. C/C++ kód megírása JNIEXPORT jstring JNICALL Java_hu_uniobuda_nik_nativeapplication_AwesomeLogic_getLogic VersionName (JNIEnv *env, jclass clazz) { return (*env)->newstringutf(env, "Hello JNI"); } Sicz-Mesziár János 11/27/2016 7

NDK a gyakorlatban (2) 6. Android.mk fájl létrehozása LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hu_uniobuda_nik_nativeapplication_awesomelogic LOCAL_SRC_FILES := hu_uniobuda_nik_nativeapplication_awesomelogic.c LOCAL_LDLIBS += -llog LOCAL_EXPORT_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) 7. Application.mk fájl létrehozása APP_ABI := all 8. Natív kód fordítása > cd app\src\main\jni > c:\android-ndk-r11c\ndk-build 9. Library inicializálás a Java osztályunkban: static { System.loadLibrary("hu_uniobuda_nik_nativeapplication_Awes omelogic"); } Sicz-Mesziár János 11/27/2016 8

Java C/C++ típusok Típusok, lásd itt: $NDK\platforms\android-23\arch-arm\usr\include\jni.h Sicz-Mesziár János 11/27/2016 9

Java C/C++ típusok Referencia típusok: Sicz-Mesziár János 11/27/2016 10

Java C/C++ konverziók Néhány példa konverziókra: // use jboolean jboolean iscopy; // java string (jstring) to char* const char * res = env->getstringutfchars(mystring, &iscopy); // check JNI boolean true if(iscopy == JNI_TRUE) (*env)->releasestringutfchars(mystring, res); // release // create new jstring return (*env)->newstringutf((const char* )result.c_str()); Lásd még itt: https://developer.android.com/training/articles/perf-jni.html Sicz-Mesziár János 11/27/2016 11