华为开启emui10的公测后, 之前一直禁止切换默认launcher的情况有了新的解决办法 : 冻结 手机管家 即可设置 第三方launcher

这里简单分析华为手机管家中 相关逻辑

求助: 在 最新版本 emui10 中 , 此方法已被修复 , 无法使用adb或冰箱冻结华为手机管家有没有大佬知道 更彻底 禁用 或冻结app的方案 .

关于 新版 rom 中 进行了什么操作 实现 无法冻结 的效果 , 求 大佬们指点 思路 , 可以从什么 角度 去分析 , 非常感谢

分析过程

获取apk

pm list packages -f | grep com.huawei.systemmanager

package:/system/priv-app/HwSystemManager/HwSystemManager.apk=com.huawei.systemmanager

adb pull /system/priv-app/HwSystemManager/HwSystemManager.apk

jadx-gui 搜索 launcher

3 类名:LauncherAnalyze implements IMalConditionAnalyzer

package com.huawei.securitycenter.antimal;

LauncherPredicate implements Predicate

package com.huawei.systemmanager.optimize.process.Predicate;

主要是 判断当前 launcher

LauncherStringPredicate implements Predicate

搜索 LauncherAnalyze

2结果 , 实现 和调用

实现

IMalConditionAnalyzer detectEachCondition(ConditionType type) {

switch (type) {

case BATCH_INSTALL:

return new BatchInstallationAnalyze(this.mContext);

case THIRD_DESKTOP:

return new LauncherAnalyze(this.mContext);

case KEY_APP_DISABLED:

return new SystemAppAnalyze(this.mContext);

case DEVICE_MGR_OVERFLOW:

return new DeviceManagerAppAnalyze(this.mContext);

case CONFIGS_MAL_MODIFIED:

return new SystemSettingsAnalyze(this.mContext);

case DEVICE_OWNER_APP_INSTALLED:

return new DeviceOwnerAppAnalyze(this.mContext);

default:

HwLog.e(TAG, "detectEachCondition: unknown type");

return null;

}

}

一个调用处

package com.huawei.securitycenter.antimal

class MalDetectManager : startAnalyze()

其中 循环一次 分析 多种情况 , type 循环累加 的序号

只出现一次

87行

IMalConditionAnalyzer malConditionAnalyzer = this.mMalConditionDetector.detectEachCondition(type);

if (malConditionAnalyzer == null || !malConditionAnalyzer.isMeetMalCondition(configManager)) {

res = false;

} else {

res = true;

}

com.huawei.securitycenter.antimal.MalDetectManager: starAnalyze()

-> com.huawei.securitycenter.antimal.MalConditionDetector :detectEachCondition()

-> com.huawei.securitycenter.antimal.LauncherAnalyze.LauncherAnalyze -> this.mMalBaseData.setThirdLauncher(true);

-> void setThirdLauncher(boolean thirdLauncher) {

this.mMalDetectInfo.isThirdLauncher = thirdLauncher;

writeMalDetectDataToFile();

}

-> AntiMalUtils.writeJsonObjectToFile(this.mMalDetectInfo.malDetectDataToJson(), this.mMalDetectDataPath);

-> MalBaseDataCenter : initFilePath()

String antimalPath = MalwareConst.DATA_HSM_MANAGER_PATH_EMUI5 + "antimal";

// class MalwareConst : static final String DATA_HSM_MANAGER_PATH_EMUI5 = (Environment.getDataDirectory() + "/misc/hsm/files/");

this.mMalDetectDataPath = antimalPath + File.separator + "maldetectdata.json";

-> 存储到 /data/misc/hsm/files/maldetectdata.json

总结 :

此功能 流程 仅为 探测 是否存在 第三方桌面

恢复 华为桌面

搜索 thirdlauncher

com.huawei.securitycenter.antimal.MalRecoveryManager;

