Discover the native side of Android and inject the power of C/C++ in your applications About This Book Create high performance mobile applications with C/C++ and integrate with Java Exploit advanced Android features such as graphics, sound, input, and sensing Port and reuse your own or third-party libraries from the prolific C/C++ ecosystem Who This Book Is For Are you an Android Java programmer who needs more performance? Are you a C/C++ developer who doesn't want to bother with the complexity of Java and its out-of-control garbage collector? Do you want to create fast intensive multimedia applications or games? If you've answered yes to any of these questions then this book is for you. With some general knowledge of C/C++ development, you will be able to dive headfirst into native Android development. What You Will Learn Build your first Android native project from scratch Communicate with Java through Java Native Interfaces Learn the key design intricacies of creating a native OpenGL ES 2.0 graphics application Initialize, play, and record sound and music with OpenSL ES Handle input events and sensors to create different interaction types Port an existing library on Android by compiling most common C++ frameworks on Android Interface and optimize the existing code with RenderScript Combine graphics, sound, input, sensors, and physics in your application In Detail Android NDK is all about injecting high-performance and portable code into your mobile apps by exploiting the maximum speed of the device they run on. This book will show you how to create C/C++-enabled mobile applications and integrate them with Java. The books starts with teaching you how to access native API and port libraries used in some of the most successful Android applications. Next, you will move on to create a real native application project through the complete implementation of a native API and porting existing third-party libraries. Moving forward, you will learn how to access the keyboard and input peripherals and read accelerometer or orientation sensors. Finally, you will dive into more advanced topics such as RenderScript. Cover Copyright Credits About the Author About the Reviewers www.PacktPub.com Table of Contents Preface Chapter 1: Setting Up Your Environment Getting started with Android development Setting up Windows Time for action -- preparing Windows for Android development Installing Android development kits on Windows Time for action -- installing Android SDK and NDK on Windows Setting up OS X Time for action -- preparing OS X for Android development Installing Android development kits on OS X Time for action -- installing Android SDK and NDK on OS X Setting up Linux Time for action -- preparing Ubuntu for Android developmentInstalling Android development kits on Linux Time for action -- installing Android SDK and NDK on Ubuntu Installing the Eclipse IDE Time for action -- installing Eclipse with ADT on your OS Setting up the Android emulator Time for action -- creating an Android virtual device Developing with an Android device Time for action -- setting up an Android device More about ADB Summary Chapter 2: Starting a Native Android Project Building NDK sample applications Time for action -- compiling and deploying San Angeles sample Generating project files with Android managerCompiling native code with NDK-Build Building and packaging an application with Ant Deploying an application package with Ant Launching an application with ADB Shell More about Android tooling Creating your first native Android project Time for action -- creating a native Android project Introducing Dalvik and ART Interfacing Java with C/C++ Time for action -- calling C code from Java Debugging native Android applications Time for action -- debugging a native Android application Defining NDK application-wide settings NDK-GDB day-to-day Analyzing native crash dumpsTime for action -- analyzing a native crash dump Deciphering crash dumps Setting up a Gradle project to compile native code Time for action -- creating a native Android project Time for action -- using your own Makefiles with Gradle Summary Chapter 3: Interfacing Java and C/C++ with JNI Initializing a native JNI library Time for action -- defining a simple GUI Time for action -- initializing the native store Converting Java strings in native code Time for action -- handling strings in the native store Native character encoding JNI String API Passing Java primitives to native codeTime for action -- handling primitives in the native store Referencing Java objects from native code Time for action -- saving references to Objects in native Store Local references Global references Weak references Managing Java arrays Time for action -- handling Java arrays in native Store Primitive arrays Object arrays Raising and checking Java exceptions Time for action -- raising & catching exceptions in native Store Executing code in Exception state Exception handling API Summary Chapter 4: Calling Java Back from Native Code Discover the native side of Android and inject the power of C/C++ in your applications In Detail Android NDK is all about injecting high-performance and portable code into your mobile apps by exploiting the maximum speed of the device they run on. This book will show you how to create C/C++-enabled mobile applications and integrate them with Java. The books starts with teaching you how to access native API and port libraries used in some of the most successful Android applications. Next, you will move on to create a real native application project through the complete implementation of a native API and porting existing third-party libraries. Moving forward, you will learn how to access the keyboard and input peripherals and read accelerometer or orientation sensors. Finally, you will dive into more advanced topics such as RenderScript. What You Will Learn Build your first Android native project from scratch Communicate with Java through Java Native Interfaces Learn the key design intricacies of creating a native OpenGL ES 2.0 graphics application Initialize, play, and record sound and music with OpenSL ES Handle input events and sensors to create different interaction types Port an existing library on Android by compiling most common C++ frameworks on Android Interface and optimize the existing code with RenderScript Combine graphics, sound, input, sensors, and physics in your application This book is intended for those who are interested in learning the core features of the Spring Framework. Prior knowledge of Java programming and web development concepts with basic XML knowledge is expected