同一APK仅在部分设备触发ActivityNotFoundException问题求助
应用安装/更新异常
部分设备可能出现安装包损坏、增量更新失败的情况,导致Activity的类文件未被正确解压到设备中。可以在问题设备上卸载重装应用,验证是否解决问题。另外,某些定制ROM的应用安装机制存在兼容性bug,比如处理split APK时出错,会导致部分组件缺失。Manifest合并或构建变体配置问题
如果使用了产品风味(productFlavors)或构建变体,可能在特定变体中该Activity被意外排除。比如某类flavor的配置里添加了tools:node="remove",或是gradle脚本移除了该Activity的声明。另外,第三方库的Manifest合并可能覆盖或删除你的Activity声明,可前往app/build/intermediates/merged_manifests/对应变体的文件夹查看合并后的Manifest文件。定制ROM的系统限制
不少国产定制ROM(如小米、华为、OPPO等)对应用组件有额外管控机制,比如“应用分身”、“纯净模式”或后台限制功能,可能会屏蔽或禁用该Activity。另外,部分ROM的权限管理逻辑异常,即便Manifest已声明,系统也可能拒绝解析该Activity。可以尝试在问题设备上关闭相关系统管控功能,或在原生Android设备上测试是否能复现问题。类加载器异常
某些设备的类加载器存在问题,比如多dex场景下,该Activity所在的dex文件未被正确加载。尤其是API低于21的设备,开启multiDexEnabled true但未正确初始化MultiDex,会导致部分类无法被找到。另外,部分定制ROM修改了类加载机制,导致无法正常加载应用的类文件。ProGuard/R8混淆问题
如果开启了代码混淆,可能在某些构建配置中误将该Activity类混淆或移除。检查ProGuard/R8规则,确保该Activity类被保留,比如添加以下规则:-keep class com.yourpackage.YourActivity { *; }另外,部分设备上混淆后的类名可能与系统组件冲突,或是ROM的类加载对混淆后的类处理异常。
动态组件加载失败
如果应用使用了App Bundle的动态feature模块,部分设备可能未正确下载对应的模块,导致Activity无法找到。检查动态模块的下载逻辑在问题设备上是否正常执行,或是是否因网络问题导致模块下载失败。
内容的提问来源于stack exchange,提问作者mahdi

