HarmonyOS 鸿蒙Next中开启混淆后,截图会弹出隐私泄露的警告弹窗,点确认后会关闭app。
HarmonyOS 鸿蒙Next中开启混淆后,截图会弹出隐私泄露的警告弹窗,点确认后会关闭app。 【问题描述】:用的发布证书,和内部测试的的profile。然后打包时设置打开混淆就会出现这情况。不打开混淆不会出现。代码中未订阅截图相关事件,请问这个警告弹窗怎么屏蔽?
【问题现象】:开启混淆后,截图会有隐私泄露的警告弹窗
【版本信息】:DevEco Studio 5.0.4 Release API Version 16 Release
【复现代码】:无
【尝试解决方案】:无

更多关于HarmonyOS 鸿蒙Next中开启混淆后,截图会弹出隐私泄露的警告弹窗,点确认后会关闭app。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者您好,麻烦提供一下以下信息:
-
是否有使用三方加固软件。如果有的话,使用的加固软件是什么,这个加固软件使用是否有什么使用限制,例如和您的工程版本是否匹配?
-
麻烦提供一下相关的日志~
更多关于HarmonyOS 鸿蒙Next中开启混淆后,截图会弹出隐私泄露的警告弹窗,点确认后会关闭app。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
已经解决了。引用了三方的加固厂商,里面的配置没改导致的。
初步分析是你使用的第三方库中有防截屏检测。
请重点检查同弹框样式的第三方库中是否有相关配置。
尤其是那些tools工具功能(自带弹框、网络请求、工具链等)超级多的第三方库。
【问题分析】
楼主检查一下是否是因为再EntryAbility设置主窗口为隐私窗口,实现全局防截屏,在debug环境没有生效在release生效了
【参考代码】
import { ConfigurationConstant, UIAbility } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
const DOMAIN = 0x0000;
export default class EntryAbility extends UIAbility {
onCreate(): void {
try {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
} catch (err) {
hilog.error(DOMAIN, 'testTag', 'Failed to set colorMode. Cause: %{public}s', JSON.stringify(err));
}
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created,set main page for this ability
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
// Get the main window
windowStage.getMainWindow((err: BusinessError, data) => {
let errCode: number = err.code;
if (errCode) {
console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
return;
}
let windowClass: window.Window = data;
console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
// Set the window privacy mode
let isPrivacyMode: boolean = true;
try {
windowClass.setWindowPrivacyMode(isPrivacyMode, (err: BusinessError) => {
const errCode: number = err.code;
if (errCode) {
console.error('Failed to set the window to privacy mode. Cause:' + JSON.stringify(err));
return;
}
console.info('Succeeded in setting the window to privacy mode.');
});
} catch (exception) {
console.error('Failed to set the window to privacy mode. Cause:' + JSON.stringify(exception));
}
});
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
return;
}
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
}
};
【参考文档】
你的隐私模式弹窗判断语句中是否使用了自定义的变量进行判断,把这些变量名排除混淆试一下:
- 在 obfuscation-rules.txt 文件内 把**-keep-property-name** 选项前面的注释符号删掉。
- 然后每换一行就键入一个变量名。
或者检查一下项目中有没有使用了本地json文件中的属性,这些属性也需要排除混淆。
自定义的变量打印出来是正常的,
有没有设置

期待HarmonyOS能在未来带来更多创新的技术和理念。
有设置的。目前场景是用户在录入密码时才会打开这个隐私模式,正常使用时都是关着的。关键是打release包的时候混淆字段是开着的,正常使用都会出现这个弹框;打debug包的时候混淆字段是关着的,就不会出现这个弹框。。。
在HarmonyOS Next中开启混淆功能后,系统检测到截图操作会触发隐私保护机制,自动弹出警告提示潜在数据泄露风险。用户点击确认时,应用会根据安全策略终止运行以防止信息暴露。此行为是系统级安全防护设计,与混淆配置相关,需检查混淆规则是否过度包含敏感界面元素。
在HarmonyOS Next中,开启混淆后出现截图隐私泄露警告弹窗,可能是由于混淆导致系统误判了应用行为。这通常与代码混淆后触发了系统安全机制有关。以下是可能的解决方案:
-
检查混淆配置:确保混淆规则(如
proguard-rules.pro)未误删或修改与截图相关的系统类或方法。添加以下规则保留关键组件:-keep class ohos.** { *; } -keep class * implements ohos.app.Context { *; } -
排查敏感权限:确认应用未声明或不必要使用截图相关权限(如
ohos.permission.CAPTURE_SCREEN),避免系统检测到潜在风险。 -
测试模式调整:使用内部测试Profile时,尝试关闭混淆或切换为调试证书,验证是否为混淆与发布证书组合的特定问题。
-
系统兼容性:由于API Version 16为较新版本,可能存在系统行为变更。检查HarmonyOS文档或更新DevEco Studio至最新版本,以排除工具链问题。
如果问题持续,建议在混淆配置中逐步排除模块,定位触发警告的具体代码区域。

