Android SDK各个版本API的特性及兼容性(Dalvik/ART)_android sdk是17可以兼容最高安卓版本-程序员宅基地

技术标签: JVM/DVM  

Android最新support包v4,v7,v13,v14,v17等 - http://download.csdn.net/download/u012808234/9502763

Android API Level与sdk版本对照表- http://blog.csdn.net/shuaishenkkk/article/details/18400711

Android系统版本与API等级对应关系表- http://www.bubuko.com/infodetail-1928589.html

Android各版本 发布时间 及对应API(2018.8.31截至Android最新版本 P)- https://blog.csdn.net/weixin_41101173/article/details/79620490

android关于使用哪个版本开发的讨论-- http://blog.csdn.net/pkxiuluo01/article/details/9022703

> Android SDK各个版本API的特性,属性;sdk的官网
Android1.1主要特性: 
   闹钟;API 示例;浏览器;计算器;摄像头;联系人;开发工具包;拨号应用;电子邮件 ;地图 (包含街景) ;信息服务;音乐;图片;设置  

 

Android 1.5 API变更概要: 

 1、UI framework
  · Framework for easier background/UI thread interaction
  · 新SlidingDrawer 组件
  · 新HorizontalScrollview 组件
 2、AppWidget framework
  · 一些关于创建桌面AppWidget 的API.
  · 提供根据自定义的内容创建LiveFolders的API
 3、Media framework
  · 原声录音和回放 APIs
  · 交互式的MIDI 回放引擎
  · 开发者使用的视频录像API (3GP format).
  · 视频相片分享 Intents
  · 媒体搜索Intent
 4、Input Method framework
  · 输入法服务framework
  · 文本预测引擎
  · 提供具有下载能力的IME给使用者
 5、Application-defined hardware requirements
  应用可定义硬件需求,应用程序可以定义说明此程序需要什么硬件需求.比如是否需要物理键盘或者轨迹球.
 6、Speech recognition framework
  · 支持语音识别库.
 7、Miscellaneous API additions
  · LocationManager -应用可以接收到位置改变的信息.
  · WebView - 触摸start/end/move/cancel DOM 事件的支持
  · 重建Sensor Manager APIs
  · GLSurfaceView - 创建OpenGL 应用更加方便的framework .
  · 软件升级安装成功的Broadcast Intent - 更加平和优秀的软件升级体验

Android 1.6 API变更概要:
 1、UI framework
  · 新的类 android.view.animation 控制动画行为:
  o AnticipateInterpolator
  o AnticipateOvershootInterpolator
  o BounceInterpolator
  o OvershootInterpolator
 2、· 新的XML 属性android:onClick ,从一个layout文件描述一个view的 View.OnClickListener.
  · 对不同分辨率的屏幕的新的支持. 对于Bitmap和Canvas会执行有针对性的缩放行为.该框架会根据屏幕分辨率和其他内容自动缩放bitmap等.
  要在你的应用中使用Android 1.6包含的API的话你必须要设置 "4"属性在manifest的 元素中
 3、Search framework
  · 应用程序现在可以公开的有关内容,作为建议放入快速搜索框,新的设备范围内的搜索功能,是可从主屏幕搜索。为了支持这一点,搜索框架增加了新的属性,可搜索的元数据文件。有关完整的信息,请参阅SearchManager文档。
 4、Accessibility framework
  · New android.accessibility package that includes classes for capturing accessibility events and forwarding them to an AccessibilityService handler.
  · New AccessibilityService package that lets your application track user events and provide visual, audible, or haptic feedback to the user.
 5、Gesture Input
  · 新的gesture API :创建,识别,读取,保存手势.
 6、Text-to-speech
  · 新的android.speech.tts 包提供了TTS文本朗读功能,从一个文本生成一个声音文件的回放.
 7、Graphics
  ·android.graphics 中的类,现在支持为不同的屏幕尺寸进行缩放.
 8、Telephony
  · 新的SmsManager 发送和接受短信.
 9、Utilities
  · 新的DisplayMetrics 字段决定当前设备屏幕的密度.
 10、Android Manifest elements
  o 新的 元素
  o 新的 标签
  o glEsVersion: 指定最小openGL ES的版本
  ·
  11、元素的新的属性:
  o 目标SDK版本: 应用程序能够指定目标版本. 它能够运行在旧版本(低至minSdkVersion), 他是按照应用程序的指定版本开发的. Specifying this version allows the platform to disable compatibility code that is not required or enable newer features that are not available to older applications.
  o maxSdkVersion: 指定设计这个程序运行的最高版本 重要: 当使用 这些属性前请认真阅读文档.
 12、New Permissions
  · CHANGE_WIFI_MULTICAST_STATE: 允许应用进入Wi-Fi 多点传送模式.
  · GLOBAL_SEARCH: 允许全局搜索系统,以便精确确定 content provider.
  · INSTALL_LOCATION_PROVIDER: 允许应用在Location Manager.安装一个location provider.
  · READ_HISTORY_BOOKMARKS: 允许应用读取(并不能写) 用户的浏览记录和书签
  · WRITE_HISTORY_BOOKMARKS: 允许应用写入 (并不能读) 用户的浏览记录和书签
  · WRITE_EXTERNAL_STORAGE: 允许程序写入外部存储器.应用程序使用API级别3下将默认授予此权限 (这对用户可见的); 应用程序使用API level4 或者更高的,必须要明确的宣告此权限.

Android 2.0 API变更概要:
 1、Bluetooth
  · 开启关闭蓝牙
  · 设备和服务发现
  · 使用 RFCOMM连接一个可插拔的设备收发数据
  · 公布RFCOMM 服务和监听接收 RFCOMM 连接
 2、Sync adapters
  · 新的APIs, 同步桥接器连接任何backend
 3、Account Manager
  · 集中的帐户管理器 API ,安全的储存和使用可信的tokens/passwords
 4、Contacts
  · 新的通信APIs 允许获取多个账户的数据.
  · 新的快速通信framework APIs 允许开发者在他们的应用中创建通信标记, 一键点击标记打开一个新的窗口展示一个如何联系当前人的列表.
 5、WebView
  · 不赞成使用的类: UrlInterceptHandler, Plugin, PluginData, PluginList, UrlInterceptRegistry.
 6、Camera
  · 颜色模式, 场景模式 闪光模式, 焦点模式, 白平衡 旋转和其他设置的新的特征.
  · 当缩放级别改变的时候,会回调新的缩放回调接口.
 7、Media
  · MediaScanner现在为所有图片生成缩微图when they are inserted into MediaStore.
  · 新的缩微图 API : 检索需要的图片和视频的缩微图.
 8、Other Framework
  · android.R.style 中新的系统主题,能够更加简单的显示当前acitivities的系统壁纸或者保持之前的activity在后台.新的壁纸管理器API 取代并且增加了wallpaper APIs ,我们可以允许我们的应用要求设置系统壁纸.
  · 新的Service APIs帮助应用准确的处理Service 生命周期 ,在指定的低内存状态下service将会被关闭.
  o Service.setForeground() 不推荐使用,并且现在这个方法并没有实际执行. .他被一个新的API所取代, startForeground(), that helps (and requires) associating an ongoing notification with the foreground state.
  · MotionEvent 如果设备允许的话,MotionEvent 会返回多点触摸信息.最多可同时获取3点
  · KeyEvent 现在有了新的按键发送 APIs,去帮助实现 action-on-up 和长按键行为, 一个新的机制取消按键 (虚拟按键).
  · WindowManager.LayoutParams 现在有了新的常量允许窗口能够在被锁或者其他的状况中唤醒屏幕,这个允许程序能够让例如闹钟等的应用实现唤醒设备.
    ·New Intent APIs 广播设备的对接状态,当这个设备放在桌面或者停车场,允许程序启动特殊的activity.
 9、Key events executed on key-up
  Android 2.0能够使用虚拟按键HOME, MENU, BACK和SEARCH,而非物理按键,为了让用户在他们的设备中获得最好的用户体验,android平台现在把这些按键执行加入到了key-up,做了 key-down/key-up 配对,而非只有key-down.,这有助于防止意外按钮事件,并让使用者按下按钮区域,然后拖动而不生成一个事件出来。
  这种改变只会影响你的应用程序一点,如果它是拦截按钮事件,最好用key-down,而不是key-up.。特例,如果您的应用程序拦截BACK 键,你应该确保你的应用妥善处理按键事件。

