Kompilasi AAPT2 gagal: dimen tidak valid di Android 3.0 Canary 1

88

Saya bermain-main dengan Aplikasi Instan untuk Android. Saya menginstal semua paket yang benar dan lelah untuk membuat Aplikasi baru dengan dukungan Aplikasi Instan (centang kotak Aplikasi Instan saat memasukkan aplikasi baru). Masalahnya adalah saya selalu mengalami masalah dengan alat kompilasi. Apakah ada orang lain yang memiliki masalah ini dan dapat menemukan solusi untuk itu.

Lingkungan saya:

  • Android Studio 3.0 Canary 1
  • Kompilasi SDK: 25
  • Alat Bangun: "26.0.0 rc2"
  • Plugin Gradle: 3.0.0-alpha1
  • Gradle: mencoba gradle-4.0-milestone1 dan 2
  • Java 1.8 / 1.7
  • OS: mencoba Windows 10 dan Linux Ubuntu 16.4 LTS

Kesalahannya:

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

Baris yang dimaksud berisi (520):

<item format="float" name="abc_disabled_alpha_material_dark" type="dimen">0.30</item>

Semoga saya memberikan informasi yang cukup kepada Anda untuk menyelesaikan masalah tersebut. Terima kasih.

sposnjak
sumber
4
Sebagai solusi untuk menjalankan build, saat ini saya menonaktifkan aapt2 dan berfungsi untuk menguji build ... Anda dapat melakukannya dengan menyetel android.enableAapt2 = false di file gradle.properties Anda. Saya pikir itu mungkin bug studio tidak yakin ...
BruceWayne
Solusi lainnya adalah stackoverflow.com/a/33943562/5125608 Ini berfungsi untuk saya.
anlijudavid
5
FYI canary build terbaru, 5, dirilis dan Google menyebutkan di bawah bahwa mereka masih mendapat masalah dengan AAPT2 ini sebagai berikut, AAPT2. Kami terus menstabilkan AAPT2 yang memungkinkan pemrosesan sumber daya tambahan. Jika build Anda gagal karena masalah pemrosesan sumber daya, kirimkan laporan bug kepada kami. Untuk menonaktifkan AAPT sementara, setel android.enableAapt2 = false di file gradle.properties Anda. Roboelectric saat ini tidak kompatibel dengan AAPT2
Infinite Loops

Jawaban:

57

Solusinya adalah dengan mengalihkan mesin pengembangan Anda ke lokal yang menggunakan "." sebagai tanda desimal.

Itu dapat diubah dengan cara berikut:

masukkan deskripsi gambar di sini

saturov
sumber
6
Ini berhasil untuk saya. Menerapkan seluruh sistem tidak perlu. Tetapi memulai ulang Android-Studio saja tidak cukup. Anda perlu keluar dan masuk lagi (atau memulai ulang sistem Anda) untuk mengaktifkan perubahan untuk gradle build.
Salim
14
Berhasil! Untuk linux Anda harus melakukan: ekspor LC_NUMERIC = "en_US.UTF-8" dan kemudian mulai Android Studio di prompt yang sama
sposnjak
17
Saya menambahkan export LC_NUMERIC = "en_US.UTF-8" ke awal studio.sh saya dan berfungsi dengan baik. Saya pasti tidak akan mengubah lokal sistem saya hanya untuk mengatasi beberapa bug.
rzehan
7
... wat? Merekomendasikan seseorang untuk mengubah lokal sistem mereka hanya karena satu bug dalam satu aplikasi adalah gila. Ini akan mempengaruhi bagaimana tanggal Anda diformat, misalnya di klien email, bahkan bahasa dan hampir semua hal lainnya juga.
Stephan Henningsen
2
Yah aku di jendela. Ada saran?
pengguna2520215
106

Di bawah ini disebutkan empat solusi berbeda: A, B, C, dan D; pilih salah satu yang cocok untuk Anda:

A) Memperbaiki Android Studio melalui file peluncur .desktop Ubuntu

Ini adalah alternatif khusus Ubuntu untuk pendekatan umum tentang Memperbaiki Android Studio (lihat di bawah). Perhatikan bahwa Anda mungkin masih ingin menerapkan bagian tentang Memperbaiki shell , dan mungkin bahkan mengembalikan modifikasi apa pun studio.shuntuk sepenuhnya mengonfirmasi perbaikan ini.

