我是靠谱客的博主 舒心灰狼,最近开发中收集的这篇文章主要介绍Android Studio 第一个NDK例子 概述 下载NDK和工具 创建第一个NDK应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

概述


NDK(Native Development Kit )一个工具集,它允许在Android开发中使用C/C++代码来使用物理设备的一些组件,比如传感器、输入设备等。

下载NDK和工具


  1. NDK:NDK Downloads
  2. CMake:一个外部的构建工具,与Gradle建立自己的本地库。 你不需要这个组件,如果你只打算使用ndk-build。
  3. LLDB:用于调试本地代码的调试器。
    PS:这些工具都可以使用SDK Manager下载。
当前博文所用例子的环境如下所示:
名称 版本号
Android Studio 2.1
JDK 1.8.0_65
NDK 12.1.2977051
compileSdkVersion 23
buildToolsVersion 23.0.2
minSdkVersion 23
targetSdkVersion 23

PS:NDK如果在第三方平台下载,解压后需要配置环境变量—新建变量ANDROID_NDK,变量值为NDK解压路径,并把ANDROID_NDK追加到path中。

创建第一个NDK应用


1. 创建一个基本的项目


创建一个基本项目

2. 配置NDK环境

在文件local.properties中配置ndk路径(追加即可)

ndk.dir=C:\Users\Administrator\AppData\Local\Android\sdk\ndk-bundle

PS:如果在安装AS时使用默认路径,并且ndk使用AS集成的SDK Manager软件下载,则上面的路径是通用的,否则需要自行配置。

3. 创建一个Jni类

在Module app中创建一个普通类JniTest.java,并定义一个使用native修饰的方法getStringFromNative。结果如下图所示:


4. Make(构建)Module app生成字节码(*.class)文件

接下来是构建app项目,构建的方式可以使用Make,也可以使用build,下面以Make为例子。操作步骤很简单,首选选中Module app,接着点击菜单栏的Make Module 'app'即可。图片说明如下:


如果顺利在路径:appbuildintermediatesclassesdebugcomsandwichjellymyapplication下会生成字节码文件JniTest.class

PS:构建是为了把项目中所有的源文件(.java)编译成为字节码文件(.class)的过程。所以,实际上可以使用javac命令去生成。

5. 生成头文件(*.h)

  • 首先打开工具栏的Terminal工具,使用cd命令定位到Moduel app的main目录,如下图:

  • 接着在Terminal工具输入下面命令:

    javah -d jni -classpath ../../build/intermediates/classes/debug com.sandwich.jelly.myapplication.JniTest

    javah 执行javah命令生成头文件(*.h)

    -d jni 在当前目录创建一个文件,文件名称是jni

    -classpath xxx/debug 指定要生成头文件(.h)的字节码文件路径(class)

    com.sandwich.jelly.myapplication.JniTest
    包名(com.sandwich.jelly.myapplication)+字节码名称(JniTest)

顺利情况下,在路径:app/src/main/下会生成一个文件夹jni,文件夹下生成一个文件com_sandwich_jelly_myapplication_JniTest.h,该文件会有一个未实现的方法,方法名称为JNICALL Java_com_sandwich_jelly_myapplication_JniTest_getStringFromNative,该方法对应的就是JniTest.java类对应的getStringFromNative方法。


6. 创建JniTest.c文件

第5步中说到了一个方法JNICALL Java_com_sandwich_jelly_myapplication_JniTest_getStringFromNative,这相当于是java的抽象方法,它只声明但是没有任何实现,一般情况下需要创建一个ccpp文件去实现相应的方法。

  • 首先创建一个文件JniTest.c
  • 编辑JniTest.c,导入头文件com_sandwich_jelly_myapplication_JniTest.h
  • 实现头文件的抽象方法

PS:当Android开发中调用JniTest类中的getStringFromNative方法时,它对应的实现是在JNICALL Java_com_sandwich_jelly_myapplication_JniTest_getStringFromNative
方法中。所以实现了java代码和C层代码的通信。

7、准备就绪,开始构建.so文件。

方法与第4步的方法相同,使用Make工具。

构建完成后在路径:appbuildintermediatesndkdebuglib下会生成符合各个系统的so库。


PS:如果构建出现下面错误:


gradle.properties文件中追加下面代码即可:

android.useDeprecatedNdk=true

8、使用so库,显示Hello AS!

  • 使用so库。在JniTest.java中添加代码
    static {
    System.loadLibrary("app");
    }

添加完代码后,如下图:


PS:System.loadLibrary("app");中的app表示的是库名称,前面的lib不需要填写。

  • 编写一个MainActivity.java,并使用JniTest.java中的getStringFromNative方法。如下图:

9、运行Module app

运行成功,结果如下图:


这种方式比较简便  连mk文件都不需要自己写  但是可能也带来很多局限  还是自己写mk文件的放心一点

最后

以上就是舒心灰狼为你收集整理的Android Studio 第一个NDK例子 概述 下载NDK和工具 创建第一个NDK应用的全部内容,希望文章能够帮你解决Android Studio 第一个NDK例子 概述 下载NDK和工具 创建第一个NDK应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部