Android NDK学习系列——第一篇(持续更新)
NDK学习系列--第一篇
简介:
这是作者本人学习ndk开发的一个文章系列,因为本人Android开发出身,最近需要提升音视频开发能力,而音视频必须使用到ndk,所以记录一下学习的要点,在简书上分享给一起学习的朋友们。希望能对大家有所帮助。本人水平有限,如果有错误的地方,还请大家海涵,帮我指点一二。
NDK介绍
(英语:native development kit,简称NDK)是一种基于原生程序接口的软件开发工具。通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包。[维基百科]
NDK是一系列工具的集合
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的.
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
为什么要NDK开发
NDK开发具有以下优点:
1. 项目需要调用底层的一些C/C++的一些东西(java无法直接访问到操作系统底层(如系统硬件等)),或者已经在C/C++环境下实现了功能代码(大部分现存的开源库都是用C/C++代码编写的。),直接使用即可。NDK开发常用于驱动开发、无线热点共享、数学运算、实时渲染的游戏、音视频处理、文件压缩、人脸识别、图片处理等。
2. 为了效率更加高效些。将要求高性能的应用逻辑使用C/C++开发,从而提高应用程序的执行效率。但是C/C++代码虽然是高效的,在java与C/C++相互调用时却增大了开销;
3. 基于安全性的考虑。防止代码被反编译,为了安全起见,使用C/C++语言来编写重要的部分以增大系统的安全性,最后生成so库(用过第三方库的应该都不陌生)便于给人提供方便。(任何有效的代码混淆对于会smail语法反编译你apk是分分钟的事,即使你加壳也不能幸免高手的攻击)
4. 便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。
开发HelloWorld
开发环境:Android Studio4.0 gradle版本5.4.1
第一步:new project,选择下图中native c++,点击Next
第二步:点击finish即可创建项目,创建后的项目等编译成功即可运行。运行后可以看到Hello World!。恭喜你,迈出了ndk的第一步,只要坚持下去,升职加薪,迎娶白富美就在明天。
第一篇结语
俗话说万事开头难,但是ndk的第一个项目跑起来还是很简单的呀,既然不难那就继续坚持学习吧!下一篇开始分析Android ndk项目的结构。敬请期待!
深度解析 安卓 N七大新特性:多窗口模式让你边看视频边聊天!
2016 年 Google I/O 大会开放注册之后,Google 出人意料地正式发布了其最新移动操作系统Android N的开发者预览版。各大网友齐呼:这速度也太快了吧!因这次的预览提前了十周,作为最新版本的Android操作系统,尽管还只是开发者预览版,但是Android N中包含了诸多值得关注的新特性。
APUS 将率先适配Android N。下面,APUS产品专家就为安卓用户们全方位解析Android N新特性。
多窗口模式 (Multi-Window Support)
Android N允许手持设备(智能手机或者平板电脑)同时运行两个窗口,可以在纵向模式呈上下排列,也可以在横向模式中左右排列。
Android N中提供了两个切换到多窗口模式的方法:一是,用户可在最近任务的概览界面,长按支持多窗口模式的应用标题不放,拖拽到屏幕顶部,这时该应用会切换到多窗口模式,屏幕底部继续显示其他任务的概览界面;二是,如果当前的应用可以支持多窗口模式,长按导航栏的窗口按钮即可将当前应用切换到多窗口模式,屏幕底部显示其他任务的概览界面;用户可以拖动两窗口之间的分割线,使之任意变大变小。
不过需要注意的是,目前Android N的分屏功能只支持为数不多的需要持续并行显示的应用,如内容类应用(视频,工具书),工具类应用(计时,流量监控);但随着开发者的逐渐适配,越来越多的热门应用应该都会跟进。
多窗口模式支持拖放功能。主要用途是在窗口之间传输数据或其他种类信息。对于开发者来说如果应用需要支持多窗口模式,要对这部分的界面显示布局进行详细设计和测试,以匹配不同的高宽比。Android N开发者预览版自带的Google Play应用商店就在多窗口模式出现了适配的问题。
2. 通知机制 (Notifications)
Android 从4.1开始就支持了通知的扩展样式,也就是我们通常所说的多行通知栏,除了最顶部的通知扩展样式会默认展开之外,其他通知即使支持扩展样式默认也是收起的。想要展开只有两个办法:把该通知以上所有的通知全部清除,使之成为排名第一的通知,从而自动展开;或 用一个鲜为人知的下滑手势展开;所以,对于广大安卓开发者而言,支持扩展样式通知的效果其实是不尽如人意的,原因就是易用性不足从而导致曝光较少。
这个问题终于在Android N中获得了初步的解决。在上图中Gmail的通知顶部有一个箭头,点击即可切换收起状态和展开状态。如果没有箭头则表示这条通知是无法展开的(例如USB Debugging那条通知)。
其次,Android N中附带图标通知的视觉样式,与之前相比有很大变化。整体上来看样式更加规整,界面布局以信息为中心。通知的来源、接收通知的时间、标题和描述都集中在左侧,通过颜色和透明度的区分让重要信息一目了解。应用图标统一右置,与左侧信息形成有效的分隔。
Android N 可以根据来源将接收到的通知归拢在一起,而不是像现在这样四处散落。从以上四张图可以看出通知群体中的消息既可以全部收起,也可以分别展开,甚至全部展开,每个子通知都可以拥有单独的操作行为。除此之外,Android N的通知栏,可以直接对消息进行回复,虽然此前介绍图片上展示的Hangout现在还没有支持通知栏直接回复,但API已经开放。今后简单的回复和标记行为就可以在通知栏上直接完成了。
3. 流量节省程序(Data Saver)
Android N中提供了一个全局的流量控制机制,目的自然是为了防止应用程序在后台恶意偷跑宝贵的移动流量。这个功能是默认关闭的,一旦开启之后除了GMS(Google Mobile Service,谷歌移动服务)外,其他应用都是默认不允许在后台使用超过前台所消耗的移动流量。
对于开发者而言,在Android N系统中要主动检查用户是否开启了流量节省程序,并注意节约后台时的数据流量消耗。如果确实需要在后台使用数据流量,也要注意引导用户放开对本应用的限制。
4. Android 框架中提供部分ICU4J API 支持
ICU4J(International Components for Unicode)是由IBM维护,基于IBM公共许可证分发的免费开源Unicode工具库,开发者可以使用ICU4J根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息的格式化、解析,对字符串进行大小写转换、整理、搜索和排序等功能。
但由于Android N内置了部分ICU4J API,如果你的安卓应用只使用了这部分的API,那今后就可以不再集成庞大的高达10MB左右的ICU4J库了。开发者可以在Google Play上针对使用Android N的用户提供不含ICU4J的轻量安装包,而针对更早版本系统提供包含ICU4J的完整安装包。
5. 开始支持Java 8
从Android N开始,开发者可以使用Java 8来编写应用程序,目前Android N对于Java 8的支持并不全面,但这依然是一个重量级的更新。目前支持以下内容:
l默认和静态接口方法 :使开发者可以修改接口而不破坏原来实现类的结构;
lLambda 表达式 :不仅让代码变得更简单、更可读、最重要的是代码量也随之减少很多;
l重复注解 :允许在同一申明类型(类,属性,或方法)的多次使用同一个注解,提高可读性;
l反射及语言相关的API ;
l公用工具API ;
为了使用Java8同时还需要引入Jack编译工具链,与传统编译工具链相比的优势在于全部开源,编译速度更快。Jack编译工具链完整地包含了重打包,压缩,混淆,MultiDex工具,使用Jack编译工具链之后将不需要再依赖类似ProGuard和Jarjar之类的单独组件。
Jack编译工具链向下支持到Android 2.3应用的编译。同时Jack也是一套面向未来的编译工具链,未来预计还会支持Java 9,以及Java X。
开发者也可以继续使用Java7开发针对Android N的应用程序,但是编译时依然要使用JDK8。Jack编译工具链虽然非常诱人,但是对于开发者来说依然要做好充分的准备和测试工作。
6. 增强多语言支持 (Language and Locale)
在Android N之前的系统中,多语言的匹配略显粗暴,例如一个讲法语(瑞士)的用户,使用一个包含默认英语(美国)和法语(法国)资源的应用。匹配顺序为:
a) 法语(瑞士)-->匹配失败;
b) 法语->匹配失败;
c) 使用默认->英语;
但是这样的匹配,并没有考虑到用户懂不懂英语,只是因为英语是默认语言。而在Android N中,语言资源的匹配顺序优化为:
a) 法语(瑞士)->匹配失败;
b) 法语->匹配失败;
c) 查找法语的子项->法语(法国);
d) 使用法语(法国);
这样匹配方式的好处在于,在没有法语(瑞士)语言资源的情况下,法语(法国)的用户接受度必然高于英语(美国);
同时,海外很多国家的公民同时掌握多种语言。Android N允许用户用户选择多种系统语言,并基于上述的多语言匹配顺序的优化,用户使用各种移动应用时看到自己母语的概率也会有所提高。
对于开发者来说,虽然Android N提供了容错能力更强的语言匹配方案,但这是以延长匹配时间为代价的,因此为了加快语言匹配速度,提高资源可维护性,应该将各种语言资源尽量提升到同源语目录下。例如将es-US和es-ES合并到es-419目录下。Android N提供了接口获取用户设置的语言列表,应用在显示多语言内容时,应该考虑到语言列表的因素以提升用户体验。例如对于提供网页翻译功能的浏览器来说,如果用户显示了语言列表中任意一种语言,就不应该再提示用户翻译。
7.更加省电 (Efficiency)
在安卓6.0中,安卓引入了新的省电机制Doze,当时针对的场景只是当手机同时处于灭屏以及静止状态来减少应用对电量的消耗。但是在实际使用中手机灭屏时不仅仅是处于静止状态,还有很多情况下是处于运动状态的,例如步行,坐车,坐飞机等情况,这时Doze就不会生效。比如你出门在外把手机放在裤子口袋,若是Android 6.0的Doze则会认为用户还可能会使用设备而不启动后台省电管理机制。Android N在此基础上更进了一步,将Doze的作用范围扩展到手机灭屏的所有时间段,无论是处于静止还是运动,省电效果也有望进一步提高。
怎么样?Android N的新变化是不是很惊艳?面对这么多心水的功能,就让我们耐心等待Android N正式版的更新吧!APUS用户系统将率先适配Android N,为更多全球用户带去最佳的移动互联网接入体验。
相关问答
c++开发安卓app优缺点?Androidc/c++叫AndroidNDK。优势:1。效率特别高,废话JAVA是解释性语言,是把代码托管给jvm,效率能高么。事实:大型手游的核心都是c/c++编写的。(用JAVA...
android 手机把多个视频合并在一起,最简单的方法-ZOL问答weiyifan9811安装图中的软件并打开。2点击中间创建一个项目,必须创建项目才可以编辑。3、根据你的需要设置项目名字就是合并后的视频名称,选择比例这里有16...
njoy虚拟手柄怎么用?关于这个问题,nJoy虚拟手柄是一款用于模拟游戏控制器的应用程序,可以让您使用手机屏幕来模拟各种游戏的控制按钮和摇杆。以下是使用nJoy虚拟手柄的步骤:1.下...
vivo是不是 android 系统-ZOL问答它的系统funtouchos是深度定制的安卓,也就是改了一些东西的安卓,和小米的miui是一样的,本质都是安卓有用(0)回复9152avivo所有手机都是基于安卓系统的深度...
【英语翻译Welcometothe Android SDK!The Android SDKarchiveini...[最佳回答]用谷歌在线翻译,翻译完调下语序就行
【ANDR0ID4.4.2啥意思】作业帮[回答]ANDR0ID是安卓系统,指的是安卓系统4.4.2版本。
安卓怎么开降噪?安卓手机使用airpodspro,只需佩戴双侧耳机,自动开启降噪。AirPodsPro通过按压耳机柄来实现暂停、切换曲目、开关降噪等功能,这些操作在连接安卓后并没有发生...
android 系统是基于Linux对吗?android系统是基于Linux的,Andorid是Linux嵌入式开发的。只是接口之类的是基于java的,编程语言是java。Android:基于Linux内核的操作系统,是Google公...
手机开不了机手机一直显示poweredby android ?根据描述,建议同时按住电源键和下音量键7秒以上重启设备;若是可拆卸电池手机,长按电源键8-10秒重启机器尝试。若以上操作后问题依然存在,建议您携带购机发...
手机变成全英文怎么处理?-ZOL问答点击手机桌面【settings】→【Advancedsettings】→【language&input】→【Language】→点击“中文”可切换。点击手机桌面【设置】→【高级设...