私はAndroid用Instant Appsで遊んでいます。すべての正しいパッケージをインストールし、Instant Appをサポートする新しいアプリケーションを作成するのに疲れました(新しいアプリケーションを作成するときにInstant Appのボックスをチェックしました)。問題は、私がいつもコンパイルツールの問題に出くわすことです。他の誰かがこの問題を抱えていて、どんな回避策も見つけることができましたか。
私の環境:
エラー:
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異なる解決法:A、B、C、D。あなたに合ったものを選んでください。
これは、Android Studioの修復(下記参照)の一般的なアプローチに対するUbuntuのみの代替手段です。 Shellの修正に関する部分を実装したい場合があるかもしれませんし、おそらくこの修正を完全に確認するためにstudio.sh
の修正を元に戻すことさえあるでしょう。
私はすべてのカナリア更新のために私のstudio.sh
にパッチをあてるのにうんざりしました、それで私はこのステップを排除するより良い解決策を思いつきました。それはUbuntu上で動作し、単に問題の病気の環境変数を設定する.desktopランチャーを作成することを含みます。
Android Studio 3がインストールされている場所をメモしてください。 ~/opt/Android-studio-3
。
まだ存在しない場合は、ローカルのアイコンとアプリケーションのディレクトリを用意します。
mkdir -vp ~/.local/share/icons ~/.local/share/applications
ランチャーをデフォルトのアイコンから際立たせるAndroid Studio 3のアイコンを作成し、それを~/.local/share/icons/Android-studio-3.png
に保存します。あるいは、私がオリジナルの上にチーズをこすって作ったものを使うこともできます(~/opt/Android-studio-3/bin/studio.png
):
これをシェルにコピー&ペーストして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
実行可能にします。
chmod +x ~/.local/share/applications/Android-studio-3.desktop
今トリッキーな部分のために。理想的には、ダッシュからAndroid Studio 3用のショーツを見つけて起動し、作成できるはずです。
しかし個人的には、私はUbuntuに新しいまたは変更された.desktopファイルを検出させるのにほとんどいつも問題を抱えています。 1つの解決策は、ログアウトしてから再度ログインすることです。誰かが再スキャンを強制する方法を知っているなら私に知らせてください!
これは、簡単で洗練された、そして半永久的な修正方法です。起動スクリプトを変更して、Android Studio自体のロケールを変更するだけです。
編集studio.sh
~/opt/Android-studio/bin/studio.sh
またはあなたのインストールパスは何でも構いません。
ファイルの先頭、#!/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"
...
Android Studioを再起動します
後でAndroid Studioのインストールをアップグレードすると、studio.sh
が変更されたことが検出されます。インストーラーにファイルを置き換えさせ、その後上記のようにパッチを再度実行させるべきです。最後にAndroid Studioを再起動すると、準備が整います。他の解決策はこれによる影響を受けません。
gradlew
を使用してシェルからビルドする場合も修正を適用する必要があります。これはShellにのみ影響し、Android Studioには影響しません。一つを選ぶ:
次のように、起動するたびに修正方法を指定します。
LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug
あるいは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"
...
あるいは、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がインストールされるときにこれが自動的に上書きされることであるので、バグが修正されたかどうかをテストすることができます=)
個人的に私はこれをしないでしょう、しかしそれは間違いなくappt2がエラーを与えるのを止める方法であるので完全性のためにそれを加えました。この行をあなたのgradle.properties
に追加してください:Android.enableAapt2=false
Gradle.propertiesファイルに次の行を追加してこの問題を解決しました
Android.enableAapt2=false
この問題は最新のAndroid Studio安定版で修正されています。 Android Studioを3.0にアップグレードすると、この問題は解決します(AAPT2を無効にする必要もありません)。
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>