Android 2.0.1 API变更概要:
  · 新的快速联系人标记风格(quickContactBadgeStyle)* 属性,让应用的QuickContactBadge 组件接收必要的风格.
  · 当在manifest里面宣布了filter,取消了支持 ACTION_CONFIGURATION_CHANGED 广播 ,如果想要去接收这个广播, 这个应用必须注册 registerReceiver(BroadcastReceiver, IntentFilter).
  性能上的改变:
    1、Bluetooth
  改变了 ACTION_REQUEST_ENABLE 和ACTION_REQUEST_DISCOVERABLE的返回值
  · ACTION_REQUEST_ENABLE 如果蓝牙是成功开启的,现在返回RESULT_OK .如果使用者拒绝开启蓝牙的请求,则会返回RESULT_CANCELED .
  · ACTION_REQUEST_DISCOVERABLE 如果使用者拒绝启动蓝牙或者蓝牙的可发现功能,则返回 RESULT_CANCELED .
  2、通讯
  The ACTION_INSERT Intent returns RESULT_CANCELED in cases where the contact was not persisted (例如剪切保存到一个空的操作里面).
  修复错误:
  3、资源
  现在framework可以正选择应用资源的根据API等级划分的文件夹(drawable-v4是API level4版本用的资源).现在的版本这个功能不能正常工作的问题已经修复.
  4、Contacts
  The ACTION_INSERT Intent now returns the appropriate kind of URI when the request is made using the (now deprecated) Contacts APIs.
  5、Other Framework fixes
  · getCallingPackage() 现在正确的报告包名, 而不是进程名.

Android 2.1 API变更概要:
 1、?Live Wallpapers 动态桌面
?   以下增加的API可以提供你开发动态的桌面:
  · 新android.service.wallpaper 包.
  · 新WallpaperInfo 类.
  · 升级的WallpaperManager.
  附加说明, 如果你的应用相提供Live Wallpapers的功能, 你必须记得增加一个 元素到你的应用manifest里面. 宣布这个属性android:name="android.software.live_wallpaper". 举例:
 2、电话
  · 新的SignalStrength 类提供当前网络信号的一些信息这些信息可以从onSignalStrengthsChanged(SignalStrength) 回调.
  · 新的onDataConnectionStateChanged(int, int) 回调.
 3、Views
  · 新的View 方法isOpaque() 和onDrawScrollBars(Canvas).
  · 新的RemoteViews 方法addView(int, RemoteViews) 和removeAllViews(int).
  · 新的ViewGroup 方法isChildrenDrawingOrderEnabled() 和setChildrenDrawingOrderEnabled(boolean).
 4、WebKit
  · 新的WebStorage 方法操作网页数据缓存.
  · 新的GeolocationPermissions 方法获取 Geolocation permissions 的出处, 把他们设置到 WebView上.
  · 新的WebSettings 方法管理软件缓存, 网页缓存 和屏幕的缩放.
  · 新的WebChromeClient 方法处理视频, 历史记录, 自定义view, 软件缓存限制还有其他??

Android 2.2 API变更概要:
 1、对Microsoft Exchange更好的支持。
    Android的几个新特性使之更适于Exchange企业环境。其中一些新特性列举如下:基于用户名/密码的         Exchange帐号自动检测支持Exchange日历的同步
  改进的安全性,管理员可以跨越设备强制应用安全策略
  恢复出场设置——管理员可以将设备重置为出场设置,这样就能在设备被偷或丢失后擦除上面的敏感数据了
  全局的地址列表查找——可以根据服务器端返回的列表帮助用户自动填充收件人的邮件地址
  设备管理API。Android 2.2改进并新增了大量的设备管理API,开发者可以将其用在应用当中:
  应用数据备份API——可以将应用数据备份到云中。如果用户切换到另一个Android设备,他就可以从之前的设备中恢复数据。
 2、Cloud-to-Device消息API。云中的用户/系统可以凭借这种增强在设备上触发动作。该特性可以将移动警告发给手机并且支持双向的推同步服务。
    可以直接在外部的内存设备(SD卡)上安装应用,还可以将应用从内部迁移到SD卡上,反之亦然。
 3、网络共享。Android 2.2可以通过一台Android电话提供的热点将多个服务连接到Internet上。
  性能。借助于新式的Dalvik JIT编译器,对于CPU密集型应用来说,Android 2.2的速度要比Android 2.1快2~5倍。根据Linpack基准测试结果,安装了Froyo的Nexus
  One电话可以达到37.5 MFlops,而同样的电话如果使用Android 2.1的话才有6.5 MFlops。
  更快的浏览速度。由于浏览器现在使用了Chrome V8引擎,JavaScript代码的处理速度要比Android 2.1快2~3倍。
  从浏览器中访问设备API。现在可以直接从浏览器中访问大量的设备API,如加速器、相机、声音识别、翻译等,这样Web应用就能以前所未有的方式与设备交互了。比如说,用户可以在拍完照后将其上传到网上,而这一切都是在浏览器内完成的。
 4、支持Flash 10.1。Froyo支持最新的Flash 10.1
  Beta版。最近,JIT编译器的引入极大地改进了性能,这对Flash应用的运行起到了巨大的帮助作用,因为大家都知道,Flash应用是一种CPU密集型应用。
  Android商店。Android 2.2开发者和商店用户会从如下新特性中受益无穷:
  可以在Android商店搜索应用,包括应用数据
  更新——点击一次按钮后会自动更新所有应用
 5、崩溃与冻结报告。Android2.2集成了崩溃/冻结报告特性,这样在崩溃时用户就可以将完整的细节信息报告给应用发布者了
  从PC上浏览商店并将应用直接下载到设备上。用户可以通过PC选择商店的应用,之后应用就可以发到到加载的设备上。要想使用这个特性,用户需要登录并且设备需要在Android商店注册-
 6、音乐管理。用户可以将Windows Media或Mac iTunes上的所有非DRM音乐转换到Android设备上播放。

Android 2.3 API变更概要: 
Android 2.3姜饼发布,代号Gingerbread,包含哪些新特性和改进呢? 
   1. 新增android.net.sip包,名为SipManager类,可以轻松开发基于Sip的Voip应用。同时使用时必须至少包含这两个权限 <uses-permission android:name="android.permission.INTERNET"> and <uses-permission android:name="android.permission.USE_SIP">,如果需要在Market上过滤仅显示支持VoIP API的机型,可以在发布时androidmanifest.xml中加入 <uses-feature android:name="android.software.sip" android:required="true"> 和 <uses-feature android:name="android.software.sip.voip"> 这两个标志。 
  2. Near Field Communications (NFC) 近距离通讯的支持,NFC可以在不接触的情况下实现数据交换通讯,可以很好的代替RFID SIM卡实现手机支付等扩展功能,当然Android123提示这需要硬件的支持 
