Android Ndk 入门

2018-02-02  本文已影响0人  struggle_2a26

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

准备工作:

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

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

  在Android Studio中进行配置

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

so   easy!!!!!!!!

配置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

配置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\

配置 ndk-build

开始编码 

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

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

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

C语言头文件

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

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

(JNIEnv *, jclass);  

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

jniclass.cpp

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

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

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

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

生成so库

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

接下来开始运行 

运行结果

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

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

上一篇下一篇

猜你喜欢

热点阅读