AAPT2コンパイルが失敗しました:Android 3.0 Canary 1の無効な寸法


88

Android用のInstant Appsをいじっています。すべての正しいパッケージをインストールし、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
  • 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>

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


4
ビルドを機能させるための回避策として、私は現在aapt2を無効にしており、ビルドをテストするために機能します... gradle.propertiesファイルでandroid.enableAapt2 = falseを設定することで実行できます。私はそれがスタジオのバグかもしれないと思います...
BruceWayne


5
FYIの最新のカナリアビルド5がリリースされ、Googleは以下のように、このAAPT2に引き続き問題があることを言及しました。増分リソース処理を可能にするAAPT2の安定化を継続しています。リソース処理の問題が原因でビルドが失敗した場合は、バグレポートを送信してください。AAPTを一時的に無効にするには、gradle.propertiesファイルでandroid.enableAapt2 = falseを設定します。Roboelectricは現在AAPT2と互換性がありません
無限ループ

回答:


57

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

次の方法で変更できます。

ここに画像の説明を入力してください


6
これでうまくいきました。システム全体に適用する必要はありませんでした。ただし、Android-Studioを再起動するだけでは不十分です。Gradleビルドの変更をアクティブにするには、ログアウトしてから再度ログインする(またはシステムを再起動する)必要があります。
サリム

14
できます!Linuxの場合、次のことを行う必要があります:LC_NUMERIC = "en_US.UTF-8"をエクスポートし、同じプロンプトでAndroid Studioを起動します
sposnjak

17
私は自分のstudio.shの最初にexport LC_NUMERIC = "en_US.UTF-8"を追加しました。私は確かに、バグを回避するためだけにシステム全体のロケールを変更しません。
rzehan

7
...ワット?1つのアプリに1つのバグがあるという理由だけで、システム全体のロケールを変更するように誰かに勧めることはクレイジーです。それはあなたの日付がどのようにフォーマットされるかに影響を与えます。例えば、メールクライアント、言語、その他ほとんどすべてのものです。
ステファンヘニングセン2017年

2
さて、私はWindowsを使用しています。助言がありますか?
user2520215 2017年

106

以下は、4つの異なるソリューションであるA、B、C、Dです。あなたに合うものを選んでください:

A)Ubuntuの.desktopランチャーファイルによるAndroid Studioの修正

これは、Android Studioの修正に関する一般的なアプローチのUbuntuのみの代替手段です(下記を参照)。シェルの修正に関する部分を実装し、修正を元に戻して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のショーツを見つけ、開始し、作成できるはずです。

あなたの喜びのために

しかし、個人的には、ほとんどの場合、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も、修正を適用する必要があります。これはシェルにのみ影響し、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シェルエイリアスが追加される方法です。別のOSを使用している場合は、代わりに〜/ .bashrcまたは〜/ .profileに追加する必要があります。

    次に、新しいシェルを起動./gradlewし、新しいエイリアスを使用する代わりに、次を使用しますgr

    gr clean assDebug

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

D)APPT2をすべて無効にする

個人的にはこれはしませんが、appt2でエラーが発生しないようにするための方法であるため、完全を期すために追加しました。この行をあなたに追加してくださいgradle.propertiesandroid.enableAapt2=false


10
これは受け入れられた回答よりもはるかに優れた回避策のようです
lelloman

2
どういうわけか、これは私にはうまくいきません。私はAndroid Studio 3.0 Canary 3を入手しましたが、これをすべて設定した後も、マージの問題は解決しません。私のロケールはen_US.UTF-8です
vladaman 2017年

1
私はカナリア3に更新し、ここに戻って再び貼り付けをコピーしましたが、まだ機能しています
レロマン

1
@vladamanこれにより明らかな浮動小数点のバグが修正されますが、Android Studio 3.0 Canary 3は以前よりもさらに厳しく、以前は受け入れられていたリソースファイルのいくつかのバグによりマージエラーが発生します。今日のように、設計ライブラリプレビューが盗聴されており、3.0カナリア3のAndroid Studioの上に構築されないことに注意してください
aberaud

1
@Stephan Henningsenは、私が実際にバージョン26.XでSDK、ツール、およびライブラリを使用しているにもかかわらず、何が間違っていたのかはわかりません。でに設定するandroid.enableAapt2(または類似する)ことfalseでaapt2を無効にするだけで、すでにエラーを修正していますgradle.properties。とにかく役立つ回答を
どうもありがとう

33

この問題を解決するには、gradle.propertiesファイルに次の行を追加します。

android.enableAapt2=false

2
この答えは説明に値すると思います。
ksugiarto 2017

この回答は役立ったが、ちょうどあなたがaapt2を必要とするならば、間違いなく追加し、それを引き起こしたのGradleモジュールオフになります問題を解決していないexport LC_NUMERIC="en_US.UTF-8"私にとっては魅力のように働いたあなたの.bashrcに
lukassos

1
MAC OSユーザーはどうですか?
HendraWD

Windows環境で開発していますが、これにはどのような変更が必要ですか?
Mehbube Arman

android.enableAapt2 = falseは非推奨であり、2018年末までに削除されます。
XurajB

1

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


0

使用するときに単位(dp)を追加していないことを確認してください format="float"

Android Studioを使用Extract dimen resourceしてdimenを自動生成し、次のようなユニットタイプを追加したため、同じ問題に直面していました。

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

そのはず:

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


-6

追加

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

リポジトリは私のために働く


@EugenPechanecはい
Romuald DANSOU 2017年

それは意味がありません。必要なときにリポジトリが見つからなかった場合、リソースをマージすることはできません。依存関係がないため、ビルドは失敗します。リポジトリが必要ない場合は、リポジトリを指定しても何も変わりません。OPがプロジェクトにgoogle maven repo参照をまだ含めていない場合、OPはこれまでのビルドプロセスに到達しません。あなたの答えは当面の問題に対する解決策を提供しません。他にも変更を加えたはずです。
Eugen Pechanec 2017年

-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

これらのパッケージをインストールすることでOPの問題を解決する方法がわかりません。この問題は、収縮の圧縮方法とどのように関連していますか?私は自分でlib32z1をインストールしていません。私のインストールは、このstackoverflow.com/a/44304075/2412477を適用した後に機能します。不要な可能性のあるパッケージをインストールする前に、だれでもそれを試すことをお勧めします。
ステファンヘニングセン2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.