android studio 进行ndk开发思考总结

来源:互联网 发布:ie11 找不到js 编辑:程序博客网 时间:2024/06/10 07:56

第一:环境配置。下载ndk,在as里面配置ndk,电脑环境变量配置PATH,ANDROID_NDK_HOME,至于是不是非得两个我也不清楚,就是在解决问题的时候就配置上了。路径都指向ndk第一层就行,比如:E:\android-ndk-r10b。这种。验证办法就是windows系统的cmd命令,然后输入ndk-build,如果能够解析证明配置成功。我出现了一个问题,cmd能够解析,但是as自带的terminal,确不能在任意的路径下都执行这个文件,可能是我哪里没配置好。先不管。

第二:jni调用。首先得把原理明确下,不然百度了一通,确并不知道为啥要这么写。一般情况下,是main下面建立个jni目录,然后建立个class文件,比如testjni.class文件,这个文件主要写一句话,那就是

public native String sayHello();
这个相当于一个接口了,首先这个文件的目的其实就是为了生成一个头文件,这个可以用javah来生成,这个头文件一般是通过指令生成,自己最好别写。看下生成的头文件名称,
com_example_xdg_testjni_jniclass.h。没错,就是包名+类名。实际上这个就是native调用的方法。
接下来,在jni目录下面,新建一个.c文件,这个文件具体的sayHello()实现。
#include "com_example_xdg_testjni_jniclass.h"JNIEXPORT void JNICALL Java_com_example_xdg_testjni_jniclass_sayHello(JNIEnv *env, jobject obj){return (*env)->NewStringUTF(env,"thi is c call");}
大家可以看下,sayHell()明明有返回String,但是
JNIEXPORT void JNICALL。这个我就搞不懂了。再看下参数,包含两个,JNIEnv *env, jobject obj。JNIEnv就是调用的环境,java层代码调用的时候就是传入的JNIEnv,包括包名,类名,来C文件中查找,具体的c实现。jobject就是具体的调用者,一般就是具体的java类了。这个文件写完,注意了,自己要在jni目录下面,新建Android.mk和Appilication,mk.这个是ndk编译so文件用的,是不是很坑,不过有现成的模板,看下我的,大家根据实际自己改吧。
Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_LDLIBS += -llogLOCAL_MODULE    := TestJniLOCAL_SRC_FILES := TestJni.cinclude $(BUILD_SHARED_LIBRARY)LOCAL_CFLAGS += -I~/android-2.0/system/core/include
Application.mk
APP_ABI := armeabi armeabi-v7a mips x86APP_PLATFORM := android-9
接下来,还要处理下,gradle文件,
ndk{    moduleName "libTestJni"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。目前可有可无。    stl "stlport_static"    //调试所用    ldLibs "log"}
这个写在 android{}里面。
好了,应该没啥了。接下来进行惊心动魄的生成.so文件。在这个地方我用as下面的terminal去生成老是报错,各种报错。后来改用window系统自带的cmd来生成。首先把cd到main下面,然后用ndk-build就会生成so文件了,中间要是出差错,提示信息到某行某个位,所以自己仔细看下。
第三:调试。网上好多说可以调式c,c++的,但是我都没有成功。还有一个日志输出的系统,#include <cutils/log.h>。我一直解析不出cutils,知道的人可否告知一下。
后来就没用这个调试了,自己看下app上面显示的文字效果。这里有个要注意的地方,当你改变了sayhello的实现的时候,如果要及时看见信息,最后清理下,甚至直接把so删除,在ndk-build,如果还出不来,先把自己手机的app删除,然后调试,反正我一直看不到效果,经过这些操作文字才有改变,可能缓存比较严重。

0 0
原创粉丝点击