升级Android API 34后出现UTF-8编码字符串过大错误
Android 14(API 34)升级后构建报错:"string too large to encode using UTF-8 written instead as 'STRING_TOO_LARGE'"
问题描述
将Android项目API等级从33(Android 13)升级到34(Android 14),已更新所有适配新API的依赖与配置,但在Android Studio中执行同步、清理并重建项目时,触发上述编码错误。
复现步骤
- 将项目Android API等级从33升级至34(适配Android 14)
- 更新所有依赖以兼容新API等级
- 在Android Studio中执行同步、清理并重建项目
- 构建过程中触发错误
预期与实际行为
预期行为:项目无编码问题,可成功构建。
实际行为:构建过程中出现错误,无法正常完成构建。
项目配置
android { namespace 'com.My app' compileSdkVersion 34 buildToolsVersion "34.0.0" splits { abi { enable true reset() include 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'arm64-v8a' universalApk true } } defaultConfig { applicationId "com.my app" minSdkVersion 28 compileSdk 34 targetSdkVersion 34 versionCode 32 versionName "1.8.1" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
补充信息
- 最小复现场景:更新Gradle版本并清理重建项目后出现该问题,但此前相同长度的字符串可正常运行。
- 尝试拆分长字符串后问题仍未解决。
- 错误截图:

解决方法
1. 替换超大字符串为Raw资源
AGP 8.x+对字符串资源大小限制更严格(通常超过100KB会触发该错误):
- 排查
res/values/下所有字符串资源,找出超大文本(比如长HTML、协议文本) - 将内容移动到
res/raw/目录下的文件中,通过代码读取:InputStream inputStream = getResources().openRawResource(R.raw.large_text); String text = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
2. 调整Android Gradle Plugin(AGP)版本
- 若当前使用AGP 8.0.x,升级到AGP 8.1.0及以上,官方修复了部分编码相关的构建bug
- 临时降级到AGP 7.4.x(兼容compileSdk 34),可规避该限制
3. 配置AAPT禁用特定资源压缩
在build.gradle的android块中添加:
aaptOptions { noCompress 'txt', 'html', 'json' // 根据你的大文件类型调整 cruncherEnabled = false }
4. 确保Gradle与AGP版本匹配
- AGP 8.0.x → Gradle 8.0+
- AGP 8.1.x → Gradle 8.1+
- AGP 7.4.x → Gradle 7.5+
内容的提问来源于stack exchange,提问作者Ankit Hatwar
相关产品推荐
相关产品推荐