,新增包在 android.nfc包含NfcAdapter,NdefMessage,NdefRecord等类,类似蓝牙的处理方式,使用该API需要声明权限<uses-permission android:name="android.permission.NFC"> ,同时在Market上过滤支持NFC的设备需要加入<uses-feature android:name="android.hardware.nfc" android:required="true">这句。 
  3. 新增陀螺仪和其他的传感器支持 
  Android 2.3加入了一些新的感应器,比如gyroscope陀螺仪, rotation vector旋转向量, linear acceleration线性加速器 gravity和barometer气压计的支持。如果过滤这些功能,发布时加入类似<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true">到androidmanifest.xml中。 
  4. 多摄像头支持 
新增 Camera.CameraInfo 可以管理摄像头前置或后置 
新增 getNumberOfCameras(), getCameraInfo() 和 getNumberOfCameras() 获取摄像头数量。   
新增 get() 方法,可以获取摄像头配置信息 CamcorderProfile 
新增 getJpegEncodingQualityParameter() 获取jpeg编码质量参数可以在 CameraPreview.java 文件从ApiDemos示例程序中查看。 
5. 新增拍照API 
  比如获取焦距getFocusDistances()获取预览FPS getPreviewFpsRange(), 获取焦距范围 getSupportedPreviewFpsRange() 和设置教育 setPreviewFpsRange() 
6. 混响音效 
本次Android 2.3框架中加入了对混响音效的支持,比如低音,耳机和虚拟化等效果. 
新增 android.media.audiofx 包 
新增 AudioEffect 类提供音效控制 
新增音频会话ID,设置 AudioTrack 和 MediaPlayer. 
新 AudioTrack 新增 attachAuxEffect()、getAudioSessionId()和 setAuxEffectSendLevel()。 
新 attachAuxEffect() ,getAudioSessionId(), setAudioSessionId(int), 和 setAuxEffectSendLevel() . 
相关音效在 AudioFxDemo.java 的 ApiDemos 示例。 
6. 照片EXIF信息改进 
新增经纬度标签在JPG格式的EXIF中,同时可以使用 getAltitude() 方法获取经纬度的EXIF信息 
新增setOrientationHint() 可以让程序获取视频录制的方向. 
7. 下载管理 
在Android 2.3中新增的下载管理支持长时间运行的Http下载服务支持。可以保证在手机重启后仍然重试下载等操作,整个过程在后台执行。 
通过 DownloadManager 类使用getSystemService(DOWNLOAD_SERVICE) 来实例化,通过 ACTION_NOTIFICATION_CLICKED 这个Intent来处理。 

8. 限制模式 
  可以帮助开发者监控他的应用的性能,处理线程阻塞,避免ANR的发生。 
StrictMode.ThreadPolicy 和 StrictMode.VmPolicy 获取VM相关信息. 
使用限制模式优化的Android应用程序可以查看android.os.StrictMode包的具体介绍。 

Android 3.0 API变更概要: 
Android 3.0 SDK中新增了哪些API呢? 我们总结下平板系统honeycomb中的新特性, 首先需要澄清的是经过Android123发现设置模拟器的分辨率到普通WVGA这样的解析度时平板的特性自动消失和Android 2.3没有什么太大区别,按照这样来看未来Android 3.0除了兼容平板外还继续可以被手机所支持,据称3.0的代码针对A9双核CPU进行了进一步的改进。 
  一、Fragments 碎片容器 
  有关Android Fragments的内容,Android开发网在前几天已经用几篇文章详细讲解了下,大家可以从Fragment对比Activity - Android碎片介绍 一文开始了解。 
  二、Action Bar 活动栏 
  活动栏Action Bar可以替换传统的标题栏在Activity窗口中,包括程序图标和一些新接口在activity的选项菜单中,另外Action Bar允许你 
  Include select menu items directly in the Action Bar—as "action items"—for quick access to global user actions. 
  In your XML declaration for the menu item, include the attribute, android:showAsAction with a value of "ifRoom". When there's enough room in the Action Bar, the menu item appears directly in the bar. Otherwise, the item is placed in the overflow menu, revealed by the icon on the right side of the Action Bar. 
  Add interactive widgets to the Action Bar—as "action views"—such as a search box. 
  In the XML for the menu item that should behave as an action view, include the android:actionViewLayout attribute with a layout resource for the action view or android:actionViewClass with the class name of the widget. Like action items, an action view appears only when there's room for it in the Action Bar. If there's not enough room, it is placed in the overflow menu and behaves like a regular menu item (for example, an item can provide a SearchView as an action view, but when in the overflow menu, selecting the item activates the search dialog). 
  Add an action to the application logo when tapped and replace it with a custom logo 
  The application logo is automatically assigned the android.R.id.home ID, 
which the system deliveres to your activity's onOptionsItemSelected() callback when tapped. Simply respond to this ID in your callback method to perform an action such as go to your application's "home" activity. 
  To replace the icon with a logo, 
  Add breadcrumbs for navigating backward through fragments 
  Add built in tabs and a drop-down list for navigation 
  Customize the Action Bar themes and custom backgrounds 
  有关ActionBar的文章,可以参考 Action Bar使用方法 - Android活动栏 系列文章 
  三、System clipboard系统剪切板 
  Android 3.0中的剪切板进行了增强,本次可以支持除了纯文本外更多的内容,如,URL和Intent,对于剪切板类ClipboardManager仍然通过 getSystemService(CLIPBOARD_SERVICE)来实例化,新增的ClipData类用于管理具体的复制对象,可以在SDK的 android.content.ClipData.Item中找到。具体的使用Android123将在今后的文章中写道。 
  四、拖拽 
  开始拖拽内容在你的Activity中可以使用startDrag()方法在一个View中,这里View.DragShadowBuilder提供了拖拽时的阴影,对于拖拽的过程处理可以通过OnDragListener通过View的setOnDragListener()来设置,在拖拽的时候系统会自动调用onDrag()方法。 
  五、增强的appWidgets 
  Android 3.0的appWidget开始支持更丰富的控件,比如GridView, ListView, StackView, ViewFlipper和AdapterViewFlipper.而以前必须通过RemoteView显示一个文本或图片,本次全新的 RemoteViewsService增强了桌面小插件的功能。 
  六、增强的状态提示栏 
  新增的Notification API可以丰富你的状态栏,新的Notification.Builder类可以帮助你轻松实现,支持大图标提示信息通过setLargeIcon方法,通常显示一些社交类的软件,比如联系人照片,或相册缩略图,设置自定义状态栏,可以使用setTicker()方法。 
  七、内容加载器 
  新框架API提供了一个异步加载内容的泪,合并和UI组件和fragment来动态加载数据从工作者现成,使用CursorLoader子类来获取ContentResolver中的数据. 
  八、A2DP蓝牙和耳机控制API 
  Android honeycomb中没有忘记再次增强蓝牙,你可以通过初始化BluetoothProfile通过调用getProfileProxy()在处理 A2DP或耳机HEADSET设置,BluetoothProfile.ServiceListener可以获取客户端连接或断开的回调。 
  九、动画框架 
  3.0中Android再次增强动画播放类,ObjectAnimator和LayoutTransition需要大家了解一些。 
  十、扩展UI框架 
  新增以下UI控件 
  AdapterViewAnimator 
  AdapterViewFlipper 
  CalendarView 
  ListPopupWindow 
  NumberPicker 
  PopupMenu 
  SearchView 
  StackView 
  十一、图形相关 
  1. 2D图形硬件加速Hardware accelerated 2D graphics , 在androidmanifest.xml的元素中添加android:hardwareAccelerated="true" 即可。他可以优化程序运行更平滑高效,在滚动和动画方面。 
  2.设置渲染模式,比如 LAYER_TYPE_HARDWARE 硬件加速和 LAYER_TYPE_SOFTWARE 使用 setLayerType() 方法. 

 

 

  3.渲染脚本对于3D图形方面大家可以看看Renderscript类。

 

 

