android studio with Java compiler error: string too large to encode using UTF-8 written instead as 'STRING_TOO_LARGE'

android studio with Java compiler error: string too large to encode using UTF-8 written instead as 'STRING_TOO_LARGE'

当我在 android studio 中清理 android 项目时,错误发生了,我已经返回到以前的提交或不同的分支,这在几天前找到了,但现在有这个错误。我检查了这个问题,没有为我的项目添加大图像或字符串。 STRING_TOO_LARGE String in Kothlin

暂时可以降级Gradle版本来解决这个问题。 使用 gradle 3.1 版本,例如下面的 3.1.3。

  classpath 'com.android.tools.build:gradle:3.1.3'

您可以使用 AAPT(来自 android sdk/build-tools)检查 APK 并使用以下命令行 (Linux) 查找有问题的字符串:

// Linux/Mac
./aapt dump --values resources MyAppName-regular-debug.apk | grep -B 1 'STRING_TOO_LARGE'

// Windows
aapt dump --values resources MyAppName-regular-debug.apk | grep -B 1 'STRING_TOO_LARGE'

这应该会指出罪魁祸首。在我的例子中是:

resource 0x7f0f015a com.example.app:string/eula: t=0x03 d=0x00000f10 (s=0x0008 r=0x00)
      (string8) "STRING_TOO_LARGE"

我遇到了同样的问题,并由 clear the build cache 修复。

我被困在这个问题上并通读了这个主题,但没有人提供未来的解决方案。我不想恢复我的 Gradle。因此,这里是 link 到更新的依赖项 https://github.com/stripe/stripe-android。查找 "Android Studio (or Gradle)" 部分,您应该会看到此 "implementation 'com.stripe:stripe-android:8.1.0'" 如果您在 build.gradle 文件中启用缩小,您可能还需要添加 "-keep class com.stripe.android.** { *; }"

整体 Stripe 已停止更新自己的 "Stripe docs",可以找到 here。为了表彰他们,他们的文档很有帮助,应该至少阅读一次,但请注意,当我写这篇文章时,大多数文档都已经过时了……

希望这对您有所帮助:)

None 以上解决方案对我有用。正如它所说,最终导致问题的原因是一个太大的字符串。具体来说,在 values 目录下的 arrays.xml 文件中,我有一些在我的应用程序中使用的 SVG 数组,将它们注释掉解决了这个问题。

如果您确定在资源目录 (/res) 的某处有一些较长的字符串,请检查是否有任何可能潜伏的大字符串。

此外,this solution 可能会帮助其他人,但未在此线程中链接到。

只需在您的可绘制文件中使用 <?xml version="1.0" encoding="utf-8"?>

示例:

<?xml version="1.0" encoding="utf-8"?>
<vector
    android:autoMirrored="true"
    android:height="24dp"
    android:viewportHeight="490.282"
    android:viewportWidth="490.282"
    android:width="24dp"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <path
        android:fillColor="#fff"
        android:pathData="M0.043,245.197c0.6,10.1 7.3,18.6 17,21.5l179.6,54.3l6.6,123.8c0.3,4.9 3.6,9.2 8.3,10.8c1.3,0.5 2.7,0.7 4,0.7c3.5,0 6.8,-1.4 9.2,-4.1l63.5,-70.3l90,62.3c4,2.8 8.7,4.3 13.6,4.3c11.3,0 21.1,-8 23.5,-19.2l74.7,-380.7c0.9,-4.4 -0.8,-9 -4.2,-11.8c-3.5,-2.9 -8.2,-3.6 -12.4,-1.9l-459,186.8C5.143,225.897 -0.557,235.097 0.043,245.197zM226.043,414.097l-4.1,-78.1l46,31.8L226.043,414.097zM391.443,423.597l-163.8,-113.4l229.7,-222.2L391.443,423.597zM432.143,78.197l-227.1,219.7l-179.4,-54.2L432.143,78.197z"/>
</vector>

在windows

中清除你的gradle
gradlew cleanBuildCache

在 mac

./gradlew cleanBuildCache

