Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to the Android NDK

mauimauer
February 20, 2014

Introduction to the Android NDK

Introduction to the Android NDK and why you should care about native development on Android.

Presented at CodeFest Karlsruhe 2014

mauimauer

February 20, 2014
Tweet

More Decks by mauimauer

Other Decks in Programming

Transcript

  1. Who am I? Sebastian Mauer GDG Aachen Co-Lead CS Student

    Software Engineer I don’t work for Google…yet
  2. Two kinds of Apps Apps in the DalvikVM (that’s the

    kind of apps you probably know) Native Apps (created using the NDK)
  3. One VM to rule them all • Dalvik is a

    Virtual Machine (VM) • A VM is a common abstraction across different hardware platforms • „Translates“ VM Bytecode to platform specific instructions
  4. It just works™ • The DalvikVM is already optimized for

    the x86 Platform • Apps relying on the Android SDK / Dalvik Bytecode
 will automatically benefit from Platform-specific Optimizations (like SSE & Co.)
  5. From Source to Bytecode Java Sourcecode Java Bytecode (.class) Dalvik

    Bytecode (.dex) JAR Archive Dalvik VM Java VM
  6. NOT SURE IF NDK CAN HELP ME RUN CODE FASTER

    OR MAKE THINGS EVEN MORE COMPLICATED
  7. What’s the NDK? • NDK stands for Native Development Kit

    • Allows to compile C/C++ code to native (read: platform specific) executables/libraries. • Build scripts/toolkit to incorporate native code in Android apps via the Java Native Interface (JNI) • Has to be compiled for every platform you want to support
  8. But why? • Performance
 e.g., complex algorithms, multimedia applications, games

    • Differentiation 
 app that takes advantage of direct CPU/HW access
 e.g., using SSSE3 for optimization • Fluid and lag-free animations • Software code reuse
  9. What could possibly go wrong? • Performance improvements are not

    guaranteed • In fact, you could make it worse (read: slower). • Added complexity (Java/C++ Interop, Multiple platforms) • Somewhat harder to debug
  10. What’s an NDK app? It’s an Android application that uses

    native libraries. ! Libraries are .so files, usually found inside libs/CPU_ABI/. ! These libs can be generated from native sources inside jni folder, game engines, or required by other 3rd party libraries. ! There is no 100% native application. Even an application purely written in C/C++, using native_app_glue.h, will be executed in the context of the Dalvik Virtual Machine.
  11. NDK Development in a Nutshell C/C++Code Makefile ndk-build Java* calls

    GDB debug Java Framework Java Application SDK APIs JNI Native Libs Android* Applications NDK APIs Bionic C Library APP_ABI := all or APP_ABI := x86 through jni
  12. Compatibility with Standard C/C++ • Bionic C Library:
 Lighter than

    standard GNU C Library
 Not POSIX compliant
 pthread support included, but limited
 No System-V IPCs
 Access to Android* system properties • Bionic is not binary-compatible with the standard C library • It means you generally need to (re)compile everything using the Android NDK toolchain
  13. Pick One Runtime Exceptions RTTI STL system No No No

    gabi++ Yes Yes No stlport Yes Yes Yes gnustl Yes Yes Yes • By default, libstdc++ is used. It lacks: 
 Standard C++ Library support (except some headers)
 C++ exceptions support
 RTTI support • Fortunately, you have other libs available with the NDK:
  14. Compile for all the platforms. If you have the source

    code of your native libraries, you can compile it for several CPU architectures by setting APP_ABI to all in the Makefile “jni/Application.mk”: ! APP_ABI=all The NDK will generate optimized code for all target ABIs You can also pass APP_ABI variable directly to ndk-build, and specify each ABI: ndk-build APP_ABI=x86 ARM v7a libs are built ARM v5 libs are built x86 libs are built mips libs are built Put APP_ABI=all inside Application.mk Run ndk-build…
  15. Fat Binaries Use lib/armeabi libraries Use lib/armeabi-v7a libraries Use lib/x86

    libraries libs/armeabi-v7a libs/x86 libs/armeabi APK file …
  16. Q&A