搜尋

首頁  >  問答  >  主體

Android版本更新添加了新的api,我们使用这个api在低版本中的手机中会不会报错?如报错如何使用新的api

Android N中添加了新的api 如何使用这个新的API

高洛峰高洛峰2772 天前483

全部回覆(6)我來回復

  • 高洛峰

    高洛峰2017-04-17 17:31:54

    會報錯,運行在低版的api上面會報找不到方法或找不到類別的錯。

    解決方法有兩個,如下:

    第一種就是 @Celery 說的判斷當前api版本然後根據版本執行不同的方法。但很多時候,發現替代方法並不好寫,或是你的app必須只能用新的api,這時候你需要第二種方法。

    第二種是聲明api最低版本。在build.gradle裡聲明minSdkVersion num. 這種你需要權衡一下,可以考慮不支援低版的手機。這樣低版手機在安裝你的apk的時候就直接拒絕了。

    回覆
    0
  • 阿神

    阿神2017-04-17 17:31:54

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        doSomethingWithOldApi();
    } else {
        doSomethingWithNewApi();
    }

    or

    try {
        doSomethingWithNewApi();
    } catch (NoSuchMethodException e) {
        doSomethingWithOldApi();
    }

    我一般這樣寫。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 17:31:54

    一般google出新的api都會有對應的相容包出來用於那些低版本的手機。如果沒有相容套件就需要在程式碼中對SDK的版本進行判斷,在選擇性執行程式碼。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 17:31:54

    一般如果有support包的話不會報錯,假如沒有,需要進行版本判斷然後再寫程式碼

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:31:54

    新功能與相容性是一個難以權衡的問題,Android 對 Ui 的 Api 以及非 Ui 的 Api 採取了不同的處理方式。

    對於UI 的Api,Google 為了讓不同版本的Android 盡可能的獲得一致的Ui 體驗,提供了Support Library 來兼容不同的Android 版本,比如說常見的support-v4,cardview-v7 等等,即使有些Ui 元件沒有被加入到官方的相容包裡,依舊有可能在github 中找到開源的專案。

    而對於非Ui 的Api,則往往很難找到相容Library,對於這種Api 常用的方式是根據不同的Android 版本做判斷,如果要用的新api 屬於一個方法的核心的話,可以考慮為此方法提供@TargetApi 形式的註解,例如;

        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        private void useNewApi() {
            // do samething
        }

    假如新的 Api 可有可無或有舊的替代方式的話,可以考慮利用 Build.VERSION.SDK_INT 做一下判斷,例如:

           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                setBackground(newDrawable());
            } else {
                setBackgroundDrawable(newDrawable());
            }

    回覆
    0
  • 迷茫

    迷茫2017-04-17 17:31:54

    說的都是淚啊!妹的,有個同事用了新的api,在老系統中,直接crash,導致線上crash率猛增,我的年終獎啊

    回覆
    0
  • 取消回覆