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

华为开启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编辑

,原因: 格式错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值