Saya bosan menambal studio.shuntuk setiap pembaruan kenari, jadi saya datang dengan solusi yang lebih baik yang menghilangkan langkah ini. Ini berfungsi di Ubuntu dan hanya melibatkan pembuatan peluncur .desktop yang menetapkan variabel lingkungan sakit yang dimaksud.

  1. Catat di mana Android Studio 3 Anda diinstal, misalnya ~/opt/android-studio-3.

  2. Siapkan ikon lokal dan direktori aplikasi Anda, jika belum ada:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
    
  3. Buat ikon Android Studio 3 yang akan membuat peluncur Anda menonjol dari ikon default dan simpan di dalamnya ~/.local/share/icons/android-studio-3.png. Atau Anda bisa menggunakan yang saya buat dengan menggosokkan sepotong keju pada aslinya ( ~/opt/android-studio-3/bin/studio.png):

    android-studio-3.png

  4. Buat file peluncur Android Studio 3 dengan menyalin dan menempelkannya ke dalam shell:

    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. Jadikan itu dapat dieksekusi:

    chmod +x ~/.local/share/applications/android-studio-3.desktop
    
  6. Sekarang untuk bagian yang sulit. Idealnya Anda harus dapat menemukan, memulai, dan membuat celana pendek untuk Android Studio 3 dari Dash:

Untuk kesenanganmu

Tetapi secara pribadi, saya hampir selalu kesulitan mendapatkan Ubuntu untuk mendeteksi file .desktop saya yang baru atau yang diubah. Salah satu solusinya adalah keluar dan masuk kembali. Jika ada yang tahu cara memaksa pemindaian ulang, beri tahu saya!

B) Memperbaiki skrip mulai Android Studio

Berikut ini perbaikan yang mudah, elegan, dan semi-permanen: Hanya ubah lokal Android Studio itu sendiri dengan memodifikasi skrip startupnya:

  1. Sunting studio.shmisalnya ~/opt/android-studio/bin/studio.shatau apapun jalur instalasi Anda.

  2. Di suatu tempat di bagian atas file, di bawah #!/bin/shdan sebelum baris kode pertama muncul, tambahkan ini:

    LC_NUMERIC="en_US.UTF-8".

    Inilah bagian atas saya studio.shuntuk kelengkapan:

    #!/bin/sh
    #
    # ---------------------------------------------------------------------
    # Android Studio startup script.
    # ---------------------------------------------------------------------
    #
    
    LC_NUMERIC="en_US.UTF-8"
    
    message()
    {
      TITLE="Cannot start Android Studio"
    ...
    
  3. Mulai ulang Android Studio

Catatan tentang Mengupgrade Android Studio atau Gradle

Saat nanti Anda mengupgrade penginstalan Android Studio, itu akan mendeteksi bahwa Anda telah memodifikasi studio.sh. Anda harus membiarkan penginstal mengganti file, dan kemudian melakukan patch lagi seperti dijelaskan di atas. Terakhir, mulai ulang Android Studio, dan Anda akan siap lagi. Solusi lain tidak terpengaruh oleh ini.

C) Memperbaiki cangkang; Gradle, Jenkins, semua itu

Membangun dari cangkang menggunakan gradlewjuga membutuhkan perbaikan untuk diterapkan. Ini hanya memengaruhi shell dan bukan Android Studio. Pilih salah satu:

  1. Tentukan perbaikan pada setiap pemanggilan seperti ini:

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

  2. Atau untuk menjadikannya permanen untuk proyek , edit gradlewfile di root proyek dan di suatu tempat di bagian atas tambahkan ini:

    LC_NUMERIC="en_US.UTF-8"

    Seperti di sini:

    #!/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. Atau Anda tentu saja dapat juga menambahkan memperbaiki global dan permanen meskipun penggunaan alias, 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
    

    Perhatikan ini adalah bagaimana alias bash shell ditambahkan di Ubuntu; jika Anda menggunakan OS berbeda, mungkin Anda harus menambahkan ~ / .bashrc atau ~ / .profile.

    Kemudian mulai shell baru dan sekarang alih-alih meminta, ./gradlewgunakan alias baru gr:

    gr clean assDebug

Kerugian yang jelas dari # 2 adalah bahwa ini harus diterapkan pada semua proyek secara manual. Keuntungannya, menurut saya, adalah ini akan otomatis ditimpa ketika gradlew baru dipasang, seperti studio.shdiganti, jadi Anda bisa menguji apakah bug telah diperbaiki =)

D) Menonaktifkan APPT2 secara bersamaan

Secara pribadi saya tidak akan melakukan ini, tetapi saya telah menambahkannya untuk kelengkapan karena ini pasti adalah cara untuk membuat appt2 berhenti memberikan kesalahan. Tambahkan baris ini ke gradle.properties:android.enableAapt2=false

