低版本API废弃的警告Dialog

Android  小知识  2023年5月22日 am11:08发布1年前 (2023)更新 91es.com站长
72 0 0

前言

Android高版本上安装一些旧的APP,会存在会弹出对话框,内容:“此应用专为旧版Android打造,因此可能无法正常运行。请尝试检查更新或与开发者联系”。

这样不是很友好,客户要求去掉。

正文

原因

本质是Android高版本对启动应用的支持SDK的检测。

下面是网上分析的,摘抄于此。

应用启动,startActivity时,流程会执行到realStartActivityLocked方法。

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

onStartActivity方法实现:

public void onStartActivity(ActivityRecord r) {
    showUnsupportedCompileSdkDialogIfNeeded(r);
    showUnsupportedDisplaySizeDialogIfNeeded(r);
    showDeprecatedTargetDialogIfNeeded(r);
}

然后真正判断的就是showDeprecatedTargetDialogIfNeeded()

public void showDeprecatedTargetDialogIfNeeded(ActivityRecord r) {
    if (r.appInfo.targetSdkVersion < Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT) {
        mUiHandler.showDeprecatedTargetDialog(r);
    }
}

这里有对启动App的skd版本判断。

在Android P(9)上,这个Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT值就是17。

进一步看DeprecatedTargetSdkVersionDialog的代码。

如果用户点击[ok],会改变一个参数AppWarnings.FLAG_HIDE_DEPRECATED_SDK的属性,也就是不会每次都检查这个属性。

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);
    // ...
}

解决方式

由于客户不喜欢这个弹框。因此需要去掉,方法如下:

  1. AppWarnings.FLAG_HIDE_DEPRECATED_SDK 默认改为true,也就是每次都跳过[没测过,推荐方式2]

  2. showDeprecatedTargetDialogIfNeeded()中注销弹出代码。[完美]

参考文章

  1. 应用弹窗“此应用专为旧版Android打造,因此可能无法正常运行...”的原因

 历史上的今天

  1. 2024: jaudiotagger解析ID3第四版(0条评论)
  2. 2021: Android Zygote进程的启动流程简单分析(0条评论)
  3. 2018: Android消息机制之四总结(0条评论)
  4. 2018: [摘]深入浅出UML类图(二)(0条评论)
  5. 2018: [摘]深入浅出UML类图(一)(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

许知远:优雅的爱情到哪里去了

"将爱情进行到底",这句畅快淋漓的口号暴露了我们的致命伤口--我们正在失去爱情。不管我们的唱片工业产生了多少"为爱伤心欲绝的男人与女人",也不管架上的流行书籍上提供了多少爱与性的技巧,我们得承认,我们的爱情正在失去它应有的光彩,它正变得平庸化与技术化。爱情变成了我们忙碌生活的一种放松方式,变成了一种...

Android磁盘之U盘挂载

前言之前介绍Vold的启动,没有涉及U盘的挂载,今天在之前的基础上进行插入U盘时流程的分析。Android P这里很多都是网上的,我就走走流程。正文VolumeManager.cpphandleBlockEvent()void VolumeManager::handleBlock...

MARK MANSON:年近30的十条人生经验

马上开始为退休做储蓄,不要以后我有不顾一切的20多岁,但到了30多之后,你应该在财务上有个重大推进。退休计划不是什么可以推迟的东西。当保险、401ks和贷款都落到你肩膀上时,尝试理解那些无聊的玩意儿就变得很重要。好好学一下。从现在开始关注你的健康,不要以后你心理上对年龄的接受力比身体的衰老要滞...

[摘]Android IO流读写文件实例

继前文摘抄,此篇是Android IO读写的实例操作。案例0功能:1、创建文件夹、文件 2、遍历文件夹下面的所有文件public class Test1 {      public static void main(String[] args) {          // TOD...

Android应用被杀的日志分析记录

前言最近Android项目中出现一个问题,应用开机源记忆拉起,突然被强制性退了(看Activity的生命周期),搞得我一时懵逼了。日志有这几个打印BufferQueueConsumer( 419): [Splash Screen com.la.media#0](this:0x7ccbe90...

git常用命令

git常用git initgit addgit statusgit commitgit commit -m "xxx"git loggit loggit log -p 同时列出本次提交前后具体的差别git log --pretty=oneline 每条记录仅占一行显示查看分支...