admin管理员组文章数量:1666132
华为开启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的分析入手思路... 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1730065555a1221330.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论