1.adb shell命令移除:adb shell dumpsys deviceidle whitelist -xxx
调用接口:DeviceIdleController:removePowerSaveWhitelistAppInternal
2.应用卸载事件:Intent.ACTION_PACKAGE_REMOVED
调用接口:DeviceIdleController:removePowerSaveWhitelistAppInternal
3.应用组件发生变化&使用配套设备配对服务(CompanionDeviceManager )&无后台运行权限会触发Doze名单移除
调用接口:
PackageMonitor:Intent.ACTION_PACKAGE_ADDED&Intent.EXTRA_REPLACING/Intent.ACTION_PACKAGE_CHANGED
CompanionDeviceManagerService:onPackageModifiedInternal->
updateSpecialAccessPermissionForAssociatedPackage->updateSpecialAccessPermissionAsSystem
PowerWhitelistManager:removeFromWhitelist
PowerExemptionManager:removeFromPermanentAllowList
IDeviceIdleController:removePowerSaveWhitelistApp
DeviceIdleController:removePowerSaveWhitelistAppInternal
调试代码:
private void onPackageModifiedInternal(@UserIdInt int userId, @NonNull String packageName) {
/*if (DEBUG) */Log.i(TAG, "onPackageModified() u" + userId + "/" + packageName);
// huazhi.su add for test doze white list
if ("com.tencent.mm".equals(packageName)) {
String MAC_ADDRESS = "AA:BB:CC:DD:FF:EE";
AssociationInfo info =
new AssociationInfo(
/* id= */ 10888,
/* userId= */ userId,
"com.tencent.mm",
MacAddress.fromString(MAC_ADDRESS),
"displayName_test",
"deviceProfile_test",
/* AssociatedDevice*/ null,
/* selfManaged= */ false,
/* notifyOnDeviceNearby= */ false,
/* revoked */ false,
/* timeApprovedMs= */ 0,
/* lastTimeConnectedMs= */ 0,
/* systemDataSyncFlags= */ -1);
mAssociationStore.addAssociation(info);
}
// huazhi.su add for test for test doze white list
final List<AssociationInfo> associationsForPackage =
mAssociationStore.getAssociationsForPackage(userId, packageName);
for (AssociationInfo association : associationsForPackage) {
Log.i(TAG, "onPackageModified() association:" + association);
updateSpecialAccessPermissionForAssociatedPackage(association);
}
mCompanionAppController.onPackagesChanged(userId);
}
复现步骤:
复现步骤:
// 禁用组件
adb shell pm disable com.tencent.mm/androidx.work.impl.background.systemjob.SystemJobService
// 恢复组件
adb shell pm enable com.tencent.mm/androidx.work.impl.background.systemjob.SystemJobService
移除RUN_IN_BACKGROUND权限
cmd appops set com.tencent.mm RUN_IN_BACKGROUND ignore
恢复RUN_IN_BACKGROUND权限
cmd appops set com.tencent.mm RUN_IN_BACKGROUND allow
运行堆栈
2024-08-08 14:09:27.132 2152-2199 CDM_Compan...gerService system_process I onPackageModified() u0/com.tencent.mm
2024-08-08 14:09:27.135 2152-2199 CDM_Compan...gerService system_process I updateSpecialAccessPermissionForAssociatedPackage pkg=com.tencent.mm,callingPid=2152,myPid=2152
2024-08-08 14:09:27.135 2152-2199 CDM_Compan...gerService system_process W com.tencent.mm updateSpecialAccessPermissionAsSystem.
2024-08-08 14:09:27.140 2152-2199 CDM_Compan...gerService system_process I onPackageModified() association:Association{mId=10888, mUserId=0, mPackageName='com.tencent.mm', mDeviceMacAddress=aa:bb:cc:dd:ff:ee, mDisplayName='displayName_test', mDeviceProfile='deviceProfile_test', mSelfManaged=false, mAssociatedDevice=null, mNotifyOnDeviceNearby=false, mRevoked=false, mTimeApprovedMs=Thu Jan 01 08:00:00 GMT+08:00 1970, mLastTimeConnectedMs=Thu Jan 01 08:00:00 GMT+08:00 1970, mSystemDataSyncFlags=-1}
2024-08-08 14:09:27.140 2152-2199 CDM_Compan...gerService system_process I updateSpecialAccessPermissionForAssociatedPackage pkg=com.tencent.mm,callingPid=2152,myPid=2152
2024-08-08 14:09:27.141 2152-2199 CDM_Compan...gerService system_process W com.tencent.mm updateSpecialAccessPermissionAsSystem.
2024-08-08 14:09:27.137 2152-2199 DeviceIdleController system_process I removePowerSaveWhitelistApp pkg=com.tencent.mm,callingPid=2152,myPid=2152
2024-08-08 14:09:27.140 2152-2199 DeviceIdle...lerSkyImpl system_process D removePowerSaveWhitelistAppEvent:pkgName=com.tencent.mm,callerPid:2152,callerUid:1000,callerProcessName:not found,strackTrace:com.android.server.DeviceIdleController$BinderService.removePowerSaveWhitelistApp:2076 android.os.PowerExemptionManager.removeFromPermanentAllowList:601 android.os.PowerWhitelistManager.removeFromWhitelist:445 com.android.server.companion.CompanionDeviceManagerService.updateSpecialAccessPermissionAsSystem:1278 com.android.server.companion.CompanionDeviceManagerService.lambda$updateSpecialAccessPermissionForAssociatedPackage$6:1263 com.android.server.companion.CompanionDeviceManagerService.$r8$lambda$tlRMCjgVf49EEwSP3re3BN5N6Cs:0 com.android.server.companion.CompanionDeviceManagerService$$ExternalSyntheticLambda1.runOrThrow:0 android.os.Binder.withCleanCallingIdentity:437 com.android.server.companion.CompanionDeviceManagerService.updateSpecialAccessPermissionForAssociatedPackage:1263 com.android.server.companion.CompanionDeviceManagerService.onPackageModifiedInternal:548 ,reason:appSettingsEvent:pid=2152,uid=1000,callerProcessName:not found
2024-08-08 14:09:27.140 2152-2199 DeviceIdleController system_process I removePowerSaveWhitelistApp return for isDefaulWhitelistApp
2024-08-08 14:09:27.141 2152-2199 DeviceIdleController system_process I removePowerSaveWhitelistApp pkg=com.tencent.mm,callingPid=2152,myPid=2152
2024-08-08 14:09:27.152 2152-2199 DeviceIdle...lerSkyImpl system_process D removePowerSaveWhitelistAppEvent:pkgName=com.tencent.mm,callerPid:2152,callerUid:1000,callerProcessName:not found,strackTrace:com.android.server.DeviceIdleController$BinderService.removePowerSaveWhitelistApp:2076 android.os.PowerExemptionManager.removeF
4.Setting界面手动移除
调用接口:
PowerAllowlistBackend:removeApp
IDeviceIdleController:removePowerSaveWhitelistApp
DeviceIdleController:removePowerSaveWhitelistAppInternal
日志:
日志:
07-25 13:57:56.450 2084 17675 I wm_create_activity: [0,2731207,1116,com.android.settings/.applications.InstalledAppDetails,android.settings.APPLICATION_DETAILS_SETTINGS,NULL,package:,272662528]
07-25 13:57:59.507 4052 4052 D BatteryOptimizeUtils: refresh com.tencent.mm state, allowlisted = false, mode = 0
DeviceIdleController: removePowerSaveWhitelistApp pkg=com.tencent.mm,callingPid=4578,myPid=2084
2024-07-25 13:59:49.497 power_m_doze_white_list_abnormal,pkg_name:com.tencent.mm,caller_pid:2084,caller_uid:1000,caller_process_name:not found,caller_strack_trace:com.android.server.DeviceIdleController.removePowerSaveWhitelistAppInternal:2875 com.android.server.DeviceIdleController$BinderService.removePowerSaveWhitelistApp:2080 android.os.IDeviceIdleController$Stub.onTransact:288 android.os.Binder.execTransactInternal:1345 android.os.Binder.execTransact:1276 <bottom of call stack> <bottom of call stack> <bottom of call stack> <bottom of call stack> <bottom of call stack> ,reason:appSettingsEvent:pid=2084,uid=1000,callerProcessName:not found
例如settings 中删除doze白名单,验证是正确的, 堆栈可以调查谁删除了doze白名单
DeviceIdleController: removePowerSaveWhitelistApp pkg=com.tencent.mm,callingPid=4578,myPid=2084
comm:ndroid.settings, pid:4578,