作为一个由原生桌面应用程序开发者(VC、Delphi)转行的Android菜鸟,虐心的事真是数不胜数:安装个开发工具下载个SDK需要整整一夜;早晨一上班点开Android Studio(简称AS),去倒个水回来了还不见它开始工作;开发工具一忙起来就会忘记你这个开发者,不知过了多久后才给你一句:“去TMD的GFW,我啥也没干成,你自己看着办吧!”。
对于我们这些已经被微软、Borland、Sybase洗脑多年的开发者,除了开发工具的不适应,最大的壁垒其实是大脑中已经固有的思维方式,往往在接受新概念时总要习惯性的去跟以往已经认知的东西做对比,这就要比一个New Comer耗费更多的时间和体力。比如说本文要谈的Android Support Library,一直被我望文生义的当做系统底层的支持库,在我的身边不停的出现,可是始终没有进入我的脑袋。于是经过一番搬梯FQ,查阅了官网资料,在这儿试着弄个水落石出。
要想真正的掌握Android Support Library,没有其它什么捷径,窍门。只有一条路,就是阅读官方的API参考,一个类一个函数的逐个搞明白。那就让本文做你开始品尝"API参考"大餐前的一道开胃菜吧。
官方文档上(原文:http://developer.android.com/tools/support-library/index.html)第一句话就指明了Support Library的作用:“Android Support Library代码包使新版本的Android框架中的最新特性能够兼容之前版本Android框架“。也就是说Support Library为不断升级的Android系统提供了向下兼容性。
上面的翻译还是不太直白,还是打个比方吧:假设Google发布的新版本Android API提供了一个新特性:你只需要调用一个简单的api函数就可以实现在App应用出现车辆照片时自动识别车辆品牌,并振动提醒用户,真是太酷了。可是你调用这个api写出的App应用在旧版Android手机上却无法展示如此狂拽酷炫diao炸天的车震特效,甚至都无法安装运行,真是让人沮丧。这时候就该Support Library出马了,Support Library可以让新api特性在指定版本的Android上也能正常运行。(请注意这里的“新api特性”和“指定版本”,在使用Support Libary时,首先要确定这两点:你要使用什么新api特性以及最低支持到哪个版本的Android。)
对于做过VC++开发的,Google的这种兼容方式看着太眼熟了。每一次Visual Studio的升级都会带来新版本的MFC库,程序发布时一定要同时打包相应版本的MFC库,才能在各个版本的Windows中运行。只是Google没有直接通过Google API库来实现这种兼容性,而是单独搞出个Support Library来。
官方文档上提到,对于应用开发者,根据应用程序支持的系统版本和使用的API函数,最好在Android工程中包含相应的Support Libary以使用新特性,这样不仅可以把你应用程序的界面由穷D丝变成白富美,更重要的是可以扩大你的用户群体。
对于Android开发者,由于要面对各种各样的设备类型、高低不同的系统版本,因此在由一坨Android开发的小鲜肉变成老腊肉的演变过程中,能够熟练处理兼容性问题是必不可缺的基本功之一。为此要熟知每一个特性是在哪一个API level上加入的,在查阅官方手册Api Reference时多留心右上角的API level。
另外还要把下一节所介绍的Support Library Features原文多读几遍。
Support Library其实是多个库(jar包)的组合,这里不得不说,它的jar包名比较有迷惑性,对于我这样的初学者来说,容易形成错误的“想当然认知”判断。例如下面的
com.android.support:support-v4:21.0.0
我一开始就粗心的把v4当成了版本号(21.0.0才是真正的版本号),因此总是迷惑什么情况选择v4版,什么情况选择v7版?是不是还有v5, v6?其实v4、v7都是Support Library中不同的库名称而已。包名中的v4不是版本号,只不过表明了它不凡的身世:“我的诞生,是为了照亮Android1.6(API level 4)用户的!”
Support Library的第1版(2011年3月发布)就只包含v4库,之后的版本不断地在完善v4库。一直到2年后(2013年5月)的第13版,为了兼容API level 7(android2.1)增加了v7这个库(v7其实也是一组库的组合)。此时已经Android4.3(API level 18)的时代。
随着Google为了提升用户体验,不断的解决版本兼容性问题,Support Library也越来越大。除了v4和v7这两个最常用的库,Support Library Features还包含了其它10几个库(不知将来Support Library是否会有终点?),关于每一个库的功能特性,在原文中(http://developer.android.com/tools/support-library/features.html)有详细的论述。在这里,只把Support Library包含的库名罗列一下。
v4 Support Library
Multidex Support Library
v7 Support Libraries(注意是复数,因此是一组库)
v7 appcompat library(这个最常用吧)
v7 cardview library
v7 gridlayout library
v7 mediarouter library
v7 palette library
v7 recyclerview library
v7 Preference Support Library
v8 Support Library
v13 Support Library
v14 Preference Support Library
v17 Preference Support Library for TV
v17 Leanback Library
Annotations Support Library
Design Support Library
Custom Tabs Support Library
Percent Support Library
App Recommendation Support Library for TV
由于v4 Support Library和v7 Support Librarys主要涉及程序组件,新的用户界面特效,网络连接等比较基础的变动,因此我们平时比较常用到。
如果你使用的是Android Studio(像我一样的菜鸟肯定选AS了,用过eclipse开发Android的老鸟请飞过这一节),Support Library的安装和使用非常简单。只需要打开SDK Manager,点几下鼠标,再加几行代码就行了。不信请看:
打开SDK Manager:
官网专门指出,如果你使用Android Studio,选择并安装 Android Support Repository ,不需要选择Android Support Library。
在官网介绍中,根据带资源和不带资源两种库分别介绍了不同的使用方法,实际上只是针对eclipse而言。如果使用Android Studio,使用方法是一样的:只需要打开build.gradle文件,增加下面的代码(以v4库为例):
dependencies { ... compile "com.android.support:support-v4:18.0.+" }
剩下的事,就是在代码中使用你需要的类了。
官方提醒:在应用程序中包含了Support Library后,强烈建议在发布程序前,使用ProGuard工具对发布包进行优化。这样除了能够保护你的源码不被别人用反编译工具获取,同时它把你程序所引用的第三方库中并未使用的类都去掉了,让你的应用程序保持尽可能的小,别忘了,手机上的存储可是寸土寸金啊!
既然你已经使用了Support Library,现在你的应用程序只差一步就能横行天下,兼容更多的系统版本了。那就是修改Manifest文件中的版本声明。打开Manifest.xml文件,找到android:minSdkVersion一项,把它修改的足够的低。
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17" />
你也许会问:“我改了Manifest.xml给谁看?”。是的,它还真不是给人看的。上面的Manifest.xml告诉Google Play(谷歌官方应用商店),你的程序可以安装在Android 2.1(API 7)版本之上的设备上,低于这个版本的,我猜应该就不给装了。因为我还没用过Google Play(暗自一阵脸红),国内的软件应用商店好象没有版本提示,我只见过Apple的应用商店是进行版本判断的。
在企业应用中,除了专业化较强的原生桌面应用程序,大多数业务系统已经迁移到了B/S架构的Web方式,随着移动互联网的普及,大量的应用程序将向手机迁移,这里面也会包括原有少量的桌面应用程序。原生桌面应用程序的生存空间越来越小,反之则出现了大量新的移动应用需求,新的机会慢慢来临。原生桌面程序开发人员,为了不被这个时代所淘汰,尽快掌握Android开发吧。路漫漫其修远兮,吾只能不停的上下折腾。