- 博客(20)
- 资源 (2)
- 收藏
- 关注
原创 Android NDK 从入门到精通(汇总篇)
注意:本文为各博客汇总分类的链接贴,方便大家快速寻找和学习相应的内容。未完待续,佛性更新中~~专栏地址 Android NDK 开发,从入门到精通NDK 入门 NDK 开发第一课:环境配置与第一个 JNI 程序JNI 知识 JNI 数据类型和类型描述符 JNIEnv 和 JavaVM JNI 接口大全 JNI 静态注册...
2018-07-30 19:40:46 44564 2
原创 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 111315
原创 Android Studio build.gradle 中配置 cmake,及各 arguments 详解
一、简介 在 Android Studio 2.2 以上的版本,推荐使用 CMake 来编译工程里的 C/C++ 代码(包括 JNI 部分)。 一般来言,我们只需要关注和编写 CMakeLists.txt 即可,至于 CMake 如何编译,以及使用的什么样的配置选项是不怎么关心的(会有一系列默认的配置)。不过,如果你需要更改或者定制化一些编译的选项,你就需要了解一下如果在 gra...
2018-07-29 15:37:37 22579
原创 C/C++ 命令解析:getopt 方法详解和使用示例
一、简介getopt() 方法是用来分析命令行参数的,该方法由 Unix 标准库提供,包含在 <unistd.h> 头文件中。 二、定义int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg;extern int optind, opterr, o...
2018-07-28 15:58:42 49908 9
原创 CMakeLists.txt 语法介绍与实例演练
一、Cmake 简介cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。二、常用命令1. 指定 cmake 的最小版本cmake_minimum_required(VERSION 3.4.1)这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.tx...
2018-07-25 14:12:18 236378 61
原创 TEE(可信执行环境)介绍
一、背景 Android 平台作为一个开放的软件平台,正在越来越多的受到恶意软件的攻击,体现在用户的敏感数据被窃取、数字版权被滥用、移动支付存在重大安全隐患等等。因此,需要在 Android 平台中引入一个可信执行环境,用来进行数字版权管理(DRM : Digital Rights Management )、移动支付和敏感数据保护。 二、定义 TEE 是 Trusted...
2018-07-24 15:49:49 18608
原创 求图片的平均亮度
图像相关开发中,有时我们需要知道和了解图片的 亮度 这一信息,例如判断图片是否曝光严重过度或者太黑什么都看不清。那么怎么去获取到图片的 平均亮度 这一信息呢?一、YUV 图片 一般相机的原始数据类型就是 YUV 格式,这种格式下很容易求得亮度,因为它的 Y 通道就是亮度通道,我们只需要求得 Y 通道的平均值就可以了。 由于 YUV 图片前 width * he...
2018-07-24 15:09:51 11429
原创 so 动态库崩溃问题定位(addr2line与objdump)
一、需求分析so 的崩溃并不像 Java 代码那么好定位,我们通常看到的就只是 so 中的一大段崩溃的堆栈信息。那么我们怎么通过这个堆栈信息来定位我们的问题呢? 二、addr2line1. 介绍Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。一般适用于 debug 版本或带有...
2018-07-24 14:44:19 26933 9
原创 求 yuv( nv12 / nv21 ) 图片各通道的均值
一、简介 YUV,是一种颜色编码方法。常使用在各个视频处理组件中。“Y”表示明亮度(Luminance、Luma),“U” 和 “V” 则是色度、浓度(Chrominance、Chroma)。 NV21 和 NV12 是 YUV 的两种具体编码形式,以一个 2*2 像素大小的图为例,则排列如下: NV21:YYYYVUVU NV12:YYYYUVUV 二...
2018-07-23 16:25:16 2097
原创 JNI 静态注册和动态注册
一、前言 当执行一个 Java 的 native 方法时,虚拟机是怎么知道该调用 so 中的哪个方法呢?这就需要用到注册的概念了,通过注册,将指定的 native 方法和 so 中对应的方法绑定起来(函数映射表),这样就能够找到相应的方法了。 注册分为 静态注册 和 动态注册 两种。默认的实现方式即静态注册。 二、静态注册1. 定义 通过 JNIEXPORT...
2018-07-13 15:18:07 12126 1
原创 NDK 开发之 Android LOG 工具类
一、背景介绍一般在 JNI 层输出 Android log 时,不会直接使用原生的接口,而是做一层简单的封装。我们希望输出一种带有 文件名、方法名、行号 等信息的 Android log,可以帮组我们更加快速的定位 log 是在何处输出的。并且,我们希望可以很轻松的控制 log 的打开和关闭。 二、LogUtils.h 工具类如果想要关掉 log,注释掉 #define DE...
2018-07-13 14:09:25 6117 4
原创 JNI 方法大全及使用示例
一、说明这里介绍的函数大多是 NDK 开发中常用的函数,但并不是全部,内容稍多,基本可以满足我们的开发需求了,建议通过目录索引来找需要了解的。 这里的函数都是 JNIEnv 操作的相关函数,JNI_OnLoad 等 JavaVM 的方法不在这里介绍。 JNI 有 C、C++ 两种代码风格,即: C风格:(*env)->NewStringUTF(env, "Hellow Wo...
2018-07-12 16:04:38 16072 3
原创 浅谈 JNIEnv 和 JavaVM
一、概念1. JavaVmJavaVM 是虚拟机在 JNI 层的代表,一个进程只有一个 JavaVM,所有的线程共用一个 JavaVM。2. JNIEnvJNIEnv 表示 Java 调用 native 语言的环境,是一个封装了几乎全部 JNI 方法的指针。JNIEnv 只在创建它的线程生效,不能跨线程传递,不同线程的 JNIEnv 彼此独立。native 环境中创建的线程...
2018-07-10 15:07:22 13267
原创 Android底部导航栏,三种风格和实现
一、效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发。二、BottomNavigationView 这是 Google 给我们提供的一个专门用于底部导航的 View,你只需要在新建 Activity 的时候选择 “Bottom Navigation Activity”,IDE 就会自动使用 Bo...
2018-07-07 12:36:53 138664 44
原创 JNI基础:JNI数据类型和类型描述符
一、简介 在 JNI 开发中,我们知道,Java 的数据类型并不是直接在 JNI 里使用的,例如 int 就是使用 jint 来表示。那么,就如我们来认识一下这些数据类型吧。 二、基本数据类型 Java数据类型 JNI本地类型 C/C++数据类型 数据类型描述 boolea...
2018-07-03 15:57:37 19031
原创 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 14783 1
设计模式之禅第二版
2018-06-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人