项目配置NDK环境
gradle.properties 下面添加
android.useDeprecatedNdk=true
app目录下的build.grade的defaultConfig添加
ndk {
moduleName "NdkJniDemo" //编译生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86"
}
目前准备工作完成。
在java文件中写我们需要的本地方法
package sunrui.jniapplication;
/**
* Created by sunrui on 16/7/14.
*/
public class JNIUtil {
public static native String getString();
public static native String getStringC(int i);
}
编译这个java文件,找到编译完成的class文件
生成头文件的命令:
javah -jni sunrui.jniapplication.JNIUtil
然后将生成的头文件拷到main下面的jni文件夹(新建一个)
然后写你的C代码吧
//
// Created by sunrui on 16/7/14.
//
#include "sunrui_jniapplication_JNIUtil.h"
/*
* Class: sunrui_jniapplication_JNIUtil
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_sunrui_jniapplication_JNIUtil_getString
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env, "来自C的字符串");
}
/*
* Class: sunrui_jniapplication_JNIUtil
* Method: getStringC
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_sunrui_jniapplication_JNIUtil_getStringC
(JNIEnv *env, jobject obj, jint order){
//其他操作
return (*env)->NewStringUTF(env, "Java_sunrui_jniapplication_JNIUtil_getStringC");
}
java代码中使用
package sunrui.jniapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("NdkJniDemo");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, JNIUtil.getString(), Toast.LENGTH_LONG).show();
}
}
编译完成项目后
发布时,将build文件夹里面生成的so文件拷贝到libs里面,然后删除掉jni文件夹