现在的公司,很闲,都没学到什么东西
大部分公司需要熟悉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.csdn.net/sinat_22657459/article/details/53420047
说gradle没配置好
正确配置如上
之前还在defaultConfig条目下加上了这么一个条目
不知道什么用。
更改配置后,程序成功运行
一个简单的通过so库获取当前程序的包名
教程是这篇文章:http://blog.csdn.net/xiaoyu_93/article/details/52870395
写的很详细,感谢博主的分享。