Android3.1

Honeycomb

(蜂巢)

2011年5月11日在Google I/O开发者大会宣布发布,版本主要更新如下:

Honeycomb 蜂巢(改进3.0BUG)

经过优化的Gmail电子邮箱;

全面支持GoogleMaps

将Android手机系统跟平板系统再次合并从而方便开发者。

任务管理器可滚动,支持USB 输入设备(键盘、鼠标等)。

支持 Google TV.可以支持XBOX 360无线手柄

widget支持的变化,能更加容易的定制屏幕widget插件。

Android3.2

Honeycomb

(蜂巢)

2011年7月13日发布,版本更新如下:

支持7英寸设备

引入了应用显示缩放功能

Android4.0

Ice Cream Sandwich

(冰激凌三明治)

2011年10月19日 在香港发布,

4.0(Ice Cream Sandwich 冰激凌三明治)版本主要更新如下:

1、蓝色主题

2、接近于桌面版的Chrome Lite浏览器,有离线阅读,同步Chrome书签,新的标签样式等。

3、截图功能

4、更强大的图片编辑功能

5、自带照片应用堪比Instagram,可以加滤镜、加相框,进行360度全景拍摄,照片还能根据地点来排序

6、Gmail加入手势、离线搜索功能,UI更强大。

8、新增流量管理工具,可具体查看每个应用产生的流量。

9、正在运行的程序可以像电脑一样的互相切换

10、人脸识别功能

11、系统优化、速度更快

12、支持虚拟按键,手机可以不再拥有任何按键

13、专为3D优化的驱动

14、平板电脑和智能手机通用

Android 4.1/4.2

Jelly Bean

(果冻豆)

继“冰激凌三明治”之后的下一版Android系统,于2012年6月28日发布。

Android4.1果冻豆:

1、添加了基于时间和位置的语音搜索:Google Now。

2、增加离线语音输入,即不需要联网也能够语音输入。

3、增强通知中心。

4、Google Play增加内容订阅购买功能。

5、新的安卓彩蛋。

Android 4.2:

1、完整的Chrome浏览器。

2、全新的手机风景模式。

3、全新的文件管理器。

4、Android Key Lime Pie精简版。

5、具有开关切换的用户界面。

6、全新的电源管理系统。

7、全新的锁屏界面。

8、全新的时钟界面。

Android5.0

“棒棒糖”(Lollipop)

 

Android 4.3的基础上已经包含在果冻豆-垂直同步定时三重缓冲, 减少触摸延迟CPU输入提振,和 硬件加速2D渲染的性能改进-增加了新的优化,让Android甚至更快。

优化的位置和传感器功能.

新媒体功能


模块化DRM框架

为了满足下一代媒体服务的需求,安卓4.3采用模块化DRM框架,使媒体应用程序开发人员更容易地集成到自己的流媒体协议,如MPEG DASH(通过HTTP的动态自适应流,ISO / IEC 23009的DRM -1)。

通过新的API和增强现有API的组合,媒体DRM框架提供了一个集成的服务许可管理和配置,访问低级别的编解码器,解码加密的媒体数据。一个新的MediaExtractor API可以让你得到的PSSH为DASH媒体的元数据。使用媒体DRM框架的应用程序管理许可证服务器,网络通讯,从内容库中的加密数据流处理。

VP8编码器

的Android 4.3引入了内置的支持VP8编码,从框架和本地的API访问。对于使用本地API的应用程序,该平台包括的OpenMAX 1.1.2扩展头,支持VP8型材和水平。支持包括VP8编码的目标比特率,控制率,帧速率,令牌分区,错误恢复,重建和环路滤波器的设置。该平台API介绍VP8编码器支持各种格式,所以你可以利用的最佳格式内容。

VP8编码是可在所有兼容的设备运行Android 4.3的软件。为了获得最高的性能,该平台还支持硬件加速的VP8编码功能的设备。

从表面的视频编码

在Android 4.3开始,你可以使用一个表面作为视频编码器的输入。例如,你现在可以直接从OpenGL ES的表面流的编码器,而非缓冲区之间复制。

媒体MUXER

应用程序可以使用新的的媒体MUXER API基本的音频和视频流结合成一个单一的输出文件。目前,应用程序可以复用的MPEG-4音频流和一个单一的MPEG-4视频流成一个单一的MPEG-4输出中的文件。新的API是在Android 4.2中引入的的媒体解复API对应。

在远程控制客户端的播放进度和洗涤

由于Android 4.0,媒体播放器以及类似的应用已经能够提供播放控制,如远程控制客户端设备锁屏,通知和远程设备通过蓝牙连接。这些应用程序可以在Android 4.3开始,现在还公开播放进度和速度,通过远程控制客户端,并接收命令跳转到一个特定的播放位置

 

对于图形性能提升,现在的硬件加速2D渲染 优化流绘图命令,把它变成一个更高效的GPU格式重新整理和合并绘制操作。对于多线程处理,渲染也可以使用跨多个CPU内核的多线程执行某些任务。

也提高了Android 4.3的形状和文本的渲染。圆和圆角矩形的形状,如正在呈现较高质量的更有效的方式。文本优化,包括增加性能,当使用多种字体或复杂的字形集(CJK),较高的呈现品质缩放文本,和更快的渲染阴影。

改进窗口缓冲区分配结果为您的应用程序在一个更快的图像缓冲区分配,减少所花费的时间,当你创建一个窗口开始渲染。

对于最高图形性能,Android 4.3的推出的OpenGL ES 3.0的支持, 并对其进行访问的应用程序通过框架和原生API。在支持的设备上,硬件加速2D渲染引擎优势的OpenGL ES 3.0,,优化纹理管理和提高梯度渲染保真度

 

企业和安全


Wi-Fi配置为WPA2-企业网络

 

应用程序现在可以配置无线网络的凭据,他们需要连接到WPA2企业接入点。开发人员可以使用新的API,配置的可扩展身份验证协议(EAP)在企业中使用的身份验证方法和封装的EAP(二期)凭证。有权访问和更改Wi-Fi的应用程序可以为各种EAP和第2阶段的验证方法配置身份验证凭据。

Android的沙箱与SELinux增强

现在Android使用SELinux的,强制访问控制(MAC)系统在Linux内核中增加UID基于应用程序沙箱。这保护的操作系统对潜在的安全漏洞。

钥匙扣增强

现在的钥匙扣API提供了一种方法,使应用程序,以确认系统全键绑定的设备的硬件信任根。这提供了一个地方创建或存储的私钥 不能被出口的设备,即使是在一个根或内核妥协的事件。

Android的密钥库提供

的Android 4.3引入了一个keystore提供商的API,允许应用程序创建独家使用密钥。使用API,应用程序可以创建或存储的私钥无法看到或使用其他应用程序,并可以添加到无需任何用户交互的keystore。

