NDK,JNI第一种方式
建议安装LLDB,2.2之后可安装CMake。
ndk也可以在此安装
1.cd 进入classes文件路径
cd E:\MyWorkSpace\NDKDemo\app\build\intermediates\classes\debug
2.生成.h文件
javah -jni com.cjf.ndkdemo.NdkJniUtils
如果上个命名不行,不妨用以下命令试试,记得是包全名。
javah -classpath . -jni com.cjf.ndkdemo.NdkJniUtils
.h文件类似
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_cjf_ndkdemo_JniUtils */
#ifndef _Included_com_cjf_ndkdemo_JniUtils
#define _Included_com_cjf_ndkdemo_JniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_cjf_ndkdemo_JniUtils
* Method: getStringFormC
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_cjf_ndkdemo_JniUtils_getStringFormC
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
3.在main目录下建立jni目录。
将第2步骤中生成的文件剪切至该目录。
4.建立任意名的.c文件,
#include "com_cjf_ndkdemo_JniUtils.h"
/* * Class: io_github_yanbober_ndkapplication_NdkJniUtils * Method: getCLanguageString * Signature: ()Ljava/lang/String; */
JNIEXPORT jstring JNICALL Java_com_cjf_ndkdemo_JniUtils_getStringFormC
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
}
在app下的build.gradle
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.cjf.ndkdemo"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
moduleName "NdkJniDemo" //生成的so名字
ldLibs "log", "z", "m" //添加依赖库文件,因为有log打印等//非必填加项
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,目前可有可无。//不填写则生成所有
}
}
sourceSets { main { jni.srcDirs = ['src/main/jni'] } }
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
gradle.properties
加上
android.useDeprecatedNdk=true
jni文件下建立.c和.h的文件
目录结构