Loading...

httpv://youtu.be/LFyhbV2Puog

轉載自: http://www.csdn.net/article/2013-12-23/2817882

程序员2014.01封面

《程序员》2014年1月刊:11.11背后的技术

Android 4.4新功能解密

作者:钟文昌

2013年11月1號,Google 釋出最新版 Android 4.4,代號叫做KitKat,KitKat是鵲巢的巧克力棒。

2013年11月1日,Google推出最新版Android 4.4操作系统,代号为KitKat(KitKat是雀巢出品的巧克力棒)。透过Android 4.4(或是KitKat)等相关关键字,你可以找到关于Android最新的更新,这些相关网页上都有KitKat的介绍。我们这里将主要介绍一下Android 4.4所做的一些改动。

最新版的Android希望能让Android OS尽可能的跑在比较低配置的装置(行动装置)上,并希望能跑在512MB的内存上,所以最新版引入了一个低内存的设计,希望Android OS可以在低内存的装置上也能运行的相对流畅。因此,Android 4.4在App应用开发的部分引入了一个新的API,叫做ActivityManager.isLowRamDevice,它也代表一个新的方法。我们都知道ActivityManager是用来管理Activity的,Activity就是用来跟使用者互动的UI,也可以说是所谓的人机介面。我们可以透过这个新的方法来优化App,让装置可以在低内存的环境下执行得比较流畅。

新的NFC功能,透过Host Card Emulation针对NFC支付等一些NFC附加功能。

Android 4.4可以透过NFC触碰感应的方式来支持NFC的支付功能。

Printing列印、打印功能,Android4.4可以透过Wi-Fi或Cloud的方式去搜寻可用的打印机,包含使用者可以修改打印纸张的大小、然后选择特定的页面去打印等。

Storage Access Framework,开发者可以通过Document Provider去建立一个Cloud或本地服务。如果你是开发App Client的,你可以用两个新的Intent,一个是CREATE_DOCUMENT,另一个是OPEN_DOCUMENT,去创建或开启档案。

Low-Power Sensor,这是hardwaresensor batching,Android 4.4引入了所谓的Hardware sensor batching,它能降低CPU的功耗,这主要也跟硬件相关。简单来说,就是将Sensor事件,队列在硬件的寄存器中,然后在一定的時間間隔或是一定的延遲之内,批次量地读取,用Batch的方式回报给上层AndroidOS,回报相关的Sensor 事件,来达到节省CPU功耗的目的。由Sensor硬件配合来处理Batch与Queue的功能。不过,目前这项功能只在Nexus 5上有,而且因为这个功能跟硬件有关,Google与晶片商也正在紧密的合作。

穿戴式装置的布局,StepDetector和Step Counter是侦测使用者的计步器,它们可以侦测使用者走路的步数。

SMS Provider,MessageApp的开发者可以使用SMS Provider和新的API去管理、控制Message Storage,这个新的SMS Provider和新的API定义了一组标准的Interaction互动模式供所有的App来Handle SMS与多媒体短信、简讯。

与Full-screen类似的3D的显示模式,意思是Android App的画面可以像类3D的方式来操作,是一个全屏的方式来操作使用者的App。

半透明的UI设计,包括状态栏和导航栏。强化的通知提醒,你可以看到更多的信息。

WebView全面进化成Chromium,Android 4.4引入了全新实作的WebView,所以接下来的WebView都是基于Chromium的。也就是说,在所谓的效能上以网页为载体的内容上都有所强化,主要是以HTML5、CSS3以及JavaScript为主,所以有一版新的JavaScript引擎,V8的引擎可以用来强化JavaScript的效能。

加強多媒體支持(這是一個主標題, 以下幾個都是跟多媒體相關的, 一直到RenderScript)

使用者可以做荧幕录影的操作,可以直接录制操作画面,也可以通过SDK中的adb指令直接进行录影。

Resolution switching through adaptive playback,让使用者在播放影片时,在尽可能不受影响的情况下,根据使用者当下的环境自动改变播放时的解析度。

HTTP Live Streaming。

Audio Tunneling to DSP,这是为了达到高性能、低耗电的设计,因为DSP(Digital Signal Processor)是专门用来处理audio/video这种硬件编解码的功能。DSP可以降低CPU的使用量,因为DSP将硬件编解码的动作设计成硬件线路,所以能达到高性能和低耗电的目的。Nexus 5在离线的状况下可以播放音乐达60个小时,相对而言,节省50%的功耗。

新的Monitoring工具可以监控audio的变化,它通过新的Loudness Enhancer功能来增加使用者声音和音量的大小。

Wi-Fi CERTIFIED Miracast,Wi-Fi display,这功能可以把使用者手机上的画面投射到其他的装置上,包含电视或投影机等支持Miracast的装置上,就是所谓的多屏。

RenderScript,强化绘图、着色等相关功能,RenderScript改进了Android 4.4的效能。我们可以看到,透过硬件GPU的加速来增强其相关效,強化的百分比在效能上有所增强。GPU的加速已可以应用在Nexus 4、Nexus 5、Nexus7,以及Nexus 10上(Nexus 4/5是手机,Nexus 7/10是平板),开发者可以透过NDK来开发RenderScript,NDK是用来开发NativeCode的工具组,就是所谓的Android NativeDevelopment Kit,用来开发Android原生代码,也就是C++代码。

Graphics(這是一個主標題)

GLES, OpenGLES从1.0到2.0。

新的hardwarecomposer for virtual display,Android4.4是hardware composer 1.3,hardware composer可以叠加在一个虚拟Display上,除了主要的和外接的Display,可以另外再叠加在一个虚拟的Display上。

New Bluetooth profile,这又是为了穿戴式设备而布的局,Bluetooth HID Over GATT (HOGP)是一种低功耗的,用来与低功耗的装置作衔接的一种Bluetooth的通讯协议。