密钥库的供应商提供的钥匙扣API相同的安全性优点,提供全系统的凭据,如绑定凭据设备。不能导出私钥密钥库关闭设备。

限制Android应用程序的setuid

 

Android 4.4 ,

权限

启动快捷键

在API 19中 已经添加了INSTALL_SHORTCUTUNINSTALL_SHORTCUT权限进公布的SDK 。公开这些权限是必要的,它使得应用在设备的加载界面直接添加或删除快捷图标。

这些权限实际上并不是新功能。它们在Android 1.x 的时候就已经被定义好了,在那个时候这些权限是被定义在初始化应用里面而不是公开在SDK, 所以使用了新权限的应用可以获得权限所设定的能力,同时也能运行在老版本的安卓设备上。

外部存储

外部存储的规则改变了。回到4.1,读取外部存储权限被引入作为写外部存储权限的一个补充,而在那个时候并不是必须的。现在,这个权限在4.4中被加强了,但是以一种不同寻常的方式。从访问控制角度来看,外部存储被分成两个主要部分:1、App所在的目录;2、其他地方。

读取或者写入数据到你的App所在的位置,不需要任何权限。这基本可以适用任何通过Context里面的方法可以访问的目录,比如getExternalFilesDir()getExternalCacheDir()。如果只使用这些目录,你甚至可以删除你的应用程序中WRITE_EXTERNAL_STORAGE权限。

为了读取外部存储上其他数据,应用必须获得READ_EXTERNAL_STAROAGE
WRITE_EXTERNAL_STORAGE权限(两者都需要被授权读权限)。这些可以通过Environment获得的目录,比如Environment里面的getExternalStoragePublicDirectory()getExternalStorageDirectory()函数。

 

位图重用

 

为了更进一步帮助应用程序减少内存占用,android 4.4 建立了重用位图分配的API。简单来说位图分配使得开发者很快达到堆限制。从Android 3.0 开始,使用BitmapFactory解码数据时候就可以重用位图实例(使用 BitmapFactory.Options 中的inBitmap ),但是约束相当的大。图片必须恰好是同样的尺寸和配置,并且只允许JPEG/PNG解码。

在Android 4.4中,我们现在有Bitmap.reconfigure()去修改和使得现有的实例去适应新的尺寸和像素配置。BitmapFactory 已经被更新,之前在没有这些约束的条件下通过重配置可以重用inBitmap

但是约束还是存在的。当位图被创建,它有尺寸大小和配置,其中配置定义了分配的总字节数。对于实例来说这种初始分配大小是不能被改变的。所以当我们多次重配置位图时,每次改变都不可以让需要的字节数超过初始分配大小。

举个例子,可以安全的重配置一个ARGB_8888 200*200实例为ARGB_8888 100*100,或者300*300 RGB_565, 为所有的这些与初始分配相适应。如果试图重配置到ARGB_8888 300*300,这样会抛出异常。另外一点也很重要,当位图被连接到视图的时候,不能重配置。应该在这个元素被分离或者移出屏幕。

换句话说,如果你的应用程序可确定一个合适大小的单个实例,即使它可能比需要在任何给定时间的像素较大,仍然可以减少内存使用。单个360KB点阵图重用为300×300和200×200的图像(显然不能同时显示),是比两个单独的实例需要520KB(360KB+160KB)更好。

更智能的集合类

为了加入SparseArraySparseIntArray及其他同族行列,Android 4.4引入了一个新的内存高效的集合ArrayMapSparseArray是通过减少必要的分配从而使用原语作为键来提高性能,ArrayMap允许使用对象全键值映射,但远远比java.util.HashMap中容量大小更具侵略性,对象分配随着命中率和容量增加而减少。ArrayMap大小随着个体的删除减少从而保持低内存,一些人们不能从java.util中的期望。除了作为android.util在API级别19的一部分;ArrayMap也在支持库的v19,所以你可以尽情使用,即使你不一定针对4.4。

Immersive模式

Android 4.4引入了一组新的布局标志可用于标记系统UI的可见性。从4.0开始,应用有隐藏状态栏和软导航按钮功能,并暂时使用View.SYSTEM_UI_FLAG_FULLSCREENView.SYSTEM_UI_FLAG_HIDE_NAVIGATION标志为“精益回”体验,视频内容会占用整个显示屏幕。然而,这种模式不是交互式的,而只要用户点击屏幕上任意位置UI控件立刻返回(你的应用程序没有收到的一个事件)。

为了增强这一点,在Android的4.4添加了View.SYSTEM_UI_FLAG_IMMERSIVEView.SYSTEM_UI_FLAG_IMMERSIVE_STICKY。在与所提及的场景中使用这些标志,可以在同一个系统中隐藏用户界面,当与用户的全屏应用程序内容进行交互时候还是保持这种方式。对于让用户无需导航控件,谷歌仍持谨慎态度。但是一个系统级的边缘轻扫手势允许他们在任何时候返回,用户第一次体验这种模式下,系统将叠加出现,迫使确认用户了解如何让UI控件回来。

更灵活的方法

与系统管理的计时器相关的周期性行为在默认情况下会变得更灵活,比如计时器中的AlarmManagerSyncAdapter。这样做的目的是,允许系统尽可能批量处理事件并且减少设备上的唤醒事件以节约电量。

之前的精确方法AlarmManger.set()AlarmManger.setRepeating(),现在的行为更接近于AlarmManger.setInexactRepeating()并且从属于事件批处理。

从4.4开始,没有任何方法可以创建一个重复的精确闹钟。如果你需要闹钟精确并且可重复,必须调用新的setExact()方法并且在每个触发事件中设置新的闹钟。

WebView

在4.4中,WebView也有一些新的改变,现在是完全建立在谷歌的Chromium源代码上。带来的性能改进和来自HTML5和CSS3新功能,但它也意味着有一些行为上的差异需要开发者适应。

capturePicture()被正式弃用,这是为了支持一个获得WebView内容快照更标准的方法。比如手动触发的onDraw()可以绘制成位图支持Canvas。

此外,evaluateJavascript()提供了执行JavaScript的新方法,这新方法支持回调。然而具有同样功能的loadURL()方法并没有不被鼓励使用或在文档中被弃用。

谷歌提供了一个很好的文档,包含所有可能会遇到迁移到新的WebView的问题细节。

App Ops回归

在4.3初现的App Ops功能现在还没完全准备好。但是有一些已经还是在4.4 SDK中暴露了出来。

现在已经有AppOpsManager, 这是一个系统服务用于执行应用程序可以沿着它当前的静态权限执行的操作。虽然还不清楚这个API最终将发挥什么作用,但是我们可以看到AppOpsManger所负责的一些操作类型。每个操作由一个OPSTR_常量定义,并且在Android4.4中,他们都被用作处理用户位置。

不管我们喜欢还是不喜欢,动态权限执行的模型将会来临。在随后SDK的发展需要密切关注这些元素。

新运行时

自从诞生以来,Android一直依赖虚拟机运行时,即是我们称之为Dalvik,它被用来执行许多应用程序被编译后生成的Java字节码。Dalvik是从自下而上构建的,提供给安卓Java运行时,使得安卓适合于操作系统需要的进程隔离和安全模式。

然而在Android的4.4中,我们可以看到Dalvik的生命周期是有限的,并且将很快由一个完全新的实现被称为Android的运行时(ART)的替换。它还鲜为人知,超过我们收到的介绍范畴。主要的区别似乎是ART将在安装时把Dex字节码编译成本地指令,而不是Dalvik通过使用实时(JIT)编译模型在运行时处理这些。与一些报道相反,似乎没有被任何证据表明这种变化是在全是根据有关Java语言的许可或所有权问题。

