NDK开发_笔记0
自谷歌搜索退出中国以来,谷歌对全球第二大市场中国的态度一直保持冷淡。可是北京时间12月8日,谷歌2016开发者大会在北京召开,同时专门针对中国的谷歌开发者网站已经上线:https://developers.google.cn/。谷歌针对中国开发者的网站域名是cn结尾,网站内含谷歌开发者需要的所有产品,包括Android开发的需要的SDK、Android Studio和搜索、地图、Chrome等产品的API。皆为官方正版,并可免费使用。

OK,在进行NDK开发学习之前,首先下载Android Stdio和SDK,我安装了最新版的 AndroidStdio2.2.3 版本。
下面抄下从该网站学习NDK的笔记:
· 使用场景
· 下载NDK及相关工具
· 创建一个本地项目
· 构建和运行示例应用
· APK分析器
Getting Started
Native Development Kit(NDK)是一套工具集;该工具集允许android开发用户使用C/C++代码编程。
使用场景
1、对于设备运行高性能的追求(游戏、添加物理硬件等)
2、重用自己或其他人开发的C/C++库
Android Stdio2.2及以上版本的开发环境集成了构建系统,你可以用NDK将C/C++代码编译成一个native库并通过Gradle工具将其打包到你的apk中。此时,你的Java代码就可以通过JNI接口调用Native Library中的函数。
想要学习更多Gradle和android构建系统的知识,可以访问Configure Your Build。
Android Stdio默认的本地库构建工具是CMake,但同时支持ndk-make,因为目前还有很多项目使用此工具构建本地库;如果你打算从头创建一个本地库,请使用CMake。
下载 NDK 及相关工具
为了编译和调试本地代码,你需要下载以下工具:
The Android Native Development Kit (NDK):
一套允许你在Android中使用C/C++的工具集。
CMake:
独立于Gradle的外部构建工具,用于构建你的本地库;如果你想用ndk-build构建,那么你将不需要安装该组件。
LLDB:
Android Studio用于调试本地代码的调试器。
你可以通过SDK Manager 安装以上3个组件:
Tools > Android > SDK Manager > SDK Tools
选择LLDB,CMake,NDK,进行下载。
创建一个本地项目
一旦你安装好了开发环境,就可以很轻松的创建一个支持C/C++的项目,具体步骤可以参考: Create a New Project with C/C++ Support。
根据上面网址的操作要求,得到如下工程目录。

(1)在 cpp 组中,您可以找到属于项目的所有原生源文件、标头和预构建库。
对于新项目,Android Studio 会创建一个示例 C++ 源文件 native-lib.cpp,并将其置于应用模块的 src/main/cpp/ 目录中。本示例代码提供了一个简单的 C++ 函数 stringFromJNI(),此函数可以返回字符串“Hello from C++”。要了解如何向项目添加其他源文件,请参阅介绍如何创建新的原生源文件的部分。
(2)在 External Build Files 组中,您可以找到 CMake 或 ndk-build 的构建脚本。
与 build.gradle 文件指示 Gradle 如何构建应用一样,CMake 和 ndk-build 需要一个构建脚本来了解如何构建您的原生库。对于新项目,Android Studio 会创建一个 CMake 构建脚本 CMakeLists.txt,并将其置于模块的根目录中。要详细了解此构建脚本的内容,请参阅介绍如何创建 Cmake 构建脚本的部分。
构建和运行示例应用
点击 Run 从菜单栏运行应用 后,Android Studio 将在我的手机上构建并启动一个显示文字“Hello from C++”的应用。

下面的概览介绍了构建和运行示例应用时会发生的事件:
(1)Gradle 调用您的外部构建脚本 CMakeLists.txt。
(2)CMake 按照构建脚本中的命令将 C++ 源文件 native-lib.cpp 编译到共享的对象库中,并命名为 libnative-lib.so,Gradle 随后会将其封装到 APK 中。
(3)运行时,应用的 MainActivity 会使用 System.loadLibrary() 加载原生库。现在,应用可以使用库的原生函数 stringFromJNI()。
(4)MainActivity.onCreate() 调用 stringFromJNI(),这将返回“Hello from C++”并使用这些文字更新 TextView。
下面是根据理解画出的构建运行流程图,不对的地方,欢迎大家批评指正,多谢。

注:Instant Run 与使用原生代码的项目不兼容。Android Studio 会自动停用此功能。
APK分析器
如果您想要验证 Gradle 是否已将原生库封装到 APK 中,可以使用 APK 分析器:
(1)选择 Build > Analyze APK。

(2)从 app/build/outputs/apk/ 目录中选择 APK 并点击 OK。

(3)如图 3 中所示,您会在 APK 分析器窗口的 lib/<ABI>/ 下看到 libnative-lib.so。

NDK开发_笔记0的更多相关文章
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 驱动开发学习笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇
驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Doc ...
- 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇
驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...
- 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统
驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...
- 驱动开发学习笔记. 0.01 配置arm-linux-gcc 交叉编译器
驱动开发读书笔记. 0.01 配置arm-linux-gcc 交叉编译器 什么是gcc: 就像windows上的VS 工具,用来编译代码,具体请自己搜索相关资料 怎么用PC机的gcc 和 arm-li ...
- Android Native 代码NDK开发学习笔记
引用:http://www.kunli.info/2011/08/21/android-native-code-study-note/ JNI,全称Java Native Interface,是用于让 ...
- Android NDK开发及OpenCV初步学习笔记
https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...
- Android(java)学习笔记259:JNI之NDK开发步骤
1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...
随机推荐
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- Linux下Nodejs安装(完整详细)
之前安装过windows下以及Mac下的node,感觉还是很方便的,不成想今天安装linux下的坑了老半天,特此记录. 首先去官网下载代码,这里一定要注意安装分两种,一种是Source Code源码, ...
- H5坦克大战之【画出坦克】
今天是个特殊的日子,圣诞节,也是周末,在这里先祝大家圣诞快乐!喜庆的日子,我们可以稍微放松一下,扯一扯昨天雷霆对战凯尔特人的比赛,这场比赛大威少又双叒叕拿下三双,而且是一个45+11+11的超级三双, ...
- 【HanLP】HanLP中文自然语言处理工具实例演练
HanLP中文自然语言处理工具实例演练 作者:白宁超 2016年11月25日13:45:13 摘要:HanLP是hankcs个人完成一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环 ...
- C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole(2)
这篇文章是上篇的续集,本文将会继续介绍coreconsole.cpp里面的逻辑.也许大家会看一些CLR的书,我承认我没有看过,因为我觉得一个人,他再NB,那也是他自己的眼光,而且说句难听的,CLR也不 ...
- C#制作简易屏保
前言:前段时间,有个网友问我C#制作屏保的问题,我瞬间懵逼了(C#还可以制作屏保!).于是我去查阅相关资料,下面把C#如何制作屏保的过程及我学习过程的心得也记录下来,希望对需要的人能有帮助. 基本思路 ...
- C++整数转字符串的一种方法
#include <sstream> //ostringstream, ostringstream::str() ostringstream stream; stream << ...
- JS or C#?不存在的脚本之争
前言: 又来到了周末,小匹夫也终于有了喘口气写写博客的时间和精力.话说周五的下午,小匹夫偶然间晃了一眼蛮牛的QQ群,又看到了一个Unity3D开发中老生长谈的问题,“我的开发语言究竟是选择JavaSc ...
- 拥抱.NET Core,如何开发一个跨平台类库 (1)
在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ...
- 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法
引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...