Android分版本配置largeHeap遇AAPT错误:找不到匹配资源
解决AndroidManifest设置largeHeap分版本控制的资源引用错误
嘿,我之前刚好踩过这个坑!你碰到的AAPT错误,根源是在Manifest里引用布尔值资源的格式写错了,分版本控制的姿势也需要调整,下面一步步给你讲怎么搞定:
错误原因分析
你之前用@values/bools来引用资源是不对的——AndroidManifest中引用资源的正确格式是@[资源类型]/[资源名称],布尔值的资源类型是bool,不是values,所以AAPT找不到对应的资源,才会抛出那个错误。
正确的分版本实现步骤
1. 创建分版本的values目录
在你的res目录下,新建两个目录:
values-v14:这个目录下的资源会被**Android 4.0及以上(API 14+)**的设备加载- 保留原有的
values目录:这个目录下的资源会被**低于API 14的设备(比如Android 2.3)**加载
2. 在对应目录下创建布尔值资源文件
分别在两个目录里创建bools.xml文件:
- res/values/bools.xml(给Android 2.3等低版本用):
<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="enable_large_heap">false</bool> </resources> - res/values-v14/bools.xml(给Android 4.0+用):
<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="enable_large_heap">true</bool> </resources>
3. 修改AndroidManifest.xml的引用
把原来错误的@values/bools改成@bool/enable_large_heap,也就是在application标签里这么写:
<application android:name=".MyApplication" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:largeHeap="@bool/enable_large_heap" <!-- 这里是正确的引用 --> ...> <!-- 其他组件声明 --> </application>
验证效果
这样设置之后,编译运行时,系统会根据设备的Android版本自动加载对应目录下的布尔值:
- Android 4.0及以上的设备,
largeHeap会被设为true - Android 2.3及以下的设备,
largeHeap会被设为false
内容的提问来源于stack exchange,提问作者greW
相关产品推荐
相关产品推荐

