升级Android Studio至v3.4.0后重建项目遇STRING_TOO_LARGE错误
解决Android Studio 3.4.0升级后"STRING_TOO_LARGE"报错问题
嘿,这个问题我之前帮不少开发者踩过坑!AS 3.4.0升级后触发的这个错误,本质是Android Gradle Plugin(AGP)3.4.0开始加强了单个字符串资源的大小限制——一般单个字符串超过1MB左右,就会触发这个编码失败的报错。下面给你几个实用的解决办法,按推荐程度排序:
1. 拆分大型字符串资源(适合可分割的短文本)
如果你的大字符串是可以分段的内容(比如长文案、多段说明),直接把它拆成多个小字符串资源:
- 在
res/values/strings.xml里,将原单个大字符串拆分为多个子部分:<string name="long_text_part1">第一段内容...</string> <string name="long_text_part2">第二段内容...</string> <string name="long_text_part3">第三段内容...</string> - 然后在代码里拼接这些字符串:
Java示例:
Kotlin示例:String fullText = getString(R.string.long_text_part1) + getString(R.string.long_text_part2) + getString(R.string.long_text_part3);val fullText = getString(R.string.long_text_part1) + getString(R.string.long_text_part2) + getString(R.string.long_text_part3)
2. 将大型文本移到Assets目录(最推荐的长期方案)
如果是几MB级别的超大文本(比如帮助文档、用户协议),直接把文本文件放到app/src/main/assets目录下,通过AssetManager读取,这是最规范的处理方式:
- 第一步:把大文本保存为
large_content.txt(或其他格式),放到assets文件夹中; - 第二步:在代码中读取文件内容:
Java示例:
Kotlin示例:try { InputStream inputStream = getAssets().open("large_content.txt"); int fileSize = inputStream.available(); byte[] buffer = new byte[fileSize]; inputStream.read(buffer); inputStream.close(); String fullContent = new String(buffer, "UTF-8"); } catch (IOException e) { e.printStackTrace(); }try { val fullContent = assets.open("large_content.txt") .bufferedReader() .use { it.readText() } } catch (e: IOException) { e.printStackTrace() }
3. 临时禁用资源压缩(仅救急,不推荐长期使用)
如果只是需要临时编译通过,可以在模块级别的build.gradle里添加配置,关闭AGP的资源严格检查:
android { aaptOptions { // 禁用资源 crunch 压缩 cruncherEnabled = false // 或者添加额外参数忽略大资源编码检查 additionalParameters '--ignore-assets', '!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~' } }
⚠️ 注意:这个方法只是临时方案,长期使用会导致APK体积增大,还可能引发其他资源加载问题,紧急情况处理完后,一定要换回前面的规范方案。
4. 排查第三方依赖的大资源
有时候报错不是自己的代码导致的,而是依赖的第三方库引入了超大字符串资源。你可以:
- 用
./gradlew app:dependencies命令查看项目依赖树,定位可疑的库; - 用Android Studio的
Analyze > APK Analyzer工具,检查APK中的资源大小,找到占用空间超大的字符串资源,然后考虑替换该库,或者通过exclude规则排除不必要的资源。
内容的提问来源于stack exchange,提问作者Manisha Patil
相关产品推荐
相关产品推荐

