Mobil Informatikai Rendszerek

Hasonló dokumentumok
Mobil Informatikai Rendszerek

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

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

Fejlesztői szemmel at K

ANDROID ALKALMAZÁS FEJLESZTÉS

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

libgdx alapok, első alkalmazás

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

Mobil Informatikai Rendszerek

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

Mobil készülékek programozása

Mobil Informatikai Rendszerek

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

ANDROID ALKALMAZÁSFEJLESZTÉS

Android 5.0.

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

Adatbázis-kezelés ODBC driverrel

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

Java I. A Java programozási nyelv

Mobil Informatikai Rendszerek

ANDROID ALKALMAZÁSFEJLESZTÉS


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

Nokia N9 - MeeGo Harmattan bemutatkozik

(Teszt)automatizálás. Bevezető

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

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

és az instanceof operátor

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

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

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Labor 2 Mikrovezérlők

ANDROID ALKALMAZÁSFEJLESZTÉS

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

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

Android Wear programozás. Nyitrai István

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

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

Android alapok. Android játékfejlesztés

Java Programozás 11. Ea: MVC modell

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

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

Utolsó módosítás:

Broadcast Service Widget

Dr. Schuster György október 14.

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

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

Kis Gergely MattaKis Consulting Fejlesztői szemmel

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

Informatika terméktervezőknek

C++ programok fordítása

IBM WorkLight 5.0 mobil alkalmazás platform

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

Clang Static Analyzer belülről

Több app. Egy kódbázis

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

ANDROID ALKALMAZÁSFEJLESZTÉS

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

Android Pie újdonságai

ANDROID ALKALMAZÁSFEJLESZTÉS

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

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

Informatikai Navigátor Érdekességek programozóknak

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

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

Közösség, projektek, IDE

Közösségi hálózatok integrálása Android platformon. Inotay Krisztián / inotay.krisztian@bmeautsoft.hu

Alap számológép alkalmazás

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

<Insert Picture Here> Migráció MS Access-ről Oracle Application Express-re

3. Osztályok II. Programozás II

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

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

Web-technológia PHP-vel

libgdx Android Studio alatt

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

Google Maps V2. OpenStreetMap, Mapsforge

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

Objektumorientált programozás C# nyelven

Kis Gergely MattaKis Consulting Fejlesztői szemmel

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

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

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

Szoftvertervezés és -fejlesztés I.

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

A Java EE 5 plattform

Mobil Informatikai Rendszerek

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

Szoftverfejlesztés a Google Android OS-re (Android 3.0, API level 11)

Programozás I. gyakorlat

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

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

Collections. Összetett adatstruktúrák

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Programozás C és C++ -ban

Konkurens TCP Szerver

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

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

1. Alapok. Programozás II

Átírás:

Mobil Informatikai Rendszerek Android NDK Native Development Kit Sicz-Mesziár János sicz-mesziar.janos@nik.uni-obuda.hu Mezei József mezei.jozsef@nik.uni-obuda.hu 2018. április 22.

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 Mezei József 4/22/2018 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 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 Mezei József 4/22/2018 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); Kotlin: external kulcsszó használata external fun add(x: Int, y: Int) 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 Mezei József 4/22/2018 4

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/Kotlin 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. Java kód fordítása (*.dex fájl létrehozása) 5. Csomag összeállítása (*.apk fájl létrehozása) Sicz-Mesziár János Mezei József 4/22/2018 5

NDK a gyakorlatban Új módszer 1. Új Android projekt létrehozása 2. Natív kódhívást tartalmazó Kotlin osztály megírása 3. C/C++ kód megírása 4. Library inicializálása a Kotlin osztályunkban 5. CMakeList.txt kibővítése Legacy módszer 1. NDK csomag letöltése, kicsomagolása 2. Új Android projekt létrehozása 3. Natív kódhívást tartalmazó Java osztály megírása 4. Hozzá tartozó C/C++ header fájl generálása a JNI könyvtárba 5. C/C++ kód megírása 6. Android.mk fájl létrehozása 7. Application.mk fájl létrehozása Natív kód fordítása > cd app\src\main\jni > c:\android-ndk-r11c\ndkbuild 8. Library inicializálás a Java osztályunkban Sicz-Mesziár János Mezei József 4/22/2018 6

Kód megírása C/C++ kód: extern "C" JNIEXPORT jint JNICALL Java_com_example_jozsefmezei_ndk_MainActivity_sumFromJNI( JNIEnv *env,jobject /* this */, jint a, jint b) { return a+b; } Library inicializálása: companion object { init { System.loadLibrary("native-lib") } } external fun multiplyfromjni(a: Int,b: Int): Int Sicz-Mesziár János Mezei József 4/22/2018 7

CMakeList Android Studio 2.2 óta Cmake megoldja a natívkód fordítását NDK r15 óta YASM support (assembly kód fordítás ) x86 és x86-64 architektúrán! Fájl felépítése: cmake_minimum_required(version 3.4.1) add_library( native-lib SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp src/main/cpp/math-lib.cpp ) find_library( log-lib log ) target_link_libraries( native-lib ${log-lib} ) Sicz-Mesziár János Mezei József 4/22/2018 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 Mezei József 4/22/2018 9

Java C/C++ típusok Referencia típusok: Sicz-Mesziár János Mezei József 4/22/2018 10

Java/Kotlin 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 Mezei József 4/22/2018 11