ndk环境安装及其搭建
软件下载
链接:pan.baidu.com/s/1cev9FK
密码:7yab
当然其他版本的也可以,建议不要用最新的
注意:执行Javah的时候生成头文件是对Java文件所生成的.class进行处理的命令
可以简单的使用gradle配置
使用gradle,你再也不用手动添加Android.mk和Application.mk文件,一切在build.gradle文件中就都能搞定,在这里我们直接贴出build.gradle中ndk相关的配置:
遇到问题:
eclipse adt 选择ndk目录时不识别,出现“Not a valid NDK directory”
解决方案
在ndk的主目录下创建一个ndk-build空文件,关闭对话框再次尝试
相关的一些配置:
需要在
gradle.properties文件中
添加
android.useDeprecatedNdk = true复制代码
androidStudio配置
AndroidStudio没有像Eclipse那样的一键add native support,相对来说比较麻烦
下面就介绍在AndroidStudio中如何实现类似于Eclipse的add native support功能(也就是进行NDK开发的步骤)。
1、新建一个Android工程,这一步就不多说了;
2、在AndroidStudio中配置NDK路径,方法是:
(1)先下载NDK并安装(这句基本是废话);
- (2)点菜单栏的File->ProjectStructure…->在打开的窗口中左侧选中SDKLocation->在右侧Android NDK Location中填入NDK目录所在路径,如下图所示:
image
3、编译生成.class文件,方法是:
点菜单栏的Build->Make Project,如下图所示
image这时,在工程的app/build/intermediates下就会生成classes文件夹,打开classes目录下的debug目录就会看到以你的包名命名的各级文件夹,最里边文件夹下有你的Java类对应的.class文件;
4、确定你要引用本地方法的类:
比如你想在MainActivity中引用本地方法,那么你先用
来声明本地代码库,然后定义几个natvie方法,比如
public native String getStringFromNative();复制代码
static {
System.loadLibrary("myNativeLib");
}复制代码
做完这些工作就可以进行下一步了。
5、使用javah命令行生成jni目录及对应的头文件:
如图所示,打开命令行编辑工具后,cd到工程的src/main/java目录,输入
javah -d ../jni 你的包名.引用本地方法的类的名称
image javah -d ../jni com.example.lixinyu.myapplication2.MainActivity复制代码
我直接用了MainActivity类做为调用JNI的Java类,你也可以写一个自己的类,之后就等吧,构建完成后就会在工程的src/main目录下生成一个jni目录,下边还包含.h头文件,如下图所示:
6、配置build.gradle文件
这里的build.gradle是指app模块下的build.gradle,不是整个工程的build.gradle文件。在模块的build.gradle的defaultConfig下加入以下idk配置:
ndk {
moduleName"myNativeLib"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}复制代码
7、配置local.properties文件
打开工程目录下的local.properties,感觉这一步是自动配置的,或者说在你一开始在AndroidStudio中指定NDK目录时已经自动生成了。我的AndroidStudio在打开local.properties已经有了
ndk.dir=/Develop/Android/android-ndk-r10e复制代码
这一行,所以就不用配了;
8、配置gradle.properties
打开工程目录下的gradle.properties文件(注意不是build.gradle,而是gradle.properties),在文件的最后一行加入
android.useDeprecatedNdk=true复制代码
9、写一个.c文件测试一下是否运行正常
- 点菜单栏的Build->Make Project编译一下工程
- 看看在工程目录下app/build/intermediates/ndk/debug/lib目录下是否成功生成了相应的.so文件
- 如果以上配置都正确的话这里是会生成对应平台的.so文件的
如果对ndk不了的同学们可以一下参考博客:
NDK探究之旅:
NDK和JNI初探及其联系和区别
NDK探究之旅《一》——对jni和NDK的认识
NDK探究之旅《二》——C语言的基本认识
NDK探究之旅《三》—C语言的输入输出函数
NDK探究之旅《四》——指针的强化理解
NDK探究之旅《五》——指针和数组之间的关系
NDK探究之旅《六》—函数的指针、结构体、枚举、宏定义
NDK探究之旅《七》—函数指针,宏定义的优缺点及应用场景
NDK探究之旅《八》——jni的开发流程规范及环境配置
NDK探究之旅《九》——jni开发中常见的错误及其注意事项
NDK探究之旅《十》——ndk项目实战之Androidstudio开发经验总结
NDK探究之旅《十一》—C代码调用Java代码之项目实战
NDK项目实战—高仿360手机助手之卸载监听
关于更多:
2017上半年技术文章集合—184篇文章分类汇总
相信自己,没有做不到的,只有想不到的
如果你觉得此文对您有所帮助, 欢迎关注微信公众号:终端研发部 这里不仅仅学到的是技术
技术+职场(欢迎关注学习和交流)