AndroidStudio JNI

2128 ワード

1、インタフェースファイルの作成
public class JniInterface {
    native public String getStringFromJni();
}

2、build工程はclassファイルを生成し、classファイルディレクトリにナビゲートする
コマンドライン:
javah -jni com.test.ndk.JniInterface
comを生成する.test.ndk.JniInterface.hヘッダファイル、src/main/jniディレクトリにコピー
3、コピーhヘッダファイル、名前を変更します.c
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "com_test_ndk_JniInterface.h"

/*
 * Class:     com_test_ndk_JniInterface
 * Method:    getStringFromJni
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_test_ndk_JniInterface_getStringFromJni
(JNIEnv * env,jobject obj)
{
    return (*env)->NewStringUTF(env,"Hello From JNI22");
}

4、build/make projectでsoファイルを生成できる
ps:生成されたsoファイル名を変更する
build.gradleで
defaultConfig {
        applicationId "com.test.ndk"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        ndk{
            moduleName "myLib"
        }
    }

5、使用
static {
        System.loadLibrary("myLib");
    }

PS:
ndk-buildコマンド
cd /Users/user/AndroidStudioProjects/TestNDK/app/src/main/jni 
jni user$ ndk-build
[armeabi] Compile thumb  : myLib <= com_test_ndk_JniInterface.c
[armeabi] SharedLibrary  : libmyLib.so
[armeabi] Install        : libmyLib.so => libs/armeabi/libmyLib.so

ロゴを印刷
build.gradleで
 ndk{
            moduleName "myLib"
            ldLibs "log","z","m"
            abiFilters "armeabi","armeabi-v7a","x86"
        }
.cファイル中
#include <android/log.h>
#define LOG_TAG "TestNDK"
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
 LOGD("%s","hahah");

参照先:
http://ph0b.com/android-studio-gradle-and-ndk-integration/