88

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

我的环境:

  • Android Studio 3.0 金丝雀 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>

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

4

7 回答 7

106

下面提到了四种不同的解决方案:A、B、C 和 D;选择一个适合您的:

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

这是修复 Android Studio的一般方法的唯一 Ubuntu 替代方案(见下文)。请注意,您可能仍希望实现有关Fixing 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 的短片:

为了您的快乐

但就个人而言,我几乎总是无法让 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

关于升级 Android Studio 或 Gradle 的说明

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

C) 固定外壳;Gradle,詹金斯,所有这些

从外壳使用构建gradlew也需要应用修复。这只会影响 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

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

D) 一起禁用 APPT2

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

于 2017-06-01T09:44:18.137 回答
57

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

可以通过以下方式更改:

在此处输入图像描述

于 2017-05-26T13:23:19.353 回答
33

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

android.enableAapt2=false
于 2017-07-18T11:43:17.953 回答
1

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

于 2017-10-30T14:58:15.723 回答
1

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

我遇到了同样的问题,因为我使用 Android Studio 自动生成了维度Extract dimen resource,它添加了单元类型,例如:

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

它应该是:

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

于 2018-09-04T22:07:41.733 回答
-6

添加

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

为我工作的存储库

于 2017-05-27T22:07:13.447 回答
-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
于 2017-06-08T08:43:03.597 回答