ART编译器似乎支持两种模式:快速模式和便携模式。快速模式是类似于JIT(在运行时编译的代码),而便携模式似乎使用LLVM关联预编译。这LLVM的连接可能最终解释的几个版本以前的AOSP的GDK项目神秘现象。

在Nexus 5的设备上,ART被激活从而可以被用来代替Dalvik,这样就允许开发者来测试应用程序和提供有关可能突然出现的新的运行时环境中的任何问题的反馈。所有的开发人员都至少尝试开发启用了ART的应用程序并且报告任何有趣的发现给Google。

对于 Android 5.0,默认运行时现在是 ART。Android 5.0,默认运行时现在是 ART。
主要包括下面的一些新功能:
预先 (AOT) 编译
经过改进的垃圾回收 (GC)
经过改进的调试支持
大多数 Android 应用应该不用做出任何更改即可直接在 ART 下运行。不过,Dalvik 上运行的部分技术在 ART 上无法运行。要了解最重要的问题,请参阅在 Android 运行时  (ART) 上验证应用行为。请特别注意以下情况:
您的应用使用 Java 原生接口 (JNI) 运行 C/C++ 代码。
您使用的开发工具可生成非标准代码(例如某些混淆代码)。
您使用的技术与垃圾回收压缩不兼容。(虽然 ART 当前没有实施垃圾回收压缩,但在 Android 开放源代码项目中,垃圾回收压缩正处于开发阶段)。
如果您的应用实施通知…
请确保您的通知能够反映出 Android 5.0 的这些变化。要详细了解如何设计适用于 Android 5.0 及更高版本的通知,请参阅通知设计指南。
Material Design 设计样式
通知是在白色(或颜色非常浅的)背景上绘制的深色文本,以便与新的 Material Design 设计小部件协调一致。请确保所有通知在新的配色方案下都能够正常显示。如果通知无法正常显示,请予以修复:
使用 setColor() 在图标图片后面的圆圈中设置一种强调色彩。
更新或移除有颜色的资源。系统会忽略操作图标和主通知图标中的所有非 Alpha 通道。您应当假定这些图标仅包含 Alpha 通道。系统会用白色来绘制通知图标,而用深灰色来绘制操作图标。
声音和振动
如果您当前在使用 Ringtone、MediaPlayer 或 Vibrator 类为通知添加声音和振动,请移除该代码,这样系统才能以优先模式正常呈现通知。若要添加声音和振动,请改用 Notification.Builder 方法。
将设备设置为 RINGER_MODE_SILENT 会导致它进入新的优先模式。如果将设备设置为 RINGER_MODE_NORMAL 或RINGER_MODE_VIBRATE,则会使其退出优先模式。
以前,Android 将 STREAM_MUSIC 用作主音量流,以此来控制平板电脑设备的音量。在  Android 5.0 中,手机和平板电脑设备的主音量流现已统一,均由 STREAM_RING 或 STREAM_NOTIFICATION 控制。
通知在锁定屏幕上的公开程度
在 Android 5.0 中,通知现在默认显示在用户的锁定屏幕上。用户可以选择不公开敏感信息,这样的话系统会自动修改通知显示文本。要自定义这种经过修改的通知,请使用 setPublicVersion()。
如果通知不包含个人信息,或者您希望在通知中显示媒体播放控件,请调用 setVisibility() 方法,并将通知的公开程度的级别设置为 VISIBILITY_PUBLIC。垃圾回收 (GC)
经过改进的调试支持
大多数 Android 应用应该不用做出任何更改即可直接在 ART 下运行。不过,Dalvik 上运行的部分技术在 ART 上无法运行。要了解最重要的问题,请参阅在 Android 运行时  (ART) 上验证应用行为。请特别注意以下情况:
您的应用使用 Java 原生接口 (JNI) 运行 C/C++ 代码。
您使用的开发工具可生成非标准代码(例如某些混淆代码)。
您使用的技术与垃圾回收压缩不兼容。(虽然 ART 当前没有实施垃圾回收压缩,但在 Android 开放源代码项目中,垃圾回收压缩正处于开发阶段)。
如果您的应用实施通知…
请确保您的通知能够反映出 Android 5.0 的这些变化。要详细了解如何设计适用于 Android 5.0 及更高版本的通知,请参阅通知设计指南。
Material Design 设计样式
通知是在白色(或颜色非常浅的)背景上绘制的深色文本,以便与新的 Material Design 设计小部件协调一致。请确保所有通知在新的配色方案下都能够正常显示。如果通知无法正常显示,请予以修复:
使用 setColor() 在图标图片后面的圆圈中设置一种强调色彩。
更新或移除有颜色的资源。系统会忽略操作图标和主通知图标中的所有非 Alpha 通道。您应当假定这些图标仅包含 Alpha 通道。系统会用白色来绘制通知图标,而用深灰色来绘制操作图标。
声音和振动
如果您当前在使用 Ringtone、MediaPlayer 或 Vibrator 类为通知添加声音和振动,请移除该代码,这样系统才能以优先模式正常呈现通知。若要添加声音和振动,请改用 Notification.Builder 方法。
将设备设置为 RINGER_MODE_SILENT 会导致它进入新的优先模式。如果将设备设置为 RINGER_MODE_NORMAL 或RINGER_MODE_VIBRATE,则会使其退出优先模式。
以前,Android 将 STREAM_MUSIC 用作主音量流,以此来控制平板电脑设备的音量。在  Android 5.0 中,手机和平板电脑设备的主音量流现已统一,均由 STREAM_RING 或 STREAM_NOTIFICATION 控制。
通知在锁定屏幕上的公开程度
在 Android 5.0 中,通知现在默认显示在用户的锁定屏幕上。用户可以选择不公开敏感信息,这样的话系统会自动修改通知显示文本。要自定义这种经过修改的通知,请使用 setPublicVersion()。
如果通知不包含个人信息,或者您希望在通知中显示媒体播放控件,请调用 setVisibility() 方法,并将通知的公开程度的级别设置为 VISIBILITY_PUBLIC。

安卓6.0的新特性,例如指纹检测与识别,节电模式等。与此同时,Android 6.0也加入了更多的权限控制,确保用户隐私数据的安全。

 

如果你现在正在使用Android Studio,那么直接在SDK管理器中下载即可,之后你就可以将正在进行的开发项目从“compileSdkVersion”升级到API 23,从而测试应用在安卓6.0下的表现。
  最后,谷歌也宣布从今天起,Google Play应用商店将正式接受基于API 23所开发的应用上架,届时,安卓6.0用户们也将真正感受到新系统的魅力。

 

 

为了应用APP有更好的兼容性,咱们可以利用高版本的SDK开发应用,并在程序运行时(Runtime)对应用所运行的平台判断,旧平台使用旧的API,而新平台可使用新的API,这样可以较好的提高软件兼容性。

 

此标签包含如下3个属性:

android:minSdkVersion —— 此属性决定你的应用能兼容的最低的系统版本,一盘情况是必须设置此属性。

android:targetSdkVersion —— 此属性说明你当前的应用是针对某一个系统版本开发设计的,也就是说在这个系统版本上运行是没有任何问题的。对于手机或其他终端设备会根据此属性值,决定是否显示一些特性和效果。当然对于开发者最直接的影响就是,你所用到的API都是基于此版本上的,高于此targetSdkVersion的API在使用的时候会有警告或者错误提示。