引入了红外线,使用者可以当成遥控器,远端遥控电视等红外线装置。同样在Wi-Fi环境下的装置可以透过Wi-Fi Tunneled Direct LinkSetup来交换流媒体或做资料上的传输。

Caption,caption的图如上,就像在播视频上的字幕一样,就是播放影片所显示的字幕。VideoView可以用新的API去传递caption的stream。WebVTT,所谓caption的格式,WebVTT也与HTML5的字幕格式相关,可以在使用者的影片上显示所谓的字串或字幕。

支持更多国家的使用者。(主標題)

RTL是所谓的从右至左的书写方式,一些国家的输入方式是由右至左,而非像我们由左至右那样的。使用者可以通过设置->选项,来观察所谓的RTL由右至左的排版方式。

Security enhancements,引入了强制模式的SELinux,在Android4.4之前都是所谓的Permissive Mode,也就是开发商或手机制造商可以启动也可以不启动,可以自适应的配置启动也可以不启动。但从Android 4.4开始,Security Enhancement Linux是强制启动的,这里所指的是如果App等相关程序违反了SELinux的协议,那么这个App有可能就不能被执行。Android4.4引入了一些跟安全性相关的强化,包含crypt的算法、强化的security,以及增加了两个新的加密算法。

增加开发者或使用者对系统内存的分析和程序的状态,一个叫做Procstats的新工具可以帮助开发者分析与内存等相关的资源的使用。这个新的工具可以检查每一个App或服务使用系统资源的百分比跟时间。它也是一个加强版的内存资讯,我们可以看到使用者所使用的内存,多少KB、PID(process ID),以及各个程序占用了多少内存。

New Android Runtime: ART

https://source.android.com/devices/tech/dalvik/art.html,Android 4.4 KitKat引入了一个新的、还在实验阶段的VirtualMachine,AndroidRuntime: ART,而这个新的ART最终将会取代Dalvik成为Android的虚拟机,我们可以透过Settings-> Developer Options -> Select Runtime动态地切换Android Runtime: Dalvik runtime (libdvm.so)或是ART (libart.so)

art目录下的Andr​​oid.mk说明了切换Dalvik与ART所使用的命令:

.PHONY: use-art

use-art:

        adb root&& sleep 3

        adb shell setproppersist.sys.dalvik.vm.lib libart.so

        adb reboot

.PHONY: use-artd

use-artd:

        adb root&& sleep 3

        adb shell setproppersist.sys.dalvik.vm.lib libartd.so

        adb reboot

.PHONY: use-dalvik

use-dalvik:

        adb root&& sleep 3

        adb shell setproppersist.sys.dalvik.vm.lib libdvm.so

        adb reboot

Dalvik依然是预设的Andr​​oid Runtime。而dalvikvm指令亦支持两种模式。一个新的变数PRODUCT_RUNTIMES,用以控制编译时的设定:

PRODUCT_RUNTIMES := runtime_libdvm_default

PRODUCT_RUNTIMES += runtime_libart

Android 4.4 KitKat的manifest.xml说明了ART源码的位置:

<project path="art"name="platform/art" />

ART其相关源码说明了命令及其oat、image的档案格式:

dex2oat/dex2oat.cc:

   UsageError(" –oat-file=<file.oat>: specifies the oat output destination via afilename.");

   UsageError("     Example: –oat-file=/system/framework/boot.oat");

   UsageError(" –image=<file.art>: specifies the output image filename.");

   UsageError("     Example: –image=/system/framework/boot.art");

  // Notes on the interleaving of creating the imageand oat file to

  // ensure the references between the two are correct.

  //

  // Currently we have a memory layout that lookssomething like this:

  //

  // +————–+

  // | image    |

  // +————–+

  // | boot oat  |

  // +————–+

  // | alloc spaces |

  // +————–+

Android上层开发之所以采用Java,是因为Java代码运行于虚拟机上,所以只需要编写一次,便能运行于所有平台,例如x86,ARM及MIPS等等,这是其选择Java的优点,但相对的缺点是其运行的效能一直是一个被诟病的议题,因为Java代码需要在运行期间作转译,将bytecode转译成machine code,才能在该平台上执行,而这种运行时期的转译动作,严重影响Java运行的效能,而ART使用ahead-of-time (AOT)Compilation,于代码实际运行前(编译时,或是在第一次安装时),将其转译为机器语言,进而提高Java运行时的效能,但由于ART目前还处于实验阶段,所以如果选择ART做为Android Runtime,有可能造成App crash、不相容、以及系统不稳定等问题,而ART其优化效能的方式可能会占用更多的存储空间。

On-device 内存使用狀態及顯示圖表,使用者可以透过设置->开发者选项,来观察程序的状态,可以针对每一个程序,看到其所使用的内存大小。不同颜色代表不同的意思,绿色代表该应用使用的内存较少,黄色代表中间,红色代表所使用的内存较多。使用者可以看到内存负载的情况,而且可以修改想要监控的时间,可以是3、6、12或是24小时,基本上达到监控装置上的应用程式所使用内存的情况。

最后,我们可以透过GoogleAndroid 4.4相关的关键字找到关于Android的历史,从Android1.0、1.5、1.6(Donut 甜甜圈)、2.0、2.2、2.3(Gingerbread)、Honeycomb(给平板用的)、到4.0 ICS(Ice Cream Sandwich)、再到4.1Jelly Bean,一直到最新的4.4 KitKat。目前Nexus 5是搭载最新版的Android4.4 KitKat。我们可以看到包含KitKat画面上的介绍、截图、语音,增强了语音的搜寻、画面的Layout、更快的多工打印功能,云端的结合等。

Loading...