Android?Studio?NDK编程-环境搭建及Hello!

智者不为愚者谋,勇者不为怯者死。这篇文章主要讲述Android?Studio?NDK编程-环境搭建及Hello!相关的知识,希望能为你提供帮助。
一,下载  安装android-ndk开发包 
NDK各个版本链接 
二,新建项目NDKDemo,选择空Activity就可以;
(注:Android  studio  2.2,可通过SDK  Tools  添加LLDB,CMake,更方便的开发jni程序了三,按F12,配置项目NDK路径:

Android?Studio?NDK编程-环境搭建及Hello!

文章图片


四,在MainActivity中添加如下代码:
static  {
        System.loadLibrary("MyJni"); //导入生成的链接库文件
}
public  native  String  getStringFromNative(); //本地方法
public  native  String  getString_From_c();
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
红色代码是本地方法!不知是否Android  studio对ndk支持不太好所致,但不影响开发JNI程序!
在最新的Android  Studio2.2  能很好的支持ndk了,不再出现红色!
五,Make  Project一下,生成class文件!
Android?Studio?NDK编程-环境搭建及Hello!

文章图片

使用Android  studio2.2  就是这锤子图标!
六,通过class文件生成头文件!
Android?Studio?NDK编程-环境搭建及Hello!

文章图片

(1)通过Terminal  中的命令来生成:
输入javah  -d  jni  -classpath  ../../build/intermediates/classes/debug  com.it5.ndkdemo
(注意前后有英文的; 号隔开的哈)!
注:../后面的就是class文件的目录!!
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
大家看了,是不是有点晕圈啊,虽然可以复制路径,但如果每次都这样就太不方便了!!
另可以在工具中配置命令的快捷键,来完成!
(2)Settings  ->   External  tools中配置javah,ndk-build快捷方式!!
javah(生成头文件),ndk-build(编译)
打开External  Tools  点加号添加javah:如下图:
【Android?Studio?NDK编程-环境搭建及Hello!】
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配置如下:
Android?Studio?NDK编程-环境搭建及Hello!

文章图片

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  中,就右击该类生成!
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
这样就会在main文件下创建jni文件夹并生成  .h头文件成功!
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
现在ok了,快捷就是爽啊!!!
接下来,就是编写C/C++的代码了!
七,在jni目录编写C代码!
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
注:
项目结构切换成  Android状态时,jni文件夹显示成  cpp名字! 
当切换成project时就显示成jni文件夹!!
如下图:
 
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
Android?Studio?NDK编程-环境搭建及Hello!

文章图片

 
 
添加如下代码:
 
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
八,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?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
注:Android.mk文件  Android  Studio会自动生成!与Eclipse不同!
如图:
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
注:
把Android.mk文件拷贝到  main/jni文件夹下
右键---> External  Tools  --> ndk-build    生成  .so文件!!
如做如下配置  .so  就会生成在指定的目录下:
sourceSets.main{        jni.srcDirs  =  []                jniLibs.srcDir  "src/main/libs"        }
 
(2)在项目的gradle.properties  文件中添加
android.useDeprecatedNdk=true
如图:
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
最后,运行成功OK!
Android?Studio?NDK编程-环境搭建及Hello!

文章图片
 
 
这是之前的配置方法,有个不方便的地方就是无法DEBUG  jni,要另添加插件,对写C/C++代码提示功能也不尽人意!
不过本篇是以Android  Studio  2.2来配置滴!!在2.2版本,对NDK支持也越来越完善了,可以在
SDK  Tool  中添加  CMake,LLDB来创建ndk项目并支持调试,自动编译,对C/C++的代码提示功能也增强了!


来自为知笔记(Wiz)


    推荐阅读