在Android中开源类库使用过程中兼容性等问题的讨论
1、在Android4.0环境下编译的actionbarsherlock、slidingmenu类库,能不能在4.0以下的版本中使用


相信很多人跟我一样,都以为在低版本(如Android2.1或2.3版本)编译的应用能够在高版本中运行,但高版本(比如Android3.0或4.0)中编译的应用恐怕就不能在低版本中运行。于是,我们可能就会想方设法地把一些在高版本中编译的代码,改成在低版本的Android SDK中编译,以便兼容。我们一直忽视了在<manifest>文件中关于兼容性的声明,如下面代码段。
<uses-sdk
android:minSdkVersion="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer"
/>
android:minSdkVersion就声明了应用可以运行在最小的什么API版本之上。我们如何知道,一个应用可以运行在什么API上面呢?常查Android Reference(API文档)的同学,应该对下面这幅图很熟悉。

在API Reference中不仅说明了你调用的函数的功能,也说明了它是在什么版本API中引入的(见红框处)。从而我们需要检查一下自己应用中的系统调用函数的是在什么版本的API中引入的。

slidingmenu的兼容性声明

actionbarsherlock的兼容性声明
上面两幅图分别是slidingmenu、actionbarsherlock的兼容性说明。如果我们只使用slidingmenu,那么我们的应用里面的兼容性说明的android:minSdkVersion只要大于5就行了,如果同时使用slidingmenu、actionbarsherlock,那么android:minSdkVersion就必须至少是7。
对于Android高版本中引入的SDK,一般google都会推出相应的兼容包。比如在Android3.0才推出的Fragment相关API,在android-support-v4这个兼容包中就有对应的兼容API,详见创建Fragment。
最后,做一个结论,在高版本的环境下(如Android4.0)编译的应用能不能在低版本的Android系统中运行不是看编译的SDK版本,而是取决于android:minSdkVersion这个最小API版本声明。
当然,你不能声明了android:minSdkVersion是5,结果在引用中使用了android:minSdkVersion为11才引入的API。
2、遇到“IllegalStateException: Both setBehindContentView must be called in onCreate in addition to setContentView.”错误
这个错误是在一启动,还没见到界面的时候,就爆出的错误。这是因为在代码中,缺少 setBehindContentView(R.layout.menu_frame)。而这个函数主要就是用来决定侧边栏长什么样的。
public class BaseActivity extends SlidingFragmentActivity
而这又是因为我的Activity继承了SlidingFragmentActivity(见下面代码段),这个特殊的Activity本身就带有侧边栏,因此必须在OnCreate函数那里就调用setBehindContentView()函数来设置侧边栏的样式。
在Android中开源类库使用过程中兼容性等问题的讨论的更多相关文章
- 转:Oracle中SQL语句执行过程中
Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...
- Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程
1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文 ...
- 微软BI 之SSIS 系列 - 对于平面文件中 NULL 值处理过程中容易极易混淆的几个细节
开篇介绍 最近有人问我有关文件处理中空值处理的相关问题: OLE DB Destination 中的 Keep Nulls 如何控制 NULL 值的显示? 为什么选中了 Keep Nulls 但是数据 ...
- oracle中自定义type、以及java中传递list到过程中的例子
在java开发过程中有时候为了处理数据的速度更快,会把要处理的数据组装成list,把list作为过程的一个参数,在过程中批量处理,下面就以一个例子做简单的阐述,以此谨记. --药品目录智能审核 --说 ...
- Android无线测试之—Genymotion配置过程中常见问题
一.前提条件: 已经部署好了Android UiAutomator测试环境. 二.在部署Genymotion时遇到了两类问题: 1.通过eclipse打开一个模拟设备,然后将编译好的jar包push到 ...
- EasyPlayer安卓Android流媒体播放器实现直播过程中客户端快照功能
本文转自:http://blog.csdn.net/jyt0551/article/details/56942795 对于一个裸的RTSP URL,存放在播放列表上略显单调与枯燥.大家可以看到Easy ...
- android实现系统电话通话过程中自动感应黑屏
package com.developmenttools.customui.activity; import java.util.HashSet;import java.util.Set; impor ...
- [置顶] NS2中TCP拥塞控制仿真过程中盲点解析
最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...
- C++ 中关于optional 使用过程中遇到的问题
头文件:#include <boost/optional.hpp> using namespace boost; optional很像一个仅能存放一个元素的容器,它实现了"未初始 ...
随机推荐
- ado.net access oracle dataset via store procedure
使用存储过程返回结果集,并绑定到ado.net对象中在sql server里面是非常直观的. 1: create procedure GetAllRecords 2: as 3: select * f ...
- props
// 这里是导入的包 import React, { Component } from 'react'; // 导入需要用到的组件 import { AppRegistry, Text, View } ...
- 企业好助手U-Mail邮件服务器软件
对于一家企业,最核心的是什么?有人说人才,有人说技术,也有人说是数据(信息),依小编来 看,这些答案都没错,人才会流动,技术在不断更新,唯有数据(信息),日积月累,将沉淀为公司历史的一部分,作为决策的 ...
- Android-Junit-Report测试报告生成——Android自动化测试学习历程
视频地址: http://www.chuanke.com/v1983382-135467-384869.html 这个内容其实已经在用了,我在上一篇文章robotium—只有apk文件的测试中已经讲过 ...
- 也说面试 - 一个努力的iOS Dev
你们在金色的余晖中回家,而我却在银色的温柔中,匆匆潜行-----这是我的现状. 今年的招工形式不是很好,难找工作:也难招人.写这篇博客,是为了给各位在找工作的iOS dev 一些参考. 上篇:换坑(去 ...
- jQuery 3.1.1 官方下载地址
https://code.jquery.com/jquery-3.1.1.jshttps://code.jquery.com/jquery-3.1.1.min.js 打包下载: http:// ...
- C# upnp
//获取Host Name var name = Dns.GetHostName(); Console.WriteLine("用户:" + name); //从当前Host Nam ...
- 时间转换为yyyymmdd
Convert.ToDateTime(tbinpici.Text).ToString("yyyyMMdd")
- 《CSS3秘籍》(第三版)-读书笔记(4)
第12章 CSS页面布局 网页布局的类型: 固定宽度.不管浏览器窗口的宽度多大,网页内容的宽度始终保持不变. 流式.流式设计采用百分比,它会根据浏览器的宽度(无论有多宽)自动进行调整.网页会随着访问 ...
- IT_sort用法实例
form fill_it_sort. iw_sort-spos = '1'. iw_sort-fieldname = 'AUFNR'. iw_sort-up = 'X'. ...