應(yīng)用彈窗“此應(yīng)用專為舊版Android打造购裙,因此可能無法正常運行...”的原因

Android P上懂版,有的應(yīng)用打開時,會彈出對話框缓窜,內(nèi)容:“此應(yīng)用專為舊版Android打造定续,因此可能無法正常運行谍咆。請嘗試檢查更新或與開發(fā)者聯(lián)系”。用戶會感到困惑私股,真正的原因是什么摹察?

舉例,如下圖某應(yīng)用倡鲸,版本:6.072.001供嚎,
下面通過Android P源碼,分析原因:

應(yīng)用啟動峭状,startActivity時克滴,流程會執(zhí)行到realStartActivityLocked方法,代碼位于ActivityStackSupervisor.java优床,可參考我之前一篇文章:startActivity啟動流程的源碼學(xué)習(xí)劝赔。

realStartActivityLocked方法中,會調(diào)用AppWarnings.java的onStartActivity方法胆敞,如下:

final boolean realStartActivityLocked(ActivityRecord r, ProcessRecord app, boolean andResume, boolean checkConfig) throws RemoteException {
    try {
        // ...
        mService.getAppWarningsLocked().onStartActivity(r);
        // ...
    } catch (RemoteException e) {
        // ...
    }
}

onStartActivity方法實現(xiàn):

/**
   * Called when an activity is being started.
   *
   * @param r record for the activity being started
   */
public void onStartActivity(ActivityRecord r) {
    showUnsupportedCompileSdkDialogIfNeeded(r);
    showUnsupportedDisplaySizeDialogIfNeeded(r);
    showDeprecatedTargetDialogIfNeeded(r);
}

其中第三個函數(shù)showDeprecatedTargetDialogIfNeeded重點分析:

/**
   * Shows the "deprecated target sdk" warning, if necessary.
   *
   * @param r activity record for which the warning may be displayed
   */
public void showDeprecatedTargetDialogIfNeeded(ActivityRecord r) {
    if (r.appInfo.targetSdkVersion < Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT) {
        mUiHandler.showDeprecatedTargetDialog(r);
    }
}

重點:這里出現(xiàn)一個判斷方法着帽,正是其決定是否彈窗,判斷條件中Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT移层,如下:

public static final int MIN_SUPPORTED_TARGET_SDK_INT = SystemProperties.getInt(
                "ro.build.version.min_supported_target_sdk", 0);

此屬性默認值仍翰,一般是17。也就是說:

Android P機型上观话,當應(yīng)用的targetSdk版本低于17時予借,應(yīng)用啟動時會彈窗“此應(yīng)用專為舊版Android打造,因此可能無法正常運行频蛔。請嘗試檢查更新或與開發(fā)者聯(lián)系”灵迫。

那么查看截圖的某應(yīng)用Package信息:

Package [com.qqgame.hlddz] (5ecd50f): 
    ......
    versionCode=196 minSdk=8 targetSdk=8
    versionName=6.043.001

果然其App的targetSdk是8,遠低于17帽驯。


解決了核心問題龟再,繼續(xù)跟進showDeprecatedTargetDialog方法的實現(xiàn),會發(fā)現(xiàn)其主要是調(diào)用對話框類DeprecatedTargetSdkVersionDialog尼变,來彈出此對話框,并顯示提示浆劲。

這里有一個問題嫌术,既然是在每個Activity啟動時會調(diào)用AppWarnings.java的onStartActivity方法,那會不會每次打開新Activity牌借,都彈此對話框度气?如果這樣,用戶體驗也會非常不好膨报。

答案:不會的磷籍,這里有一個小技巧适荣,第一次彈出對話框后,用戶如果選擇“確定”院领,AMS會給此應(yīng)用設(shè)置一個Flag標識:FLAG_HIDE_DEPRECATED_SDK弛矛。每次準備彈窗時,會先判斷此標識值是否為true比然,如果是丈氓,說明已經(jīng)提示過用戶,無需再彈窗强法。代碼如下:

public DeprecatedTargetSdkVersionDialog(final AppWarnings manager, Context context, ApplicationInfo appInfo) {
    // ...
    final AlertDialog.Builder builder = new AlertDialog.Builder(context)
                .setPositiveButton(R.string.ok, (dialog, which) ->
                    manager.setPackageFlag(
                            mPackageName, AppWarnings.FLAG_HIDE_DEPRECATED_SDK, true))
                .setMessage(message)
                .setTitle(label);
    // ...
}


最后万俗,結(jié)論如下:

Android P機型上,當應(yīng)用的targetSdk版本低于17時饮怯,應(yīng)用啟動時會彈窗“此應(yīng)用專為舊版Android打造闰歪,因此可能無法正常運行。請嘗試檢查更新或與開發(fā)者聯(lián)系”蓖墅。標準值由ro.build.version.min_supported_target_sdk值設(shè)定的课竣,一般默認是17

作者:kevin song,2019.1.23于南京建鄴區(qū)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末置媳,一起剝皮案震驚了整個濱河市于樟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拇囊,老刑警劉巖迂曲,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寥袭,居然都是意外死亡路捧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門传黄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杰扫,“玉大人,你說我怎么就攤上這事膘掰≌滦眨” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵识埋,是天一觀的道長凡伊。 經(jīng)常有香客問我,道長窒舟,這世上最難降的妖魔是什么系忙? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮惠豺,結(jié)果婚禮上银还,老公的妹妹穿的比我還像新娘风宁。我一直安慰自己,他們只是感情好蛹疯,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布戒财。 她就那樣靜靜地躺著,像睡著了一般苍苞。 火紅的嫁衣襯著肌膚如雪固翰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天羹呵,我揣著相機與錄音骂际,去河邊找鬼。 笑死冈欢,一個胖子當著我的面吹牛歉铝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凑耻,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼太示,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了香浩?” 一聲冷哼從身側(cè)響起类缤,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邻吭,沒想到半個月后餐弱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡囱晴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年膏蚓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畸写。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡驮瞧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枯芬,到底是詐尸還是另有隱情论笔,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布破停,位于F島的核電站翅楼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏真慢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一理茎、第九天 我趴在偏房一處隱蔽的房頂上張望黑界。 院中可真熱鬧管嬉,春花似錦、人聲如沸朗鸠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烛占。三九已至胎挎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忆家,已是汗流浹背犹菇。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芽卿,地道東北人揭芍。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像卸例,于是被迫代替她去往敵國和親称杨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容