1. 程式人生 > >Android應用在不同版本間相容性處理

Android應用在不同版本間相容性處理

       在Android系統中向下相容性比較差,但是一個應用APP經過處理還是可以在各個版本間執行的。向下相容性不好,不同版本的系統其API版本也不同,自然有些介面也不同,新的平臺不能使用舊的API,舊的平臺也使用不了新的API。

        為了應用APP有更好的相容性,咱們可以利用高版本的SDK開發應用,並在程式執行時(Runtime)對應用所執行的平臺判斷,舊平臺使用舊的API,而新平臺可使用新的API,這樣可以較好的提高軟體相容性。

        那麼,如何在軟體執行時做出這樣的判斷呢?答案下邊揭曉:

  在Android SDK開發文件中有段話這樣的話:

Check System Version at Runtime(在軟體執行時檢查判斷系統版本)

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.

privatevoid 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 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/).

           從上面可以知道Android為我們提供了一個常量類Build,其中最主要是Build中的兩個內部類VERSION和VERSION_CODES,

VERSION表示當前系統版本的資訊,其中就包括SDK的版本資訊,用於成員SDK_INT表示;

對於VERSION_CODES在SDK開發文件中時這樣描述的,Enumeration of the currently known SDK version codes. These are the values that can be found in SDK. Version numbers increment monotonically with each official platform release.

其成員就是一些從最早版本開始到當前執行的系統的一些版本號常量。

  在我們自己開發應用過程中,常常使用如下的程式碼形式判斷執行新API還是舊的API:

if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.HONEYCOMB)
    {
            // 包含新API的程式碼塊
    }
    else
    {
            // 包含舊的API的程式碼塊
    }


     OK,大家都知道原理了吧! 需要例項的百度蠻多的,這裡就不提供了。

相關推薦

Android應用不同版本相容性處理

       在Android系統中向下相容性比較差,但是一個應用APP經過處理還是可以在各個版本間執行的。向下相容性不好,不同版本的系統其API版本也不同,自然有些介面也不同,新的平臺不能使用舊的A

android 相容不同版本懸浮框許可權解決

