应用覆盖安装后桌面图标消失问题
一、现象
当一个 app 有两个入口 Activity(标记了 main、launcher 的 Activity,如集成了 LeakCanary 的 app),安装后,桌面上会出现两个图标。
当在 androidManifest 中删除一个 activity 或将其 disable,再覆盖安装,桌面上的两个图标都会消失(有些机器会这样,如 mix2;在模拟器上只有被删除或者 disable 的那个没了)。
通过代码设置 Activity disable,也会让图标都消失(mix2 上,大约 13s 后)。
二、恢复(测试机型:mix2)
2.1 通过代码大约十几秒后生效
val componentName = ComponentName(context, "com.gdeer.gdtesthub.MyActivity")val packageManager = context?.packageManagerpackageManager?.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP) 2.2 通过 adb即时生效
debug 版:
// 恢复 MyActivityadb shell pm enable com.gdeer.gdtesthub/.MyActivity// 恢复所有入口 Activity,先 disable 再 enableadb shell pm disable com.gdeer.gdtesthubadb shell pm enable com.gdeer.gdtesthubrelease 版:
// 恢复所有入口 Activity,先 disable-user 再 enableadb shell pm disable-user com.gdeer.gdtesthubadb shell pm enable com.gdeer.gdtesthubrelease 版使用 disable,会报 Security exception: Shell cannot change component state,要用 disable-user。 disable-user 也不能改变单个 Activity,只能针对包名使用。