然后构建你的 apk 如果你的项目有问题它会显示在 'Messages' 看法。找到您的问题并解决它。 运行代理人。

就我而言,问题是由于清单中的以下行造成的:

    <activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name"/>

一旦我删除了它们,构建就很顺利了。

只需在您的 Android 工作室终端中使用 gradlew cleanBuildCache

就我而言,我从 xml 中删除了一个视图,但忘记在我的 kotlin 代码中删除它的引用。在做任何花哨的事情之前一定要检查一下。

我找到了一个 SVG 文件,它的长度很长 pathData。我将其注释掉,错误消失了。在运行时完全相同的向量(在调用时)会导致崩溃(在它被注释掉之前)。

我从 here

的 Kotlin 重复问题中找到了答案

<?xml version="1.0" encoding="utf-8"?> 添加到缺少它的任何资源 .xml 文件的顶部。 (特别检查你的布局 xml 文件)

在我的例子中,我使用数据绑定在 xml 中声明了一个字符串变量,但没有为其赋值。通过将值设置为变量问题已解决

我长期以来一直在寻找我们构建中 STRING_TOO_LARGE 错误的来源,并且 none 这些解决方案有效。 none 它们起作用的原因是我在调试版本中打开了 progaurd,所以当字符串被替换时它并没有出现在 apk 中。当我为调试版本禁用 progaurd 时,构建了 apk,然后按照其他地方的建议使用 apktool 反编译

java -jar apktool_2.4.1.jar d debug.apk 

并找到了另一个库中的 xml 文件,但 progaurd 之前被删除了:

grep -r "STRING_TOO_LARGE" ./debug

希望对某人有所帮助

对我来说,“gradlew cleanBuildCache”不起作用,运行 aapt dump --values resources MyAppName-regular-debug.apk | grep -B 1 'STRING_TOO_LARGE' 什么也没做...

我最后只是删除了我所有的矢量图像,因为它们都非常大并且修复了我的构建..所以我想我必须将它们添加回不会再次抛出错误的方式..

Windows 10 解

查找有错误的文件:使用在线反编译器 如果这不是问题是其他人看到了您的代码。下载 .zip 文件。打开 notepad++ search -> Find in files -> STRING_TOO_LARGE -> Find all.

如果问题文件是矢量资源:

。鳄梨会使矢量文件变小。

碰巧我的 SVG 太长了 (90Kb)。所以我在 Adob​​e illustrator 中打开了 de SVG,简化了路径以减少大量矢量,因此新图标重量为 3Kb,最后,再次导入 Android Studio。

您可以在 Android Studio 中查看您的项目,看看您的 SVG 可绘制对象是否大于图标所需的大小。

在我的例子中,我重命名了包,output-metadata.json 包含旧包名。在那里重命名了包名,就修复了。

而不是这个

org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8

gradle.properties

中用这个替换了它
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=STRING_TOO_LARGE

在我的例子中,我使用无效缓存并恢复 转到 file/Invalidate 缓存并恢复

我遇到了这个问题,清除缓存或更新 Gradle 插件版本都不是解决方案

为了解决这个问题,我不得不更改最长的 XML 文件的名称,使其更短一些,然后问题就解决了。

此问题是由 AAPT/AAPT2(Android 资产打包工具)引起的,它会处理您应用的资源并在发现大字符串时将其替换为 STRING_TOO_LARGE 值。

找出导致此问题的原因。 要找出答案,请执行以下步骤:

一个。最佳方式:

  1. 生成构建 APK
  2. 使用任何反编译器反编译 APK 并下载。
  3. 在任何编辑器中打开它(例如 VS Code)
  4. 然后全局搜索“STRING_TOO_LARGE”文本,您将找到受影响的文件。

乙。另一种方式

  1. 找出最简单的方法,构建一个 APK 并对其进行分析。 Select Build > Build Bundle(s) / APK(s) ) > 构建 APK。构建完成后,将出现确认通知,向 APK 文件提供 link 并在 APK 分析器中提供 link 以分析它。

  1. 如果您查看受此问题影响的 vector drawable 文件,您会发现如下内容:

我从 Here

找到了这个解决方案