private void resetDefaultConfigs() {

if (this.mMalBaseData.isThirdLauncher()) {

recoverHwDesktop();

this.mMalBaseData.setThirdLauncher(false);

}

private void recoverHwDesktop() {

if (!AntiMalUtils.isNowLauncher(this.mContext, "com.huawei.android.launcher")) {

AntiMalUtils.setDefaultLauncher(this.mContext);

}

}

package com.huawei.securitycenter.antimal;

class AntiMalUtils

static boolean isNowLauncher(Context context, String pkgName) {

if (context == null || TextUtils.isEmpty(pkgName)) {

HwLog.e(TAG, "isNowLauncher param is null.");

return false;

}

PackageManager packageManager = context.getPackageManager();

if (packageManager == null) {

return false;

}

ResolveInfo res = packageManager.resolveActivity(getMainIntent(), 0);

if (res != null && res.activityInfo != null) {

return pkgName.equals(res.activityInfo.packageName);

}

HwLog.e(TAG, "resolveInfo param is null.");

return false;

}

static void setDefaultLauncher(Context context) {

if (context != null) {

boolean isFromLauncher = isLauncherOnForeground(context);

HwLog.i(TAG, "isFromLauncher = " + isFromLauncher);

PackageManager packageManager = context.getPackageManager();

if (packageManager != null) {

List resolveInfoList = packageManager.queryIntentActivities(getMainIntent(), 0);

if (resolveInfoList != null && !resolveInfoList.isEmpty()) {

ActivityInfo activityInfo;

for (ResolveInfo resolveInfo : resolveInfoList) {

if (resolveInfo != null) {

activityInfo = resolveInfo.activityInfo;

if (!(activityInfo == null || activityInfo.packageName == null)) {

packageManager.clearPackagePreferredActivities(activityInfo.packageName);

}

}

}

int length = resolveInfoList.size();

int findDex = -1;

ComponentName[] set = new ComponentName[length];

for (int i = 0; i < length; i++) {

activityInfo = ((ResolveInfo) resolveInfoList.get(i)).activityInfo;

if (!(activityInfo == null || activityInfo.packageName == null || activityInfo.name == null)) {

set[i] = new ComponentName(activityInfo.packageName, activityInfo.name);

if ("com.huawei.android.launcher".equals(activityInfo.packageName)) {

findDex = i;

break;

}

}

}

if (findDex != -1) {

IntentFilter inf = new IntentFilter("android.intent.action.MAIN");

inf.addCategory("android.intent.category.HOME");

inf.addCategory("android.intent.category.DEFAULT");

packageManager.addPreferredActivity(inf, 1048576, set, set[findDex]);

}

if (isFromLauncher) {

try {

context.startActivity(getMainIntent());

} catch (ActivityNotFoundException e) {

HwLog.e(TAG, "set defaultLauncher to start activity found an exception: " + e.getMessage());

}

}

}

}

}

}

最后于 2020-3-7 17:24

被ShdHrzn编辑

,原因: 格式错误

android10禁用华为桌面,[原创]简单分析华为emui10对第三方桌面的禁用逻辑(华为手机管家app) + 求助新rom的分析入手思路...相关推荐

  1. 华为nova5 pro鸿蒙,华为nova5 Pro简单上手:一款“不偏科”的真旗舰!

    原标题:华为nova5 Pro简单上手:一款"不偏科"的真旗舰! 刚刚,华为在武汉正式带来了nova系列的新旗舰:华为nova5系列.那么,在2019年,华为nova5系列能否让用 ...

  2. 华为云桌面客户端_入冬第一场技术盛宴!DevRun开发者沙龙华为云武汉专场举办...

    做开发有多难?大部分做过开发的人会说:「难,有时候难上加难.」 因为一个开发者会在职业生涯中遇到各种各样的挑战.比如快速迭代的专业知识,要求开发者保持终身学习.快速学习的习惯:还需要开发者持续开拓新的 ...

  3. 任正非内部重磅发言:华为不可能简单学阿里、亚马逊

    来源:券商中国 辞旧迎新之际,华为创始人任正非此前在华为企业业务及云业务汇报会上的发言于华为心声社区曝光. 任正非指出,华为企业业务要聚焦战略重点,继续做减法,收缩企业业务做战线,认真弄清楚做作战模型 ...

  4. 华为ensp常用简单命令(二)

    华为ensp常用简单命令(二) 华为ensp 1.CE交换机 2.vlan及三大模式划分端口入vlan 3.网桥优先级 4.RSTP和MSTP 5.查看命令 华为ensp 1.CE交换机 CE交换机把 ...

  5. 华为 原生android 6.0,安卓6.0原生桌面轻体验,我的手机从未如此流畅过

    本帖最后由 啷个里格弄 于 2016-12-30 13:05 编辑 1.png (188.33 KB, 下载次数: 65) 2016-4-29 18:21 上传 ▏写在开头 P8的EMUI系统或者称之 ...

  6. 2021年中国5G手机发展现状及市场竞争格局分析:华为持续领跑国内5G手机市场[图]

    5G手机是指使用第五代通信系统的智能手机,相对4G手机,5G手机有更快的传输速度,低时延,通过网络切片技术,拥有更精准的定位.5G网络的主要优势在于,数据传输速率远远高于以前的蜂窝网络,最高可达10G ...

  7. 华为云 ModelArts——简单的机器学习 初体验

    华为云 ModelArts--简单的机器学习 初体验 自2019年后,人工智能(AI)继续在产业中快速奔跑,越来越多的行业开始搭上智能化升级的大潮.然而,长时间.高成本.高投入.复杂繁琐的AI开发流程 ...

  8. 华为nova4e能更新鸿蒙吗,华为nova4e禁止系统更新的方法_怎么关闭和禁用系统更新功能...

    下面也还是来说说部分机友在用这个华为nova4e手机的时候会提到的一个问题,那就是不想让手机进行更新,因为有的机友觉得现在的系统用着挺好的,不想操作系统的更新,想把手机的更新功能暂时关闭了,那这个怎么 ...

  9. srg2220_华为SRG 2220简单上网! SRG2200路由配置!

    华为SRG 2220简单上网! SRG2200路由配置! //WAN //123.162.114.24 //255.255.255.192 //123.162.114.1 // //LAN //192 ...

最新文章

  1. python打印汉字宝塔_利用宝塔+python+搭建falsk项目_详(一)
  2. 我为什么重新做起了公众号?
  3. 从壹开始 [vueAdmin后台] 之三 || 动态路由配置 项目快速开发
  4. python内置的数字运算函数_Python 内置函数1
  5. 数据库设计技巧系列(二)——设计表和字段
  6. HDLM命令dlnkmgr详解之二__help/clear
  7. bzoj1012: [JSOI2008]最大数maxnumber [单调队列]
  8. git status命令
  9. cmd 下关闭不需要的进程
  10. dev 命令行参数调用_在Linux系统上使用简单命令行创建高强度的预共享密钥
  11. 关于在networkx中使用louvain算法报错的问题
  12. 从生活中领悟设计模式(Python)
  13. Mac Air 配置Android开发环境
  14. editplus编辑器使用-快速开始(editplus通过sftp协议远程编辑文件)
  15. 大型国企用泛微OA,让会务管理有序,让会议开展高效
  16. excel--操作使用记录
  17. 企业招聘面试的经典6类问题
  18. 成功解决TPOT下载read time out的问题
  19. 使用Javapoet生成代码
  20. linux下vanish的部署

热门文章

  1. 如何用乌班图(Ubuntu)制作 linux 系统 U盘启动盘
  2. Blender2.9基础七:外部插件篇
  3. 004-PBR历史和概念
  4. 解决Python pip下载安装过慢问题
  5. Linux系统管理-C编程
  6. 一文多图搞懂KITTI数据集下载及解析
  7. 用c++做一个弹窗恶搞——类似病毒但没危害
  8. VS2022无法打开Silverlight 项目的问题:改用VS2015
  9. Silverlight 4 Tools 4安装出错解决方法
  10. 【Go编程语言】 Go语言基础语法