Android NDK 学习
文章平均质量分 89
1. NDK 与 JNI 介绍, 入门实例分析
2. JNI 讲解
3. Cmake 讲解
4. Android Studio 的一些配置讲解
阿飞__
熟悉 Android、C++ 等
展开
-
Android NDK 从入门到精通(汇总篇)
注意:本文为各博客汇总分类的链接贴,方便大家快速寻找和学习相应的内容。未完待续,佛性更新中~~专栏地址 Android NDK 开发,从入门到精通NDK 入门 NDK 开发第一课:环境配置与第一个 JNI 程序JNI 知识 JNI 数据类型和类型描述符 JNIEnv 和 JavaVM JNI 接口大全 JNI 静态注册...原创 2018-07-30 19:40:46 · 44597 阅读 · 2 评论 -
NDK/C++ 耗时统计类TimeUtils
一、需求分析在开发阶段中,经常会需要打印出某些方式或步骤的耗时情况,大致需求如下:能打印出某个步骤的耗时;有开关可以控制打开和关闭耗时统计;使用方便。二、准备工作之前介绍过一个 log 输出的工具类,可以沿用,链接为:https://blog.csdn.net/afei__/article/details/81030373。LogUtils.h 示例:#ifndef _LOG_...原创 2019-08-21 17:37:42 · 3584 阅读 · 1 评论 -
NDK/JNI 开发之 Java 类和 C 结构体互转示例
一、简介JNI 开发中,常常会存在对应的 Java 类和 C 结构体需要互相转换。通过本实例学习和了解这个过程。预备知识:JNI数据类型和类型描述符介绍:https://blog.csdn.net/afei__/article/details/80899758JNI 方法及使用示例:https://blog.csdn.net/afei__/article/details/81016413......原创 2019-07-12 16:46:29 · 8721 阅读 · 3 评论 -
Android NDK 面试题汇总
一、谈谈你对 JNI 和 NDK 的理解JNI:JNI 是 Java Native Interface 的缩写,即 Java 的本地接口。目的是使得 Java 与本地其他语言(如 C/C++)进行交互。JNI 是属于 Java 的,与 Android 无直接关系。NDK:NDK 是 Native Development Kit 的缩写,是 Android 的工具开发包。作用是更方便和...原创 2018-12-08 00:29:20 · 12518 阅读 · 4 评论 -
Android Studio 配置一键生成 JNI 头文件工具
一、前言我们知道进行 NDK 开发中,native 方法大多是需要进行静态注册的,如果手动一个个写,不仅容易出错,而且繁琐和浪费时间。那么有什么好用的工具可以使用呢?这个其实是有的,就在我们的JDK中就有一个 javah.exe 工具帮助我们生成 JNI 的头文件,我们只需要将其配置到 Android Studio 中就可以很方便的使用它了。二、效果示例如下,com_afei_opengl...原创 2019-02-28 00:03:17 · 5909 阅读 · 5 评论 -
Android.mk 语法和变量介绍
一、简介Android.mk 是一种脚本语言,是将 C/C++ 源文件粘合至 NDK 的构建文件。官网对 Android.mk 的介绍:https://developer.android.com/ndk/guides/android_mk二、一些超级基本的语法例如我们使用 # 表示注释,使用 $() 表示取值,使用 := 表示赋值,使用 += 表示附加等等。在学习之前,我们起码得看得懂这...原创 2018-11-14 17:05:39 · 11337 阅读 · 0 评论 -
NDK 开发之 Bitmap 的使用
一、前言Bitmap 是 Android 中经常使用到的图片操作的一个类,它包含了图片的宽、高、格式、像素等信息。那么我们怎么在 NDK 中使用它呢。二、bitmap.h1. 介绍NDK 已经为我们准备好了在 NDK 中操作 Bitmap 的相关头文件了,它就是 <android/bitmap.h>。我们先来看看这个头文件里面都包含哪些重要的信息吧。2. An...原创 2018-08-05 11:36:41 · 7666 阅读 · 0 评论 -
NDK 开发之“文件夹遍历”(C++文件夹遍历)
Java 层只给 JNI 层传递文件夹路径,在 JNI 中完成文件夹里的文件操作,通常都避免不了需要使用到 文件夹遍历 这个功能。那么,在 NDK 开发中怎么进行文件夹的遍历呢?其实这就和 C++ 的文件夹遍历方式差不多。NDK 也给我们提供了 <dirent.h> 头文件,通过这个头文件中的相关方法,我们就可以完成这个功能了。native-lib.cpp代码如下:#in...原创 2018-08-01 17:13:24 · 5083 阅读 · 0 评论 -
NDK开发第一课:环境配置与第一个JNI程序
一、JNI 与 NDK1. JNI 是什么 JNI 是 Java Native Interface 的缩写,即 Java 的本地接口。 目的是使得 Java 与本地其他语言(如 C/C++)进行交互。 JNI 是属于 Java 的,与 Android 无直接关系。2. NDK 是什么 NDK 是 Native Development Kit 的缩写,是 ...原创 2018-07-03 14:09:56 · 14793 阅读 · 1 评论 -
NDK工具链的生成和配置(图文解说)
一、NDK 工具链是什么简单的说,就是 NDK 编译工程使用的东西,我们的目的就是把它抽出来在任何地方都可以直接、方便的使用。二、步骤1. 下载 NDK,并切到 /build/tools/ 目录,例如2. 执行如下命令 ./make-standalone-toolchain.sh --platform=android-21 --install-dir=$TARGET...原创 2018-06-17 20:22:01 · 8697 阅读 · 1 评论 -
JNI基础:JNI数据类型和类型描述符
一、简介 在 JNI 开发中,我们知道,Java 的数据类型并不是直接在 JNI 里使用的,例如 int 就是使用 jint 来表示。那么,就如我们来认识一下这些数据类型吧。 二、基本数据类型 Java数据类型 JNI本地类型 C/C++数据类型 数据类型描述 boolea...原创 2018-07-03 15:57:37 · 19049 阅读 · 0 评论 -
浅谈 JNIEnv 和 JavaVM
一、概念1. JavaVmJavaVM 是虚拟机在 JNI 层的代表,一个进程只有一个 JavaVM,所有的线程共用一个 JavaVM。2. JNIEnvJNIEnv 表示 Java 调用 native 语言的环境,是一个封装了几乎全部 JNI 方法的指针。JNIEnv 只在创建它的线程生效,不能跨线程传递,不同线程的 JNIEnv 彼此独立。native 环境中创建的线程...原创 2018-07-10 15:07:22 · 13277 阅读 · 0 评论 -
JNI 方法大全及使用示例
一、说明这里介绍的函数大多是 NDK 开发中常用的函数,但并不是全部,内容稍多,基本可以满足我们的开发需求了,建议通过目录索引来找需要了解的。 这里的函数都是 JNIEnv 操作的相关函数,JNI_OnLoad 等 JavaVM 的方法不在这里介绍。 JNI 有 C、C++ 两种代码风格,即: C风格:(*env)->NewStringUTF(env, "Hellow Wo...原创 2018-07-12 16:04:38 · 16092 阅读 · 3 评论 -
NDK 开发之 Android LOG 工具类
一、背景介绍一般在 JNI 层输出 Android log 时,不会直接使用原生的接口,而是做一层简单的封装。我们希望输出一种带有 文件名、方法名、行号 等信息的 Android log,可以帮组我们更加快速的定位 log 是在何处输出的。并且,我们希望可以很轻松的控制 log 的打开和关闭。 二、LogUtils.h 工具类如果想要关掉 log,注释掉 #define DE...原创 2018-07-13 14:09:25 · 6127 阅读 · 4 评论 -
JNI 静态注册和动态注册
一、前言 当执行一个 Java 的 native 方法时,虚拟机是怎么知道该调用 so 中的哪个方法呢?这就需要用到注册的概念了,通过注册,将指定的 native 方法和 so 中对应的方法绑定起来(函数映射表),这样就能够找到相应的方法了。 注册分为 静态注册 和 动态注册 两种。默认的实现方式即静态注册。 二、静态注册1. 定义 通过 JNIEXPORT...原创 2018-07-13 15:18:07 · 12144 阅读 · 1 评论 -
so 动态库崩溃问题定位(addr2line与objdump)
一、需求分析so 的崩溃并不像 Java 代码那么好定位,我们通常看到的就只是 so 中的一大段崩溃的堆栈信息。那么我们怎么通过这个堆栈信息来定位我们的问题呢? 二、addr2line1. 介绍Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。一般适用于 debug 版本或带有...原创 2018-07-24 14:44:19 · 26955 阅读 · 9 评论 -
CMakeLists.txt 语法介绍与实例演练
一、Cmake 简介cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。二、常用命令1. 指定 cmake 的最小版本cmake_minimum_required(VERSION 3.4.1)这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.tx...原创 2018-07-25 14:12:18 · 236450 阅读 · 61 评论 -
Android Studio build.gradle 中配置 cmake,及各 arguments 详解
一、简介 在 Android Studio 2.2 以上的版本,推荐使用 CMake 来编译工程里的 C/C++ 代码(包括 JNI 部分)。 一般来言,我们只需要关注和编写 CMakeLists.txt 即可,至于 CMake 如何编译,以及使用的什么样的配置选项是不怎么关心的(会有一系列默认的配置)。不过,如果你需要更改或者定制化一些编译的选项,你就需要了解一下如果在 gra...原创 2018-07-29 15:37:37 · 22595 阅读 · 0 评论 -
Android Studio gardle 配置 ndk 指定 ABI: abiFilters 详解
一、ABI 是什么ABI 是 Application Binary Interface 的缩写。不同 Android 手机使用不同的 CPU,因此支持不同的指令集。CPU 与指令集的每种组合都有其自己的应用二进制界面(或 ABI)。 ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。 您必须为应用要使用的每个 CPU 架构指定 ABI。典型的 ABI 包含以下信息:机...原创 2018-07-29 16:19:09 · 111353 阅读 · 0 评论