android:maxSdkVersion ——  此属性是决定你的应用能支持的版本最高是多少,超过此版本的系统将不能使用你的应用。

Android provides a unique code for each platform version in the Build constants class. Use these codes within your app to build conditions that ensure the code thatdepends on higher API levels is executed only when those APIs are available on the system.

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

         ActionBar actionBar = getActionBar();
         actionBar.setDisplayHomeAsUpEnabled(true);
    }
} void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

         ActionBar actionBar = getActionBar();
         actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

 

Note: When parsing XML resources, Android ignores XML attributes that aren’t supported by the current device. So you can safely use XML attributes thatare only supported by newer versions without worrying about older versions breaking when theyencounter that code. For example, if you set the targetSdkVersion="11", your app includes the ActionBar by defaulton Android 3.0 and higher. To then add menu items to the action bar, you need to set android:showAsAction="ifRoom" in your menu resource XML. It's safe to do this in a cross-version XML file, because the older versions of Android simply ignore the showAsAction attribute (that is, you do not need a separate version in res/menu-v11/).

 

在使用高于minSdkVersion API level的方法需要:

  1. @TargeApi($API_LEVEL) 使可以编译通过, 不建议使用@SuppressLint("NewApi");
  2. 运行时判断API level; 仅在足够高,有此方法的API level系统中,调用此方法;
  3. 保证功能完整性,保证低API版本通过其他方法提供功能实现。

问题背景

鉴于ANDROID SDK 更新较快,很多新的特性和API在低版本中的可能没有。所以开发过程中尽量要保持对新功能接口的兼容。

一般开发过程中APP都会有一个最低版本的配置,例如如果要兼容到android 2.2系统,则可以设置minSdkVersion=8,这就表明能向下兼容到android 2.2版本,即APP能在android2.2版本上的手机也能正常运行,即使可能某些新特性的功能支持失效,但至少保证不会出现崩溃的问题,而避免此问题的方式就要求开发者在代码中做好兼容和适配。

兼容原则

一般选择APP的最低支持版本原则是尽量向下保持兼容,但也不是说越向下越好,主要的考虑因素有以下几点:

1.      各个低版本手机的市场占有率,比如2013年android 2.2的手机还占用一定的市场份额,但到现在为止基本上该份额可以忽略不计了(目前android 最高的版本已达到android 5.1了)

2.      APP的针对用户群体,比如是高端的用户群体,屌丝用户群体,还是中低端用户群体,根据不同的用户群体可以综合出来决定对最低版本的支持。

基于SDK高低开发优缺点

基于低版本的SDK开发

优点就是你可以支持的手机用户会更多,基本上各个版本的用户都可以用你的应用。

但缺点也是非常明显,特别是对开发者来说,需要做好每一个新特性功能的适配和开发,随着版本越来越高,这对开发者后期的维护会越来越困难,越来越多。

基于高版本的SDK开发

如果你用最新的版本的SDK, 优点就是你可以使用最新的功能的api,而且编译也不会出现任何问题。

但是缺点就是你需要时刻对你调用的api保持向下兼容性,因为很有可能你现有调用的某个api在低版本中根本就不存在。这时候你需要考虑低版本系统的用户的运行问题了。

实战分析

如某个工程配置中的最低版本是android2.2,也就是正常来说开发过程中需要基于android SDK为8来做工程开发。但如果你没有基于adroid  2.2 SDK版本开发,而是支持了一个更高的版本,比如android 4.0 SDK开发,那么很多高版本的功能特性(2.3—4.0)在4.0以下的手机中运行就可以存在问题,一般的结果就是直接crash。

下面是基于android2.2 SDK 开发环境编译的最新的工程,其中就有一些直接编译运行不过的错误。下面可以看几个实例:

SampleActivity.java有一处这样写的:

      if (savedInstanceState !=null) {

         mOrderId =savedInstanceState.getString(EXTRA_ORDER_ID);

         mPaySuccess =savedInstanceState.getString(EXTRA_PAY_SUCCESS,"");

      }

代码中使用Bundle对象在新版本中才提供的方法而没有加兼容处理,如下官方文档中解释,该方法在android 3.1后才有。

public String getString (String key, String defaultValue) Added in API level 12

如果在低于android 3.0下机器运行和编译该代码,如果不做任何处理,会直接编译通不过。

 

解决方法:

1.       用android提供的注解 @TargetApi(11)+ 版本号控制做兼容

如果是基于高版本的SDK开发,则新的api肯定会有该方法,如果想让编译的版本在低版本中也能运行,则需要考虑到版本兼容的问题,可以用如下的方式:

/***

     * 该api版本兼容获取指定参数

     *

     * @param savedInstanceState

     * @return

     */

   @TargetApi(12)

   privateString getPaySucess(Bundle savedInstanceState) {

        if (Build.VERSION.SDK_INT >= 12) {

            mPaySuccess = savedInstanceState.getString(EXTRA_PAY_SUCCESS,"");

        } else {

            mPaySuccess = savedInstanceState.getString(EXTRA_PAY_SUCCESS);

            if (mPaySuccess ==null){

                mPaySuccess = "";

            }

        }

        returnmPaySuccess;

}

 

2.       用反射的方式调用高版本中的新功能接口进行调用。

如果是基于低版本SDK开发,那么新版本中的新接口肯定会编译不过,这时候可以考虑反射的方式先去查找是否存在这个方法,如果有就代表用户的手机支持该调用方法,如果没有则采用低版本的处理方式。

 

   /***

     * 通过放射的方式来获取Bundle中的

     * getString(String key,String value)方法

     *

     * @return

     */

   privateStringgetPaySucessInvoke(Bundle savedInstanceState) {

 

        try {

            Class<?> c = Class.forName("android.os.bundle");

            Method mGetString2Params =c.getDeclaredMethod("getString", String.class,String.class);

 

            if (mGetString2Params !=null) {

                mPaySuccess = (String)mGetString2Params.invoke(null,EXTRA_PAY_SUCCESS,"");

            } else {

                mPaySuccess = savedInstanceState.getString(EXTRA_PAY_SUCCESS);

                if (mPaySuccess ==null){

                    mPaySuccess ="";

                }

            }

        } catch (Exception e) {

            // TODO: handle exception

        }

 

        returnmPaySuccess;

    }

 

3.       分离代码,分别在不同的SDK上编译运行,最后ClassLoader动态加载高版本中的相关类接口

此方法应用场景如2,可以将高版本的api接口封装后在高版本的SDK中编译运行jar包,供旧版本的工程中动态加载。

SDK相关对应表

Platform Version

API Level

VERSION_CODE

Notes

Android 5.1

22

LOLLIPOP_MR1

Platform Highlights

Android 5.0

21

LOLLIPOP

Android 4.4W

20

KITKAT_WATCH

KitKat for Wearables Only

Android 4.4

19

KITKAT

Platform Highlights

Android 4.3

18

JELLY_BEAN_MR2

Platform Highlights

Android 4.2, 4.2.2

17

JELLY_BEAN_MR1

Platform Highlights

Android 4.1, 4.1.1

16

JELLY_BEAN

Platform Highlights

Android 4.0.3, 4.0.4

15

ICE_CREAM_SANDWICH_MR1

Platform Highlights

Android 4.0, 4.0.1, 4.0.2

14

ICE_CREAM_SANDWICH

Android 3.2

13

HONEYCOMB_MR2

