Android应用在Android 6.0.1设备启动崩溃:找不到布局XML资源
我来帮你拆解下这个问题,根源其实很明确——你的启动页背景Drawable在Android 6.0.1(API 23)上无法正确解析,直接触发了资源找不到的崩溃。
问题核心分析
从错误栈里的关键报错信息就能定位问题:
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #9: <bitmap> requires a valid 'src' attribute
你在splash_background.xml的<bitmap>标签里同时用了app:srcCompat和android:src,但Android 6.0及以下系统不支持在原生<bitmap>标签中使用app:srcCompat属性——这个属性是AppCompat库专门为ImageView这类控件设计的,并不是给系统Drawable标签用的。旧系统解析时会直接忽略app:srcCompat,如果android:src指向的资源在低版本设备上存在识别问题,就会触发“缺少有效src”的错误。
另外,你的SplashTheme没有继承AppCompat主题,而启动页Ladebildschirm是AppCompatActivity的子类,这也可能在旧系统上引发主题初始化的兼容问题。
具体修复步骤
1. 修正splash_background.xml的Bitmap标签
移除<bitmap>标签里的app:srcCompat属性,只保留原生的android:src——系统的BitmapDrawable只识别这个原生属性:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"> <!-- 背景色,建议和常规主题保持一致 --> <item android:drawable="@color/backgroundLight"/> <!-- 应用Logo - 144dp彩色版本 --> <item> <bitmap android:gravity="center" android:src="@drawable/ic_launcher"/> </item> </layer-list>
2. 确保ic_launcher资源兼容低版本
如果ic_launcher是矢量图(VectorDrawable),需要在build.gradle的defaultConfig中添加矢量图支持配置(你的minSdk是21,刚好覆盖):
defaultConfig { // ... 现有配置 vectorDrawables.useSupportLibrary = true }
如果是位图资源,要确保在所有分辨率的drawable目录(如drawable-mdpi、drawable-hdpi等)都有对应尺寸的图片,避免低版本设备找不到资源。
3. 修正SplashTheme的父主题
由于启动页是AppCompatActivity,SplashTheme必须继承自AppCompat的主题,避免主题初始化兼容问题:
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/splash_background</item> <!-- 可选:隐藏状态栏,让启动页更全屏 --> <item name="android:windowFullscreen">true</item> </style>
4. 关于空的generated文件夹
你提到的空generated文件夹是Android Studio自动生成的资源目录,空状态不会影响应用运行,完全可以忽略。
验证修复
修改完成后重新编译安装到Android 6.0.1设备上,启动页应该就能正常加载了。核心就是去掉Bitmap标签里不兼容的app:srcCompat,同时确保主题和资源的低版本兼容性。
内容的提问来源于stack exchange,提问作者NamelesssLord

