web-dev-qa-db-ja.com

AAPT2のコンパイルに失敗しました:Android 3.0 Canaryの無効なディメン1

私はAndroid用Instant Appsで遊んでいます。すべての正しいパッケージをインストールし、Instant Appをサポートする新しいアプリケーションを作成するのに疲れました(新しいアプリケーションを作成するときにInstant Appのボックスをチェックしました)。問題は、私がいつもコンパイルツールの問題に出くわすことです。他の誰かがこの問題を抱えていて、どんな回避策も見つけることができましたか。

私の環境:

  • アンドロイドスタジオ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
  • OS: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>

うまくいけば、私はあなたに問題を解決するのに十分な情報を提供しました。ありがとうございました。

88
sposnjak

これを回避するには、開発用マシンを "。"を使用するロケールに切り替えます。小数点として。

次のように変更できます。

enter image description here

57
saturov

下記が挙げられます4異なる解決法: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. これをシェルにコピー&ペーストして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. 今トリッキーな部分のために。理想的には、ダッシュからAndroid Studio 3用のショーツを見つけて起動し、作成できるはずです。

For your pleasure

しかし個人的には、私はUbuntuに新しいまたは変更された.desktopファイルを検出させるのにほとんどいつも問題を抱えています。 1つの解決策は、ログアウトしてから再度ログインすることです。誰かが再スキャンを強制する方法を知っているなら私に知らせてください!

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、Jenkins、すべてのこと

gradlewを使用してシェルからビルドする場合も修正を適用する必要があります。これはShellにのみ影響し、Android Studioには影響しません。一つを選ぶ:

  1. 次のように、起動するたびに修正方法を指定します。

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

  2. あるいはthe projectを永続的にするには、プロジェクトのルートにある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
    

    これは、bashシェルのエイリアスがUbuntuに追加される方法です。もしあなたが違うOSを使っているのなら、おそらく〜/ .bashrcか〜/ .profileを付け加えるべきです。

    それから、新しいシェルを起動し、./gradlewを呼び出す代わりに、新しいエイリアスgrを使用します。

    gr clean assDebug

#2の明らかな欠点は、これをすべてのプロジェクトに手動で適用しなければならないことです。利点は、studio.shが置き換えられるのと同じように、新しいgradlewがインストールされるときにこれが自動的に上書きされることであるので、バグが修正されたかどうかをテストすることができます=)

D)APPT2をまとめて無効にする

個人的に私はこれをしないでしょう、しかしそれは間違いなくappt2がエラーを与えるのを止める方法であるので完全性のためにそれを加えました。この行をあなたのgradle.propertiesに追加してください:Android.enableAapt2=false

106

Gradle.propertiesファイルに次の行を追加してこの問題を解決しました

Android.enableAapt2=false
33
H.S.H

この問題は最新のAndroid Studio安定版で修正されています。 Android Studioを3.0にアップグレードすると、この問題は解決します(AAPT2を無効にする必要もありません)。

1

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>

0
Max