Android 3.1.x

12

HONEYCOMB_MR1

Platform Highlights

Android 3.0.x

11

HONEYCOMB

Platform Highlights

Android 2.3.4
Android 2.3.3

10

GINGERBREAD_MR1

Platform Highlights

Android 2.3.2
Android 2.3.1
Android 2.3

9

GINGERBREAD

Android 2.2.x

8

FROYO

Platform Highlights

Android 2.1.x

7

ECLAIR_MR1

Platform Highlights

Android 2.0.1

6

ECLAIR_0_1

Android 2.0

5

ECLAIR

Android 1.6

4

DONUT

Platform Highlights

Android 1.5

3

CUPCAKE

Platform Highlights

Android 1.1

2

BASE_1_1

Android 1.0

1

BASE

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ShareUs/article/details/50835931

智能推荐

互联网公司数据安全保护新探索_互联网数据安全事件-程序员宅基地

文章浏览阅读6.9k次。背景近年来,数据安全形势越发严峻,各种数据安全事件层出不穷。在当前形势下,互联网公司也基本达成了一个共识:虽然无法完全阻止攻击,但底线是敏感数据不能泄漏。也即是说,服务器可以被挂马,但敏感数据不能被拖走。服务器对于互联网公司来说,是可以接受的损失,但敏感数据泄漏,则会对公司产生重大声誉、经济影响。在互联网公司的数据安全领域,无论是传统理论提出的数据安全生命周期,还是安全厂商提供的解决方案,..._互联网数据安全事件

2021年 第七届 互联网+大赛 报名详细流程 全国大学生互联网+大赛全国大学生创业网 (保姆级指南:如何同意对方邀请)_全国大学生互联网大赛官网入口-程序员宅基地

文章浏览阅读8w次,点赞27次,收藏78次。官网网址:https://cy.ncss.cn/第一步:点击登录入口第二步:登录大创网1、凡是参加过高考的学生都有学信网账号:直接输入账号即可登录2、忘记账号密码的先找回账号密码3、忘记用户名的找回用户名第三步:登录进入后完善个人信息1、点击设置完善个人信息第四步:创建项目1、点击我的项目,然后,点击创建项目点击继续创建2、填写项目信息:根据自己项目实际内容填写(如果是小白可以参考我写的)设置头像项目名称所在地所属领域项目概述根据实际内容填写(如果不知道_全国大学生互联网大赛官网入口

基于树莓派搭建自动驾驶小车;Donkey Car组装硬件DIY_donkeycar 项目-程序员宅基地

文章浏览阅读6.4k次,点赞8次,收藏50次。还是想朝着人工智能方向靠一靠,之前研究图像有关的分类、识别,还是觉得太枯燥了。后来结合自己接触较多的Unity引擎,发现有自动驾驶用Unreal或者Unity之类的游戏引擎进行虚拟训练。接着发现了微软的AirSim,稍微研究了下,记录了一篇博客。然后就想虚拟训练虽好,但是既然是自动驾驶,自己能DIY一个小车那就有趣多了,这样就发现了Donkey Car这个项目。它就是基于树莓派,用Tensorfl..._donkeycar 项目

对生成对抗网络GANs原理、实现过程、应用场景的理解(附代码),另附:深度学习大神文章列表_caffe gan 实现-程序员宅基地

文章浏览阅读2.7w次,点赞12次,收藏162次。对抗网络是14年Goodfellow Ian在论文Generative Adversarial Nets中提出来的。 记录下自己的理解,日后忘记了也能用于复习。 本文地址: http://blog.csdn.net/sxf1061926959/article/details/54630462生成模型和判别模型理解对抗网络,首先要了解生成模型和判别模型。判别模型比较好理解_caffe gan 实现

java与.net平台之间进行RSA加密验证-程序员宅基地

文章浏览阅读212次。RSA加密算法虽然不分平台,标准都是一样的,但是各个平台的实现方式都不尽相同,下面来我来说说java与.net平台之间该如何进行RSA加密验证,即java端加密-》.net端验证和.net端加密-》java端验证。我对RSA算法也只是停留在应用的层面,所以我就以应用的角度来说说这个过程。首先,我们来看一下java端的私钥和公钥的样子:私钥:MIICeQIBADANBgkqhkiG9w0BAQE..._java+netcore ras互相验证

opencv 打开TX2板载摄像头_opencv打开tx2-程序员宅基地

文章浏览阅读787次。实际上使用opencv打开摄像头的操作都是一样的,但是由于TX2的板载摄像头是MIPI的CSI-2接口,它和USB有些不一样,需要增加一些配置。先附上个人的代码/** * 获取 TX2 板载摄像头的打开参数 * @param width 采集视频的宽度 * @param height 采集视频的高度 * @param fps 采集视频 fps * @return 板载摄像头的打开参数字符串 */static std::string getTegraPipeline(int width_opencv打开tx2

随便推点

开源 多进程 框架 c++_有哪些值得推荐的c/c++开源框架与库-程序员宅基地

文章浏览阅读585次。c/c++的项目也是各种各样的都有,微电子,物联网,桌面客户端,游戏,服务器开发等等。开源框架种类繁多,有哪些值得推荐的c/c++开源框架与库框架Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库。Boost : 大量通用C++库的集合。BDE : 来自于彭博资讯实验室的开..._c/c++ 开源线程池库 比较好的

正则表达式-程序员宅基地

文章浏览阅读728次,点赞9次,收藏7次。由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 \\t )匹配相应的特殊字符。下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。多数字母和数字前加一个反斜杠时会拥有不同的含义。模式字符串使用特殊的语法来表示一个正则表达式。反斜杠本身需要使用反斜杠转义。

计算机无法进入bios按,BIOS无法进入实测解决教程-程序员宅基地

文章浏览阅读3.5w次,点赞3次,收藏6次。BIOS是电脑设置启动和进入系统前所有的设置的地方,一般我们装系统就会用到它,会去把第一启动项设置为U盘等,而有时候不知道什么原因进不了bios,这时候应该怎么解决呢,下面就教大家实际解决方案。首选进不了bios,我们要确定是不是快捷键按错了,一般台式机都是del键,但也有例外,下面就给个表格汇总一下不同主板的不同快捷键。BIOS型号进入CMOS SETUP的按键屏幕是否提示AMIDel键或Esc..._电脑进不去bios

Java中时间戳转换日期_java时间戳转日期-程序员宅基地

文章浏览阅读1.4w次,点赞5次,收藏12次。String value="79898768";//时间戳String date=stampToDate(value);//时间戳转换日期//时间戳转换日期方法public static String stampToDate(String value) { String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long lt = new Long(valu._java时间戳转日期

ios-微信自动抢红包插件-程序员宅基地

文章浏览阅读976次。2019独角兽企业重金招聘Python工程师标准>>> ..._csdn ios微信抢红包

Flutter列表和表格的综合运用_flutter多行合并表格布局-程序员宅基地

文章浏览阅读807次,点赞2次,收藏2次。最近Flutter项目中遇到一个比较有意思的页面,页面稍显复杂,考验的是列表和表格的综合运用,感觉有必要总结一下。自己粗糙绘制了一下原型,大致要求如下:页面可上下滑动点击Tab标题时,Tab栏下方区域页面进行切换,且Tab栏滑动到顶部也就是紧挨着标题栏下方时,悬浮在顶部,用户再次向上滑动时,Tab下方页面进行上滑,而Tab栏固定不变Tab栏下方页面为表格数据,有多少..._flutter多行合并表格布局