android studio with Java compiler error:字符串太大,无法使用UTF-8编写而不是'STRING_TOO_LARGE'

Xia*_*wei 21 java android java-compiler-api android-studio

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

ste*_*ker 16

目前,您可以降级Gradle版本以解决此问题.使用gradle 3.1版本,如下面的3.1.3.

  classpath 'com.android.tools.build:gradle:3.1.3'
Run Code Online (Sandbox Code Playgroud)

  • @Elletlar以及因Stripe SDK而遇到此问题的任何人:SDK的V6.1.2包含一个带有很长路径的矢量drawable.该路径是生成错误的路径,并且将被"STRING_TOO_LARGE"替换.他们修改了这个提交https://github.com/stripe/stripe-android/pull/547所以任何包含此修复版本(7.0.0向上)的版本都会使错误消失.我在撰写本文时使用的是8.1.0. (9认同)
  • 这不是解决方案! (4认同)
  • 我收到此错误,当我将gradle从3.1.3升级到3.2.0时,我不想使用3.2.0以下的版本 (3认同)
  • 降级对我来说似乎有点棘手。 (3认同)
  • 尝试将条带库"com.stripe:stripe-android:6.1.2"添加到包含空项目的任何项目时,我总是会收到此错误.我有时可以通过删除Gradle目录和重新同步来消除它,但降级Gradle插件似乎是使其永久消失的唯一可靠选项[Gradle Plugin Versions](https://developer.android.com/studio/释放/ gradle这个-插件) (2认同)

小智 15

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

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

Android Studio 中的项目屏幕截图,显示了可绘制对象的重量


Vee*_*ner 13

您可以使用 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'
Run Code Online (Sandbox Code Playgroud)

这应该指向你的罪魁祸首。就我而言,它是:

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

  • 当我使用这个命令行时什么也没有出现。这是否意味着,它不是来自字符串? (3认同)
  • 这是一个很好的解决方案,但是这个命令对我不起作用,所以我只是反编译了我的 apk(使用任何在线反编译器),然后运行:`grep -r "STRING_TOO_LARGE" /decompiled_apk_folder`。就我而言,它直接将我指向有问题的 SVG 文件。 (2认同)

Kal*_*har 12

我遇到了相同的问题并通过清除构建缓存来修复.

  • [这里是 Android 文档中的解决方案](https://developer.android.com/studio/build/build-cache#clear_the_build_cache) 打开 android studio ,从菜单栏中选择 View > Tool Windows > Terminal 并使用以下之一命令:(在 Windows 中)gradlew cleanBuildCache 和(在 mac 或 linux 中)./gradlew cleanBuildCache (3认同)

小智 11

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

总体Stripe已停止更新其自己的“条纹文档”,可以在此处找到。为了给他们功劳,他们的文档会很有帮助,应该至少阅读一次,但是请注意,当我写这篇文章时,大多数文档已经过时了...

希望这可以帮助 :)


Mas*_*sum 10

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

例子:

<?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>
Run Code Online (Sandbox Code Playgroud)


bsa*_*ner 8

我很长时间以来一直在寻找构建中 STRING_TOO_LARGE 错误的根源,但这些解决方案都不起作用。它们都不起作用的原因是我在调试版本中打开了 progaurd,因此当替换字符串时,它不会出现在 apk 中。当我禁用 progaurd 进行调试构建时,构建了 apk,然后按照其他地方的建议使用 apktool 进行反编译

java -jar apktool_2.4.1.jar d debug.apk 
Run Code Online (Sandbox Code Playgroud)

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

grep -r "STRING_TOO_LARGE" ./debug
Run Code Online (Sandbox Code Playgroud)

希望对某人有帮助


Mil*_*aji 7

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

\n

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

\n

A、最好的方法:

\n
    \n
  1. 生成构建 APK
  2. \n
  3. 使用任意反编译器反编译 APK 并下载。
  4. \n
  5. 在任何编辑器中打开它(例如 VS Code)
  6. \n
  7. 然后全局搜索“STRING_TOO_LARGE”文本,您将找到受影响的文件。\n在此输入图像描述
  8. \n
\n

B、另一种方式

\n
    \n
  1. 最简单的查找方法是构建 APK 并对其进行分析。选择“构建”>“构建捆绑包/APK”>“构建 APK”。构建完成后,会出现一条确认通知,提供 APK 文件的链接以及用于在 APK 分析器中分析该文件的链接。
  2. \n
\n

在此输入图像描述

\n
    \n
  1. 如果您查看受此问题影响的矢量绘图文件,您会发现如下内容:
  2. \n
\n

在此输入图像描述

\n

我从这里找到了这个解决方案

\n


Sil*_*los 6

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

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

此外,此解决方案可能会帮助其他人,但未在此线程中链接。


see*_*ess 5

我发现一个 SVG 文件的pathData. 我将其注释掉,错误就消失了。运行时相同的向量(调用时)会导致崩溃(在被注释掉之前)。