Android Ndk 入门

首先 看一下程序的运行效果


Android Ndk 入门_第1张图片



准备工作:

参考文章:NDK 开发 从入门到放弃


1.首先从官网下载ndk开发工具 ndk_bundle

  在Android Studio中进行配置

  File->Project Structure->Android NDK Location-> 选择ndk下载路径 -> OK

so   easy!!!!!!!!

Android Ndk 入门_第2张图片
配置NDK

2.开发前需要对Android Studio 进行 命令配置

  两个命令 javah和ndk-build.cmd

  javah 用于生成与JNI对应的 c/c++ 头文件

  配置 Setting->Tools-> External Tools -> 添加

      Name : javah.jni

      Description: 什么乱七八糟 

      Tool Setting 

          Program: 选择javah 路径; 我的路径为 C:\Program Files (x86)\Java\jdk1.8.0_144\bin\javah.exe

          Parameters:命令参数    -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$

          Working directory: 工作路径  $ModuleFileDir$\src\main\java


Android Ndk 入门_第3张图片
配置javah

  ndk-build.cmd 根据c/c++生成so文件

  Setting->Tools-> External Tools -> 添加

      Name : ndk-build

      Description:随便填

      Tool Setting

          Program:  ndk-build安装路径  G:\AndroidNDK\ndk-bundle\ndk-build.cmd 

          Parameters:

          Working Directory:  工作路径  $ModuleFileDir$\src\main\


Android Ndk 入门_第4张图片
配置 ndk-build


开始编码 

1.新建java Class JniClass, 添加 native 方法 egtStringFromC()  ,注意添加 native字段 ,标明该方法是原生方法。

Android Ndk 入门_第5张图片

在目录 选择该类 点击鼠标右键 选择 External Tools 可以看到 javah.jni 的命令 点击 


Android Ndk 入门_第6张图片

可以看到 main目录下多了一个jni目录 ,有一个以包名加类名为命名方式的c语言头文件 ,


Android Ndk 入门_第7张图片
C语言头文件


可以将 改头文件重命名 为 jniclass.h(任意名字)


Android Ndk 入门_第8张图片

需要用到里面的 一个以包名加类名加方法名的方法  JNIEXPORT jstring JNICALL Java_com_micheal_testndk_JniClass_getStringFromC

(JNIEnv *, jclass);  

新建文件 jniclass.c  将头文件里面的方法copy到 cpp文件中(最好是复制 自己写也行 不过必须相同   ) 方法里面的参数 JNIEnv 代表指向java虚拟机的指针  ,jclass 代表调用 ndk方法的java对象 ,如果 native方法 中有入口参数 ,紧跟在 第二个参数后面 ,前两个参数在使用 javah生成头文件时一定会生成的   ,之后的参数根据native方法生成。。。。。

Android Ndk 入门_第9张图片
jniclass.cpp


代码编写完成,需要在目录下添加 两个mk文件 

    Android.mk    用于指定生成编译生成的so库名称 引用的头文件目录 ,需要编译的 c/c++ 文件和静态库文件   用法参考 : Android.mk 用法详解


Android Ndk 入门_第10张图片

    Application.mk 指定需要编译的cpu架构平台  APP_ABI有四种类型(默认armeabi),armeabi、armeabi-v7a、x86、mips


Android Ndk 入门_第11张图片

一切就绪  选中之前新建的 jniclass.cpp 文件   使用ndk-build命令生成so库  


Android Ndk 入门_第12张图片
生成so库


可以看到 libs文件夹下面 生成了 各个平台下的 so文件  至此 编码 已经完成   用 Android Studio的同学注意了 ,so文件编译生成的路径在 main/libs下 但是 Android Studio 默认so文件路径 在 jniLibs下 ,所以需要在main文件夹下 新建jniLibs文件夹 将所有的so文件复制过去 ,否则运行时会抛出异常


Android Ndk 入门_第13张图片

接下来开始运行 


Android Ndk 入门_第14张图片
运行结果


和预期效果相同,多谢阅读。

文章仅供新手参考,存在错误之处 ,敬请指出, 本人也是新手,求交流,求批评。

你可能感兴趣的:(Android Ndk 入门)