1,4.4以下使用TYPE_SYSTEM_ALERT,需要許可權android.permission.SYSTEM_ALERT_WINDOW; 2,4.4到7.0,使用TYPE_TOAST,不需要額外許可權;(既然TYPE_TOAST不需要

發現同一依賴程式集的不同版本存在無法解決的衝突

原文地址:https://www.cnblogs.com/1996V/p/9037603.html#net1 節選 為什麼Newtonsoft.Json版本不一致? 是,專案間的生成是有序生成的,它取決於專案間的依賴順序。 比如Web專案引用BLL專案,

Spring總結及不同版本的區別

一 Spring中有一個IOC物件容器(Spring內部的一個HashMap容器),用於盛放物件的! Spring中全部生成的物件都放在IOC物件容器中的!是以name或id的值做鍵存在容器中的! 給物件注入值的方式:---以下的4種全部都是交給Spring框架去注入的! 1.       用不帶

在Ubuntu14.04的64位下安裝opencv2.4.13和opencv3.1.0及不同版本切換的操作

最近幾天,一直在摸索Ubuntu14.04下安裝opencv2和opencv3及不同版本間切換的方法,嘗試了很多網上介紹的方法,也不是他們介紹的不對,只是介紹的安裝方法都很單一,無法完全滿足自己的當前需求,所以搜尋很多相關的部落格文章,結合自己的安裝經驗,覺得有

Android不同Activity所託管的Fragment通訊的兩種方法

Android開發中經常會使用Fragment開發,Fragment和其他Activity的通訊就會經常使用到,一般來說會有兩種通訊方法,下面詳細介紹。 方法一 眾所周知,Activity之間的通訊使用Intent,而第一種方法就是直接呼叫Fragmen

eclipse不同版本區別

前言:新手上路。此文轉載自:http://salever.iteye.com/blog/1153357 開啟Eclipse的download頁面,一大排的Eclipse可供下載,http://www.eclipse.org/downloads/,很多新接觸Eclipse的幾

Gradle配置及同一應用不同版本配置不同資原始檔,不同簽名,包名進行打包

公司的專案,一個專案也就是同一套程式碼要針對多個客戶打出多個版本的apk,不同版本的apk中一些程式碼是不同的,比如伺服器的地址,app的名字,圖片資源以及簽名檔案等都是不同的。剛開始的時候,把這些相同的程式碼,資原始檔提取出來,打包的時候進行替換就可以了,隨著客戶越來越多

Android 應用啟動閃白一下處理方法

應用程式啟動的時候,感覺會突然閃白一下,處理方式如下 1.直接刪除android:theme="@style/AppTheme" <application android:name="com.jchdcp.JchdcpApplication"

單點登錄跳轉失敗(原因是 主票據申請子票據失敗) asp.net 同站點下不同應用不同版本Framework問題

大牛 www 後臺 images 不同 遇到 加密 網上 兩種 單點登錄跳轉失敗(原因是 主票據申請子票據失敗) asp.net 同站點下不同應用間不同版本Framework問題 今天遇到一個問題,在主站點現在配置的應用和主站點登錄會話狀態不能共享,進入子站點應用時,還

Android P版本 新功能介紹和相容性處理(一)

Android P版本已經到來,首篇我們當然要先看下Android P版本的搭建和模擬器的使用 1: Android studio的版本請選用 Android Studio 3.1 或者 Android Studio 3.2 Canary; Androi

android studio升級3.0版本,問題處理

方法 targe onu mat code south ng- comm ive android studio升級3.0版本,問題處理 問題1:編譯版本與構建版本修改 compileSdkVersion : 26, buildToolsVersion : “26.0.

Android Studio 版本區別

android m 配置 ati 命令 你會 pro 通過 徹底刪除 pre    2.3.2 -》3.0.1 Gradle版本為4.1 com.android.tools.build:gradle:3.0.x Android Monitor 被換成了 And

Android-userdebug/user版本使用不同的核心配置

1. 先配置好兩個核心配置檔案,放在kernel/msm-4.9/arch/arm64/configs/:     sdm710_defconfig   sdm710_-perf_defconfig    (分別用於userdebu

android應用使用sqlite資料庫時,版本更新的相關問題。

首先要明確,資料庫的版本跟應用的版本不是一回事,資料庫的版本是自己在獲取資料庫時設定的。具體來說是在構造方法 public SQLiteOpenHelper(@Nullable Context context, @Nullable String name,

基於不同版本Hibernate的OracleXmlType處理

需求 需要從Oracle資料庫中查出xmltype型別的資料,並且與pojo類中的org.w3c.dom.Document型別的欄位對應。由於Hibernate4(4.3.11.Final)和Hibernate5(5.3.7.Final)對於org.hibernate.usertype.

Android手機應用開發------基礎的事件處理

實驗目的: 瞭解Android程式設計基礎。 熟悉Button、RadioButton、EditText等基本控制元件,能夠處理這些控制元件的基本事件。 學會彈出對話方塊,並定製對話方塊中的內容,能對確定和取消按鈕的事件做處理。 1.首先要知道在哪裡新

Android進階之AS如何處理不同引用庫(module)裡jar的重複引起問題

1.問題 Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. 2.原因 根據stackoverflow上面的回答,這個錯誤原因是因為包引用重複

Android Studio使用的那些事(三)AS不同版本安裝注意點

繼上篇遷移整理了 Android Studio使用的那些事(二)AS常見錯誤 這篇將整理記錄Android Studio我在使用更新不同版本時候所遇到要注意的點。Android Studio當時的1.2、1.5 我就沒有記錄了,因為當時AS還不夠成熟問題還很多,雖然下載安裝了

Android SDK各個版本API的特性及相容性(Dalvik/ART)

Android系統版本與API等級對應關係表- http://www.bubuko.com/infodetail-1928589.htmlandroid關於使用哪個版本開發的討論-- http://blog.csdn.net/pkxiuluo01/article/detail