前言
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); // ... }
解决方式
由于客户不喜欢这个弹框。因此需要去掉,方法如下:
-
AppWarnings.FLAG_HIDE_DEPRECATED_SDK 默认改为true,也就是每次都跳过[没测过,推荐方式2]
-
showDeprecatedTargetDialogIfNeeded()中注销弹出代码。[完美]
参考文章
-
《
历史上的今天
暂无评论...
随机推荐
许知远:优雅的爱情到哪里去了
"将爱情进行到底",这句畅快淋漓的口号暴露了我们的致命伤口--我们正在失去爱情。不管我们的唱片工业产生了多少"为爱伤心欲绝的男人与女人",也不管架上的流行书籍上提供了多少爱与性的技巧,我们得承认,我们的爱情正在失去它应有的光彩,它正变得平庸化与技术化。爱情变成了我们忙碌生活的一种放松方式,变成了一种...
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 每条记录仅占一行显示查看分支...