Stephan Henningsen
sumber
10
ini tampaknya solusi yang jauh lebih baik daripada jawaban yang diterima
lelloman
2
Untuk beberapa alasan ini tidak berhasil untuk saya. Saya mendapatkan Android Studio 3.0 Canary 3 dan setelah mengatur semua ini, masalah penggabungan tetap ada. Lokal saya adalah en_US.UTF-8
vladaman
1
Saya baru saja memperbarui ke canary 3 dan kembali ke sini untuk menyalin tempel lagi, ini masih berfungsi untuk saya
lelloman
1
@vladaman Ini memperbaiki bug floating point yang jelas, namun Android Studio 3.0 canary 3 masih lebih ketat dari sebelumnya, dan beberapa bug di file sumber daya Anda yang sebelumnya diterima sekarang akan menyebabkan kesalahan penggabungan. Perhatikan bahwa mulai hari ini, pratinjau pustaka desain disadap dan tidak akan dibangun di Android Studio 3.0 canary 3.
aberaud
1
@ Stephan Henningsen tidak yakin apa yang bisa saya lakukan salah, meskipun saya sebenarnya menggunakan SDK, alat, dan libs di versi 26.X. Saya sudah memperbaiki kesalahan sendiri dengan hanya menonaktifkan aapt2 dengan mengatur android.enableAapt2(atau serupa) ke falsedi my gradle.properties. Terima kasih banyak atas jawaban yang membantu :)
Maxr1998
33

Saya memecahkan masalah ini dengan menambahkan baris berikut ke file gradle.properties

android.enableAapt2=false
Hoshouns
sumber
2
Saya pikir jawaban ini layak mendapat penjelasannya.
ksugiarto
jawaban ini membantu tetapi tidak menyelesaikan masalah hanya mematikan modul gradle yang menyebabkannya, jika Anda membutuhkan aapt2 maka pasti tambahkan export LC_NUMERIC="en_US.UTF-8"ke .bashrc Anda yang berfungsi seperti pesona bagi saya
lukassos
1
bagaimana dengan pengguna MAC OS?
HendraWD
Saya mengembangkan di lingkungan windows, perubahan apa yang saya perlukan untuk ini?
Mehbube Arman
android.enableAapt2 = false tidak digunakan lagi dan akan dihapus pada akhir 2018.
XurajB
1

Masalah ini telah diperbaiki di Android Studio stable terbaru. Mengupgrade Android Studio Anda ke 3.0 akan menyelesaikan masalah ini untuk Anda (juga tidak perlu menonaktifkan AAPT2).

Izabela Orlowska
sumber
0

Pastikan Anda tidak menambahkan satuan apa pun (dp) saat menggunakan format="float"

Saya menghadapi masalah yang sama karena saya membuat dimens secara otomatis menggunakan Android Studio menggunakan Extract dimen resourcedan menambahkan tipe unit seperti:

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

Harus:

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

Max
sumber
-6

Menambahkan

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

ke repositori bekerja untuk saya

Romuald DANSOU
sumber
@EugenPechanec Ya
Romuald DANSOU
Itu tidak masuk akal. Jika Anda kehilangan repositori saat Anda membutuhkannya, Anda tidak akan bisa sejauh menggabungkan sumber daya. Build akan gagal dengan dependensi yang hilang. Jika Anda tidak membutuhkan repositori, menetapkannya tidak akan mengubah apa pun. OP tidak akan sampai sejauh ini dalam proses pembuatan jika mereka belum menyertakan referensi repo google maven dalam proyek mereka. Jawaban Anda tidak memberikan solusi untuk masalah yang dihadapi. Anda pasti sudah melakukan perubahan lain juga.
Eugen Pechanec
-6

Pustaka yang diperlukan untuk mesin 64-bit:

Jika Anda menjalankan Ubuntu versi 64-bit, Anda perlu menginstal beberapa pustaka 32-bit dengan perintah berikut:

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386

Jika Anda menjalankan Fedora 64-bit, perintahnya adalah:

sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686
Linh Nguyễn Thế
sumber
Saya tidak melihat bagaimana menginstal paket-paket ini harus memperbaiki masalah yang dihadapi di OP. Bagaimana masalah ini terkait dengan metode kompresi deflate? Saya bahkan belum menginstal lib32z1, dan instalasi saya berfungsi setelah menerapkan stackoverflow.com/a/44304075/2412477 ini ; Saya merekomendasikan siapa pun untuk mencobanya sebelum menginstal paket yang mungkin tidak perlu.
Stephan Henningsen