第一次使用NDK,JNI遇到的问题

现在的公司,很闲,都没学到什么东西

大部分公司需要熟悉NDK和JNI技术,也没接触过,找了一篇文章跟着敲了一遍,还是出现很多问题

1.

由于有的代码没有照着敲,就复制的,

在Android.mk这个文件,我直接复制的这么一段代码

LOCAL_PATH := $(call my-dir) // 设置当前的编译目录(Android.mk所在的目录)

include $(CLEAR_VARS) // 清除LOCAL_XX变量(LOCAL_PATH除外)

LOCAL_MODULE := JNI_ANDROID_TEST // 指定当前编译模块的名称

LOCAL_SRC_FILES := jnitest.cpp // 编译模块需要的源文件

include $(BUILD_SHARED_LIBRARY) // 指定编译出的库类型,BUILD_SHARED_LIBRARY:动态库;BUILD_STATIC_LIBRARY:静态库, BUILD_EXECUTEA

当时没多想,以为//后面的是注释,但是这个一个文本文件,不是java文件,所以在编译的时候,报Android.mk couldn't contain space

于是就把后面的文字和空格全部删了。

2.

在用javah生成.h头文件的时候,倒是没有出现什么问题,我用的as,添加工具后很方便。

但是根据.h头文件去写cpp文件的时候,不太懂,因为没接触过c++,所以代码也是跟着敲的

因为cpp文件格式没写对,编译也出现了很多问题

3.

在用cpp生成so库的时候,我复制了其中一个so库放到jniLibs文件夹下面,运行app的时候,崩掉了,说没找到这个库,百度了一下,说so库没弄正确。

于是就重新生成了一遍,把生成的so库文件全部放到了jniLibs下面,运行还是报错,

继续百度,找到http://blog.****.net/sinat_22657459/article/details/53420047

说gradle没配置好

第一次使用NDK,JNI遇到的问题

正确配置如上

之前还在defaultConfig条目下加上了这么一个条目

第一次使用NDK,JNI遇到的问题

不知道什么用。

更改配置后,程序成功运行

第一次使用NDK,JNI遇到的问题

一个简单的通过so库获取当前程序的包名

教程是这篇文章:http://blog.****.net/xiaoyu_93/article/details/52870395

写的很详细,感谢博主的分享。