简单NDKDemo试手

在AndroidStudio新建一个JNI工程,(这里省事,就在一个其它Demo中进行测试了)


简单NDKDemo试手_第1张图片
JNI模块的Java文件

截图中,包括对即将要生成的JNI库的标识声明,与JNI库要提我给我们的方法作native声明

然后通过JNITool.java文件生出.h文件

具体做法

cd ***/app/src/main/java         //cd到你项目中的java目录

javah -d ../jni/    com.chris.custom.JNITool  //将.h文件生成到main同级的jni目录下

生成的.h文件名称为:com_chris_customview_JNITool.h

文件存放在刚刚创建的jni目录下,下面的一部分操作,我们直接在jni下操作


简单NDKDemo试手_第2张图片
生成的JNI的.h头文件

看到方法名子很长.他的命名规则:Java_包名_类名_方法名.

有了头文件,我们创建source文件,我们选择通过C++实现,起名JNICppTool.cpp


简单NDKDemo试手_第3张图片
cpp文件实现

include进我们JNI的.h文件们实现方法(当然,如果不需要javah创建head file,可以直接编写C/C++Source文件,也可以).

我们在编写Android.mk,Application.mk(我们只有一个测试so,并对这个so生成的平台不关心,这个文件可以直接忽略).

Android.mk的文件内容

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := jni-tool

LOCAL_SRC_FILES := tool.cpp

include $(BUILD_SHARED_LIBRARY)

配置好你的NDK环境(我在MAC上测试,因为硬盘空间小,把NKD放到U盘上了,为了做测试,把NDK又拷进MAC,4G+呀,测完后,还是要删除的)

跳进jni目录,执行ndk-build.会在jni同级目录下生成libs目录,里面存放着各个平台的so包,

然后把libs目录下的所有文件包括文件夹剪切到jni同级目录下jniLibs(没有的话,创建,这是AS默认目录)

在app的build.gradle中的buildTypes节点上加,目的是让AS的gradle进行编译时,对jni部分进行编译

sourceSets{

        main{

              jni.srcDirs=[]

       }

}

这时候,再执行项目,我们会看到在调用JNITool类的get()方法时,可以看到

JNITooljniTool= newJNITool();

System.out.println(jniTool.get());

03-09 14:04:28.894  1328  1328 I System.out: C++ is server....

这时候我们的JNI,在Android平台上的整个流程打通了.

过程中遇到了几个问题,比如ndk-build执行失败,目录文件不清楚,还是自行google,百度解决吧.

你可能感兴趣的:(简单NDKDemo试手)