Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Outline
Intro System setup Write and build an Android app Write and build an OpenCV app for Android
Android Apps / 1
An Android app is packaged and distributed as an Android Package, i.e. a file with apk extension. All the code and data in a single apk file is considered a to be one application. Each app lives in a sandbox inside the Linuxbased Android OS. Each app has a unique ID and runs on its own Linux process. Each process has its own Virtual Machine.
Marco Moltisanti OpenCV on Android Platforms
Android Apps / 2
MyApp
Run in background
Manage data
Android Apps
An exhaustive view of Applications architecture would take too much time Further informations available at
http://developer.android.com/guide/components/index.html
Lets start!
First of all, we need to setup our work environment.
Developers Kits, Virtual Machines, API,
Ingredients
Eclipse IDE
Android SDK
Android NDK
Recipe / 1
Download and install Java SDK from http://www.oracle.com/technetwork/java/jav ase/downloads/jdk7u9-downloads1859576.html Let JAVA_FOLDER be the folder where we installed our JDK. Put the JAVA_FOLDER\bin directory in the System Path.
Marco Moltisanti OpenCV on Android Platforms
Recipe / 2
Download and install Android SDK from http://developer.android.com/sdk/index.html
Download and unzip Android NDK from
http://developer.android.com/tools/sdk/ndk/index.html
Recipe / 3
Download and unzip Eclipse IDE for Java Developers from http://www.eclipse.org/downloads/
Install the Android Development Tools (ADT) plugin for Eclipse: http://developer.android.com/sdk/installing/insta lling-adt.html
Recipe / 4
A good quick start guide is available at http://docs.opencv.org/doc/tutorials/introduc tion/android_binary_package/android_dev_in tro.html
C/C++ application source code Android.mk and Application.mk Compiled libs Resources of the application
Libs
Res
Src
AndroidManifest.xml
default.properties
text file containing information about target Android platform and other build details
Hello World! / 1
Click on the highlighted button (if you dont have it, you have to reinstall ADT plugin) to create a new Android App.
Hello World! / 2
Fill the form and click next. Go forward to the end of wizard we dont care in this moment about icons and stuff!
Hello World! / 3
A bit deeper / 1
The user interface (UI) of an application is stored in a xml file, which contains each components settings. The UI can be created modifying the xml or using the tools provided by Eclipse. Example!
A bit deeper / 2
The logic part is in a java file, with the same name of the activity were working on. In our example, its in MainActivity.java It is possible to access layout elements using the findViewById method.
public View findViewById (int id) id can be retrieved using R.id.componentName
Events Handling
Nobody likes a static UI! Here we use the Java event handling paradigm: Event Listeners! Each event has its own listener
onClickListener onCheckedChangeListener
2. Advanced level
OpenCV native interface + Android NDK.
3. Hacker level
We don't suggest this way.
Basic level
OpenCV exposes almost all its functionality to Java including camera You don't even need to dive into NDK stuff You simply add a reference to the OpenCV, import its classes and move forward The overhead is equal to a cost of one or several JNI calls This approach works in many cases, but sometimes JNI calls can consume too much
Marco Moltisanti OpenCV on Android Platforms
Advanced level
The Android way is writing all your code in Java Sometimes it is not enough and you need to go to a native level and write part of your application in C/C++:
For example: you already have some computer functionality which is written in C++ but do not want to rewrite the C++ code to Java.
Add a class with native methods and wrapping your C++ functionality into the Java part of your Android application C++ code of OpenCV is cross-platform, that means that you can port your desktop code to mobile devices
Marco Moltisanti OpenCV on Android Platforms
Hacker level
We don't recommend this way, but it is useful if you want to work with OpenCV sources.
Implement some new features Optimize the performance Submit a bugfix Want to have an access to the latest OpenCV features We wont try this approach!
Marco Moltisanti OpenCV on Android Platforms
And now?