有意无意见经常用到,如果工程引用别的库的话这个兼容库还经常冲突,到底何方神圣?为什么这个容易冲突呢?有点意思。
其实官方的文档很简单,对于兼容库的使用是一种Best practice,在兼容库中的Feature我们都可以使用,有助于我们提升UI的的质量、程序的性能等。在使用的同时对版本也会向前兼容到兼容库的level(比如我用了android-support-v4.jar的feature,则我们app最低可以在android api level v4(1.6)上运行)。
兼容库目前分为
- V4 support library,对应Api Lv4
(Fragment, NotificationCompat, LocalBroadcastManager, ViewPager, PageTitleStrip…) - V7 support library,对应Api Lv7
(ActionBar, ShareActionProvider, GridLayout, MediaRouter…) - V8 support library,对应Api Lv8
(RenderScript) - V13 support library,对应Api Lv13
(FragmentCompat)
(api roadmap)
可以看到不同level的兼容包包含了不同的feature(详情)
在官方文档中发现对于同一个兼容库其实存在很多revision:
- Android Support Library, revision 18 (July 2013)
- Android Support Library, revision 12 (February 2013)
- Android Support Library, revision 11 (November 2012)
- Android Support Library, revision 10 (August 2012)
- …
个版本的兼容库也在不断更新,不过jar包并没有表现出更新的版本号,只有监控库的版本,所以这里有可能会出现冲突,在基于模块/库进行开发时如果发现编译出现问题,可以对比一下兼容库jar包的大小。
在使用兼容库时要注意两点
1,同一个类类名相同,但是兼容库的包名以android.support开头。如用Fragment时就需要注意,使用当前SDK的Fragment还是v4的Fragment,需要在包名上进行选择!
2,同一个类功能相同,但是兼容库的类名多了Compat后缀如NotificationCompat
另外还需要注意,再AndroidManifest.xml中,App对应的最高与最低版本:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="17" />
最高版本的兼容包决定了最低的SDK Level,我们用到了V7 support Library,则minSdkVersion应该至少为7。