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

时间:2017-05-26 08:09:31

标签: android android-studio android-gradle aapt android-instant-apps

我正在使用Instant Apps for Android.I安装了所有正确的软件包并且厌倦了创建具有Instant App支持的新应用程序(在装箱新应用程序时选中了Instant App的复选框)。问题是我总是遇到编译工具的问题。是否有其他人有这个问题,并能找到任何解决方法。

我的环境:

  • Android Studio 3.0 Canary 1
  • 编译SDK:25
  • 构建工具:" 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>

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

7 个答案:

答案 0 :(得分:106)

下面提到四个不同的解决方案:A,B,C和D;选一个适合你的人:

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

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

我厌倦了为每个金丝雀更新修补studio.sh,所以我提出了一个更好的解决方案,消除了这一步骤。它适用于Ubuntu,只需创建一个.desktop启动器来设置有问题的病态环境变量。

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

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

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

    android-studio-3.png

  4. 通过复制并将其粘贴到shell中来创建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的短裤:

  7. For your pleasure

    但就个人而言,我几乎总是难以让Ubuntu检测到我的新文件或更改的.desktop文件。一种解决方案是注销并重新登录。如果有人知道如何强制重新扫描,请告诉我!

    B)修复Android Studio启动脚本

    这是一个简单,优雅和半永久的修复:只需通过修改其启动脚本来更改Android Studio本身的区域设置:

    1. 修改 studio.sh ,例如 ~/opt/android-studio/bin/studio.sh 或您的安装路径。

    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

    4. 关于升级Android Studio或Gradle

      的说明

      稍后升级Android Studio安装时,它会检测到您已修改studio.sh。您应该让安装程序替换该文件,然后再按上述方法再次执行修补程序。最后重新启动Android Studio,您将再次准备就绪。其他解决方案不受此影响。

      C)固定外壳; Gradle,Jenkins,所有这些

      使用gradlew从shell构建还需要应用修复程序。这只会影响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. 或者您当然也可以通过使用别名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

      4. #2的明显缺点是必须手动将其应用于所有项目。我认为,优点是当安装新的gradlew时会自动覆盖它,就像studio.sh被替换一样,所以你可以测试bug是否已被修复=)

        D)一起禁用APPT2

        就我个人而言,我不会这样做,但我已经将其添加为完整性,因为它绝对是让appt2停止出错的一种方法。将此行添加到gradle.propertiesandroid.enableAapt2=false

答案 1 :(得分:57)

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

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

enter image description here

答案 2 :(得分:33)

我通过将以下行添加到gradle.properties文件

来解决了这个问题
android.enableAapt2=false

答案 3 :(得分:1)

此问题已在最新的Android Studio稳定版中修复。将Android Studio升级到3.0应该可以解决这个问题(也不需要禁用AAPT2)。

答案 4 :(得分:0)

确保使用format="float"时未添加任何单位(dp)

我遇到了同样的问题,因为我使用Extract dimen resource使用Android Studio自动生成了变暗,并且添加了像这样的单位类型:

<item name="margin_top" type="dimen" format="float">51.75dp</item>

应该是:

<item name="margin_top" type="dimen" format="float">51.75</item>

答案 5 :(得分:-6)

添加

    imageLinks = document.DocumentNode.Descendants("a")
                .Select(element => element.GetAttributeValue("href", null))
                .Where(link => link?.Contains(@"http://i.imgur.com") == true)
                .ToList();

到存储库为我工作

答案 6 :(得分:-6)

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