JNI之开发流程

1、准备环境

安装androidstudio(或eclipse) 与 visual studio,配置好java的环境变量等准备工作。

2、创建java nativie方法

public class JniTest {
    public int key = 100;
    public native int getStringC();//方法名懒得改
}

3、javah命令生成.h头文件

JNI之开发流程_第1张图片

4、将上一步生成的.h文件移动至vs解决方案中

JNI之开发流程_第2张图片

jni.h 与 jni_md.h在jdk中有直接搜索后添加到项目(尽量直接把文件copy到项目目录下)如图

JNI之开发流程_第3张图片

5、头文件声明的函数实现

#include "com_zhangteng_myapplication_JniTest.h"
JNIEXPORT jint JNICALL Java_com_zhangteng_myapplication_JniTest_getStringC(JNIEnv* env, jobject jobj){
	jclass cls = env->GetObjectClass(jobj);
	jfieldID fid = env->GetFieldID(cls, "key", "I");
	jint jstr = env->GetIntField(jobj, fid);
	printf("c++:%d", jstr);
	env->SetIntField(jobj, fid, jstr+1);
	return jstr;
}

c与c++JNIEnv用法有细微区别,c中是二级指针,c++中是一级指针,请自行转到声明查看

6、生成windows动态库

JNI之开发流程_第4张图片

JNI之开发流程_第5张图片

JNI之开发流程_第6张图片

JNI之开发流程_第7张图片

JNI之开发流程_第8张图片

JNI之开发流程_第9张图片

7、在项目中找到生成的.dll动态库并在java中加载

public class JniTest {
    public int key = 100;
    public native int getStringC();
    static {
        System.load("E:\\visual studio 2013\\Projects\\ConsoleApplication1\\x64\\Debug\\ConsoleApplication1.dll");
    }

8、测试代码

public class STest {
    @Test
    public void main() {
        JniTest jniTest = new JniTest();
        System.out.println("java-before:" + jniTest.key);
        System.out.println("java-ing" + jniTest.getStringC());
        System.out.println("java-end:" + jniTest.key);
    }
}

9、输出

JNI之开发流程_第10张图片

你可能感兴趣的:(高级Android工程师进阶)