智者不为愚者谋,勇者不为怯者死。这篇文章主要讲述Android?Studio?NDK编程-环境搭建及Hello!相关的知识,希望能为你提供帮助。
一,下载
安装android-ndk开发包
NDK各个版本链接
二,新建项目NDKDemo,选择空Activity就可以;
(注:Android
studio
2.2,可通过SDK
Tools
添加LLDB,CMake,更方便的开发jni程序了)
文章图片
四,在MainActivity中添加如下代码:
static {
System.loadLibrary("MyJni"); //导入生成的链接库文件
}
public native String getStringFromNative(); //本地方法
public native String getString_From_c();
文章图片
红色代码是本地方法!不知是否Android studio对ndk支持不太好所致,但不影响开发JNI程序!
在最新的Android Studio2.2 能很好的支持ndk了,不再出现红色!
五,Make Project一下,生成class文件!
文章图片
使用Android studio2.2 就是这锤子图标!
六,通过class文件生成头文件!
文章图片
(1)通过Terminal 中的命令来生成:
输入javah -d jni -classpath ../../build/intermediates/classes/debug com.it5.ndkdemo
(注意前后有英文的; 号隔开的哈)!
注:../后面的就是class文件的目录!!
文章图片
大家看了,是不是有点晕圈啊,虽然可以复制路径,但如果每次都这样就太不方便了!!
另可以在工具中配置命令的快捷键,来完成!
(2)Settings -> External tools中配置javah,ndk-build快捷方式!!
javah(生成头文件),ndk-build(编译)
打开External Tools 点加号添加javah:如下图:
【Android?Studio?NDK编程-环境搭建及Hello!】
文章图片
参数配置:
Program: $JDKPath$\\bin\\javah.exe
Parameters: -classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$ $FileClass$
Working directory: $ModuleFileDir$\\src\\main\\Java
Parameters的另外一种写法 -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
按上图依次填好,就好了!!
添加ndk-build配置如下:
文章图片
Program: D:\\Android_NDK\\android-ndk-r11b\\ndk-build.cmd
Working directory: $ProjectFileDir$\\app\\src\\main
这样配置后,以后只要把需要运行的类上右键 --> External Tools--> javah/ndk-build!
就可完成头文件及编译的工作!
哈哈!! 爽歪歪!
(3)用命令生成头文件!!
选中需要执行javah命令的类,然后右击,按照下图选择命令即可。
注:生成 .h头文件,所以一般是在含有 native字样的本地方法的类!
本地方法写在MainActivity.java 中,就右击该类生成!
文章图片
这样就会在main文件下创建jni文件夹并生成 .h头文件成功!
文章图片
现在ok了,快捷就是爽啊!!!
接下来,就是编写C/C++的代码了!
七,在jni目录编写C代码!
文章图片
注:
项目结构切换成 Android状态时,jni文件夹显示成 cpp名字!
当切换成project时就显示成jni文件夹!!
如下图:
文章图片
文章图片
添加如下代码:
文章图片
八,Gradle文件添加配置!
(1)在module中的build.gradle中defaultConfig{}标志里添加!
ndk{
moduleName "MyJni"
ldLibs "log"
abiFilters "armeabi","armeabi-v7a","x86"
}
编译会根据配置生成不同的目录来存放 .so文件!
参数配置:
在defaultConfig中添加一个ndk{}
ndk{}可添加的属性如下:
moduleName "xxx" : 编译后so库的名字
ldLibs "xxx" "xxx" : 连接的库,可以有多个
abiFilters "xxx" "xxx" :
so库运行的cpu架构,有armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64这些,常用的是armeabi和armeabi-v7a
stl "xxx" : C++ runtime support library,共有九种
cFlags "xxx" "xxx" : 编译选项
例如 :
要使工具自动识别C++提示只要如下语句:
stl "gnustl_shared"
cFlags "-IE:/Android_NDK/android-ndk-r11b/sources/cxx-stl/gnu-libstdc++/4.9/include"
文章图片
注:Android.mk文件 Android Studio会自动生成!与Eclipse不同!
如图:
文章图片
注:
把Android.mk文件拷贝到 main/jni文件夹下
右键---> External Tools --> ndk-build 生成 .so文件!!
如做如下配置 .so 就会生成在指定的目录下:
sourceSets.main{
(2)在项目的gradle.properties 文件中添加
android.useDeprecatedNdk=true
如图:
文章图片
最后,运行成功OK!
文章图片
这是之前的配置方法,有个不方便的地方就是无法DEBUG jni,要另添加插件,对写C/C++代码提示功能也不尽人意!
不过本篇是以Android Studio 2.2来配置滴!!在2.2版本,对NDK支持也越来越完善了,可以在
SDK Tool 中添加 CMake,LLDB来创建ndk项目并支持调试,自动编译,对C/C++的代码提示功能也增强了!
来自为知笔记(Wiz)
推荐阅读
- Android 传感器开发 完全解析
- Android?线程池(转)
- Android Studio22-NDK-LLDB调试
- Eclipse如何替换android应用图标
- 安卓的开端的相关配置
- Android 闹钟最终版
- 第一天安卓笔记
- [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法
- Android布局中实现圆角边框