AAPT2编译失败:Android 3.0 Canary上无效的维度1

我正在使用Instant Apps for Android。我安装了所有正确的软件包,并累积创build具有即时应用程序支持的新应用程序(在打包新应用程序时选中了即时应用程序框)。 问题是我总是遇到编译工具的问题。 是否有其他人有这个问题,并能够find任何解决方法。

我的环境:

  • Android Studio 3.0 Canary 1
  • 编译SDK:25
  • 构build工具:“26.0.0 rc2”
  • Gradle插件:3.0.0-alpha1
  • Gradle:尝试了gradle-4.0-milestone1和2
  • Java 1.8 / 1.7
  • 操作系统:尝试Windows 10和Linux Ubuntu 16.4 LTS

错误:

Error: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.internal.aapt.AaptException: AAPT2 compile failed: aapt2 compile -o /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/res/merged/androidTest/debug /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml Issues: - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:520 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:521 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:568 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:594 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:595 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:597 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:598 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:599 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:600 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:601 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:602 invalid dimen - ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:603 invalid dimen :feature:mergeDebugAndroidTestResources FAILED 

该行包含(520):

 <item format="float" name="abc_disabled_alpha_material_dark" type="dimen">0.30</item> 

希望我提供了足够的信息来解决这个问题。 谢谢。

解决方法是将开发机器切换到使用“。”的语言环境。 作为小数点。

可以通过以下方式进行更改:

在这里输入图像说明

下面提到了三种不同的解决scheme:A,B,C和D; 选一个适合你的人:

A)通过Ubuntu .desktop启动文件修复Android Studio

这是修复Android Studio的一般方法的Ubuntu-only方法(见下文)。 请注意,您可能仍然想要实现关于修复shell的部分,甚至可能还原对studio.sh任何修改以完全确认此修复。

我厌倦了为每一个金丝雀更新补丁我的studio.sh ,所以我想出了一个更好的解决scheme,消除了这一步。 它在Ubuntu上工作,只需要创build一个.desktop启动器来设置有问题的环境variables。

  1. 记下你的Android Studio 3的安装位置,例如~/opt/android-studio-3

  2. 准备好您的本地图标和应用程序目录,以防尚未存在:

     mkdir -vp ~/.local/share/icons ~/.local/share/applications 
  3. 创build一个Android Studio 3图标,使您的启动器从默认图标中脱颖而出,并将其保存到~/.local/share/icons/android-studio-3.png 。 或者你可以使用原来的( ~/opt/android-studio-3/bin/studio.png )上的一块奶酪,

    Android的工作室3.png

  4. 通过复制并粘贴到一个shell来创build一个Android Studio 3启动文件:

     cat <<-EOF > ~/.local/share/applications/android-studio-3.desktop [Desktop Entry] Version=1.0 Type=Application Name=Android Studio 3 Icon=android-studio-3 Exec=env LC_NUMERIC="en_US.UTF-8" opt/android-studio-3/bin/studio.sh "%f" Categories=Development;IDE; Terminal=false StartupWMClass=jetbrains-studio EOF 
  5. 使其可执行:

     chmod +x ~/.local/share/applications/android-studio-3.desktop 
  6. 现在是棘手的部分。 理想情况下,您应该能够从Dash中为Android Studio 3查找,启动和创build短裤:

为了您的快乐

但就我个人而言,我几乎总是无法让Ubuntu检测到我的新的或改变的.desktop文件。 一种解决方法是注销并重新login。 如果有人知道如何强制重新扫描,请让我知道!

B)修复Android Studio

下面是一个简单,优雅和半永久性的修正:只需通过修改其启动脚本来更改Android Studio本身的语言环境:

  1. 编辑studio.sh例如~/opt/android-studio/bin/studio.sh或任何您的安装path可能。

  2. 在文件顶部的某个位置,在#!/bin/sh ,在第一行代码出现之前,加上:

    LC_NUMERIC="en_US.UTF-8"

    这里是我的studio.sh的顶部:

     #!/bin/sh # # --------------------------------------------------------------------- # Android Studio startup script. # --------------------------------------------------------------------- # LC_NUMERIC="en_US.UTF-8" message() { TITLE="Cannot start Android Studio" ... 
  3. 重新启动Android Studio

关于升级Android Studio或Gradle的说明

当你以后升级你的Android Studio安装时,它会检测到你修改了studio.sh 。 您应该让安装程序replace文件,然后再次执行修补程序,如上所述。 最后重启Android Studio,你就会再次准备好。 其他解决scheme不受此影响。

C)固定壳体; Gradle,Jenkins,所有这一切

使用gradlew从shell构build也需要应用修补程序。 这只影响shell,而不影响Android Studio。 选一个:

  1. 可以在每个调用中指定修复,如下所示:

    LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug

  2. 或者为了使这个项目永久化, 在项目的根目录和顶部的某个地方编辑gradlew文件添加:

    LC_NUMERIC="en_US.UTF-8"

    像这儿:

     #!/usr/bin/env bash ################################################################################ ## ## Gradle start up script for UN*X ## ################################################################################ LC_NUMERIC="en_US.UTF-8" # Add default JVM options here. You can al... DEFAULT_JVM_OPTS="" APP_NAME="Gradle" ... 
  3. 或者,你当然也可以添加一个全局的和永久的修复,尽pipe使用别名, gr

     cat <<EOF>>~/.bash_aliases # Fixing Android Studio 3 Canary bug https://stackoverflow.com/a/44304075/2412477 alias gr='LC_NUMERIC="en_US.UTF-8" ./gradlew' EOF 

    注意这是如何在Ubuntu上添加bash shell别名; 如果你在不同的操作系统上,也许应该追加〜/ .bashrc或〜/ .profile。

    然后启动一个新的shell,而不是调用./gradlew使用新的别名gr

    gr clean assDebug

#2明显的缺点是,这必须手动应用到所有项目。 我认为这样做的好处是,当安装新的gradlew时,它会自动被覆盖,就像studio.sh被replace一样,所以你可以testingbug是否已经修复=)

D)一起禁用APPT2

就我个人而言,我不会这样做,但为了完整性,我已经添加了它,因为它绝对是使appt2停止提供错误的一种方式。 将这行添加到你的gradle.properties android.enableAapt2=false

我通过将下面这行添加到gradle.properties文件中解决了这个问题

 android.enableAapt2=false 

升级到最新版本的Android Studio后,我收到了一些AAPT2错误以及生成的清单文件中的重复资源exception。 我在这篇文章( https://stackoverflow.com/a/44226734/4394594 )中find了解决scheme,它完全禁用即时运行。

在gradle.properties中添加android.enableAapt2 = false为我工作。

这个问题已经在最新的Android Studio稳定版中解决了。 升级你的Android Studio到3.0应该为你解决这个问题(也不需要禁用AAPT2)。

64位机器所需的库:

如果您运行的是64位版本的Ubuntu,则需要使用以下命令安装一些32位库:

 sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386 

如果您正在运行64位Fedora,那么该命令是:

 sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686 

 maven{ url 'https://maven.google.com' } 

存储库为我工作