Android API≤24时applicationInfo.name恒为null,求替代方案及官方依据
获取Manifest中的android:name属性兼容方案
兼容全API等级的写法
直接优先使用applicationInfo.className,它在所有API版本中都能正确返回Manifest里<application>标签的android:name属性值,仅在极端为空的场景下再 fallback 到applicationInfo.name:
String appManifestName = myApp.applicationInfo.className != null ? myApp.applicationInfo.className : myApp.applicationInfo.name;
低版本用name返回null的原因
在Android API 24及以下,ApplicationInfo.name字段存储的是应用进程名称,而非Manifest中<application>的android:name属性值。API 25之后Google调整了该字段的逻辑,让它与className保持一致,所以高版本可用、低版本失效。
关于className的有效性说明
虽然官方文档没有专门标注,但从Android源码的历史实现来看:
- 从API 1开始,
ApplicationInfo.className就是用来存储Manifest中<application>标签指定的android:name值的,无论是否自定义Application子类,这个字段都会被正确赋值 - 低版本的
PackageParser解析Manifest时,会直接将android:name的内容写入className,而name则被赋值为进程名称
内容的提问来源于stack exchange,提问作者Abdul Mateen
相关产品推荐
相关产品推荐

