Android NDK - Sizuha/devdog GitHub Wiki
- Android Studio 1.5 ๊ธฐ์ค
- Android NDK r10e ๊ธฐ์ค
- Gradle 2.5 ๊ธฐ์ค
- SDK Build Tools 19.0.0
- Java 1.7
- Android studio๋ก Android NDK ์ฝ๋ ์์ฑํ๊ธฐ http://thdev.net/635
- ์๋๋ก์ด๋ ์คํ๋์ค์์ NDK ๋ก C++ ๋น๋ํ๊ธฐ (Hello World ์์ ) http://dev.re.kr/65
- http://tools.android.com/tech-docs/new-build-system/gradle-experimental
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
์ด ๋ถ๋ถ์ด ๊ธฐ์กด๊ณผ ๋ง์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค.
์์ธํ ๋ณ๊ฒฝ์ฌํญ์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐ.
http://tools.android.com/tech-docs/new-build-system/gradle-experimental
apply plugin: 'com.android.model.application'
// com.android.application -> com.android.model.application
model { // android ๋ธ๋ก ์ ์ฒด๋ฅผ model๋ก ๊ฐ์ผ๋ค
android {
compileSdkVersion = 23
buildToolsVersion = "22.0.1"
defaultConfig.with {
applicationId = "xx.xx.xxxxx"
minSdkVersion.apiLevel = 19
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
allprojects {
sourceCompatibility = 1.7 // Java 1.7 ์ฌ์ฉ
targetCompatibility = 1.7 // ์ด ๋ถ๋ถ์ด ์์ผ๋ฉด Android Studio์์ Run ๋ ์๋ฌ๊ฐ ๋ฐ์.
}
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add( file('proguard-rules.txt') )
}
}
android.ndk {
moduleName = "audiolib" // NDK Module Name
/*
* Other ndk flags configurable here are
* cppFlags += "-fno-rtti"
* cppFlags += "-fno-exceptions"
* ldLibs = ["android", "log"]
* stl = "system"
*/
ldLibs = [ "log", "android", "GLESv3"]
}
android.productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters += "armeabi"
}
create("arm7") {
ndk.abiFilters += "armeabi-v7a"
}
create("arm8") {
ndk.abiFilters += "arm64-v8a"
}
create("x86") {
ndk.abiFilters += "x86"
}
create("x86-64") {
ndk.abiFilters += "x86_64"
}
create("mips") {
ndk.abiFilters += "mips"
}
create("mips-64") {
ndk.abiFilters += "mips64"
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
}
JNI ๋๋ ํ ๋ฆฌ ์ถ๊ฐ. java > {app} > main > jni
public class ExAudioLib {
static {
System.loadLibrary("audiolib"); // NDK Module Name
}
private static ExAudioLib __instance;
public static void init() {
__instance = new ExAudioLib();
}
public static void release() {
__instance = null;
}
public static ExAudioLib getInstance() {
return __instance;
}
public native String testNDK();
}
์ง์ ์์ฑํ๊ธฐ ๋ณด๋จ javah ๋ช ๋ น์ ์ด์ฉํด์ ์๋์์ฑํ๋ ๊ฒ์ ๊ถ์ฅ.
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class xx_xxx_xxxx_app_lib_ExAudioLib */
#ifndef _Included_xx_xxx_xxxx_app_lib_ExAudioLib
#define _Included_xx_xxx_xxxx_app_lib_ExAudioLib
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: xx_xxx_xxxx_app_lib_ExAudioLib
* Method: testNDK
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_xx_xxx_xxxx_app_lib_ExAudioLib_testNDK(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
#include "xx_xxx_xxxx_app_lib_ExAudioLib.h"
#include <GLES3/gl3.h>
JNIEXPORT jstring JNICALL Java_xx_xxx_xxxx_app_lib_ExAudioLib_testNDK(JNIEnv *env, jobject) {
jstring str = (*env).NewStringUTF("NDK Test OK !!");
return str;
}
์ด์ Android.mk ๋ฑ์ mk ํ์ผ์ ๋ง๋ค ํ์๊ฐ ์๋ค. App Gradle ํ์ผ์ android.ndk ๋ธ๋ก์์ ํ์ํ ์ต์ ๋ค์ ์ ์ฉํ๋ฉด ๋๋ค. ๋น๋๋ ์ผ๋ฐ ์๋๋ก์ด๋ ์ฑ ๋น๋๋ ๋์ผํ๊ฒ ์งํํ๋ฉด ๋๋ค.
Android Studio ์ค์ ์์, External Tools์ ๋ค์ ํญ๋ชฉ์ ์ถ๊ฐ.
- Name: javah
- Group: NDK
- Description: javah // ์ด ๋ถ๋ถ์ ์ ๋นํ...
- Options ๋ฐ Show in: ๋ชจ๋ ์ฒดํฌ
- Tool settings
- Program; /usr/bin/javah
- Parameters: -classpath
$Classpath$ -v -jni$FileClass$ - Working directory:
$SourcepathEntry$ /../jni
์ฌ์ฉ๋ฒ: Java ํด๋์ค ํ์ผ์ ์ ํํ๊ณ , ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฉ๋ด > NDK > javah ์ ํ.
Java Type | Native Type | Description |
---|---|---|
boolean | jboolean | 8 bits, unsigned |
byte | jbyte | 8 bits, signed |
char | jchar | 16 bits, unsigned |
double | jdouble | 64 bits |
float | jfloat | 32 bits |
int | jint | 32 bits, signed, ๊ทธ๋ฅ int๋ก ์จ๋ ๋๊ธด ํจ. |
long | jlong | 64 bits, signed |
short | jshort | 16 bits, signed |
void | void |