การคอมไพล์ AAPT2 ล้มเหลว: การหรี่ไม่ถูกต้องบน Android 3.0 Canary 1


88

ฉันกำลังเล่นกับ Instant Apps สำหรับ Android ฉันติดตั้งแพ็คเกจที่ถูกต้องทั้งหมดและเหนื่อยที่จะสร้างแอปพลิเคชันใหม่ด้วยการรองรับ 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
  • ระบบปฏิบัติการ: ลองทั้ง 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 และใช้งานได้สำหรับการทดสอบบิลด์ ... คุณสามารถทำได้โดยตั้งค่า android.enableAapt2 = false ในไฟล์ gradle.properties ของคุณ ฉันคิดว่ามันอาจจะเป็นจุดบกพร่องของสตูดิโอไม่แน่ใจ ...
BruceWayne

วิธีแก้ปัญหาอื่นคือstackoverflow.com/a/33943562/5125608มันใช้ได้สำหรับฉัน
anlijudavid

5
FYI รุ่นล่าสุด canary 5 ได้รับการเผยแพร่และ Google ได้กล่าวถึงด้านล่างว่าพวกเขายังคงมีปัญหากับ AAPT2 ดังต่อไปนี้AAPT2 เรากำลังดำเนินการรักษาเสถียรภาพ AAPT2 ซึ่งช่วยให้สามารถประมวลผลทรัพยากรเพิ่มเติมได้ หากการสร้างของคุณล้มเหลวเนื่องจากปัญหาการประมวลผลทรัพยากรโปรดส่งรายงานข้อบกพร่องมาให้เรา หากต้องการปิดใช้งาน AAPT ชั่วคราวให้ตั้งค่า android.enableAapt2 = false ในไฟล์ gradle.properties ของคุณ ปัจจุบัน Roboelectric ไม่สามารถใช้งานร่วมกับ AAPT2 ได้
Infinite Loops

คำตอบ:


57

วิธีแก้ปัญหาคือเปลี่ยนเครื่องพัฒนาของคุณเป็นภาษาที่ใช้ "." เป็นเครื่องหมายทศนิยม

สามารถเปลี่ยนแปลงได้ดังต่อไปนี้:

ป้อนคำอธิบายภาพที่นี่


6
สิ่งนี้ได้ผลสำหรับฉัน ไม่จำเป็นต้องใช้ทั้งระบบ แต่การรีสตาร์ท Android-Studio นั้นไม่เพียงพอ คุณต้องออกจากระบบและเข้าสู่ระบบอีกครั้ง (หรือรีสตาร์ทระบบของคุณ) เพื่อให้การเปลี่ยนแปลงใช้งานได้สำหรับ gradle build
Salim

14
มันได้ผล! สำหรับ linux คุณควรทำ: ส่งออก LC_NUMERIC = "en_US.UTF-8" จากนั้นเริ่ม Android Studio ในพรอมต์เดียวกัน
sposnjak

17
ฉันเพิ่มการส่งออก LC_NUMERIC = "en_US.UTF-8" ที่จุดเริ่มต้นของ studio.sh ของฉันและมันก็ใช้ได้ดี แน่นอนฉันจะไม่เปลี่ยนโลแคลทั้งระบบของฉันเพียงเพื่อแก้ไขข้อบกพร่องบางอย่าง
rzehan

7
... วัด? การแนะนำให้ใครบางคนเปลี่ยนสถานที่ทั้งระบบของพวกเขาเพียงเพราะจุดบกพร่องเดียวในแอปเดียวนั้นบ้ามาก มันจะส่งผลกระทบต่อการจัดรูปแบบวันที่ของคุณเช่นในโปรแกรมรับส่งเมลแม้แต่ภาษาและทุกอย่างอื่น ๆ ด้วย
Stephan Henningsen

2
ฉันอยู่บน windows ข้อเสนอแนะใด ๆ ?
user2520215

106

ด้านล่างนี้มีการกล่าวถึงสี่วิธีที่แตกต่างกัน: A, B, C และ D; เลือกหนึ่งที่เหมาะกับคุณ:

A) แก้ไข Android Studio ผ่านไฟล์ Ubuntu .desktop launcher

นี่เป็นทางเลือกเดียวของ Ubuntu สำหรับแนวทางทั่วไปในการแก้ไข Android Studio (ดูด้านล่าง) โปรดทราบว่าคุณอาจต้องการใช้ส่วนที่เกี่ยวกับFixing the shellและบางทีอาจเปลี่ยนกลับการแก้ไขเพื่อstudio.shยืนยันการแก้ไขนี้

ฉันเบื่อที่จะแพทช์studio.shสำหรับการอัปเดต canary ทุกครั้งดังนั้นฉันจึงคิดวิธีแก้ปัญหาที่ดีกว่าซึ่งจะช่วยลดขั้นตอนนี้ มันทำงานบน Ubuntu และเกี่ยวข้องกับการสร้างตัวเรียกใช้งาน. desktop ที่ตั้งค่าตัวแปรสภาพแวดล้อมที่เป็นปัญหา

  1. จดบันทึกที่ Android สตูดิโอ 3 ~/opt/android-studio-3ของคุณมีการติดตั้งเช่น

  2. เตรียมไอคอนในเครื่องและไดเร็กทอรีแอปพลิเคชันของคุณในกรณีที่ยังไม่มีอยู่:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
    
  3. สร้าง Android สตูดิโอ 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 ได้จาก Dash:

เพื่อความสุขของคุณ

แต่โดยส่วนตัวแล้วฉันมักจะมีปัญหาในการให้ 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, 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
    

    โปรดทราบว่านี่คือวิธีการเพิ่มนามแฝง bash shell บน Ubuntu หากคุณใช้ระบบปฏิบัติการอื่นคุณควรต่อท้าย ~ / .bashrc หรือ ~ / .profile แทน

    จากนั้นเริ่มเชลล์ใหม่และตอนนี้แทนที่จะเรียก./gradlewใช้นามแฝงใหม่gr:

    gr clean assDebug

ข้อเสียที่ชัดเจนของ # 2 คือต้องนำไปใช้กับโครงการทั้งหมดด้วยตนเอง ฉันคิดว่าข้อดีคือสิ่งนี้จะถูกเขียนทับโดยอัตโนมัติเมื่อติดตั้ง gradlew ใหม่เหมือนกันstudio.shถูกแทนที่ดังนั้นคุณจะได้ทดสอบว่าข้อบกพร่องได้รับการแก้ไขแล้วหรือไม่ =)

D) ปิดการใช้งาน APPT2 ทั้งหมดด้วยกัน

โดยส่วนตัวแล้วฉันจะไม่ทำสิ่งนี้ แต่ฉันได้เพิ่มมันเพื่อความสมบูรณ์เนื่องจากเป็นวิธีที่ทำให้ appt2 หยุดให้ข้อผิดพลาด เพิ่มบรรทัดนี้ในgradle.properties:android.enableAapt2=false


10
ดูเหมือนจะเป็นวิธีแก้ปัญหาที่ดีกว่าคำตอบที่ยอมรับ
lelloman

2
ด้วยเหตุผลบางประการสิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันมี Android Studio 3.0 Canary 3 และหลังจากตั้งค่าทั้งหมดแล้วปัญหาการผสานยังคงมีอยู่ ภาษาของฉันคือ en_US.UTF-8
vladaman

1
ฉันเพิ่งอัปเดตเป็น canary 3 และกลับมาที่นี่เพื่อคัดลอกวางอีกครั้งมันยังใช้ได้สำหรับฉัน
lelloman

1
@vladaman สิ่งนี้จะแก้ไขจุดบกพร่องที่ชัดเจน แต่ Android Studio 3.0 canary 3 ยังคงเข้มงวดกว่าเดิมและข้อบกพร่องบางอย่างในไฟล์ทรัพยากรของคุณที่ซึ่งได้รับการยอมรับก่อนหน้านี้จะทำให้เกิดข้อผิดพลาดในการผสาน โปรดทราบว่า ณ วันนี้การแสดงตัวอย่างไลบรารีการออกแบบจะถูกบั๊กและจะไม่สร้างบน Android Studio 3.0 canary 3
ถึง

1
@Stephan Henningsen ไม่แน่ใจว่าฉันทำอะไรผิดแม้ว่าฉันจะใช้ SDK เครื่องมือและ libs ในเวอร์ชัน 26.X. ฉันได้แก้ไขข้อผิดพลาดด้วยตัวเองแล้วโดยเพียงแค่ปิดใช้งาน aapt2 โดยการตั้งค่าandroid.enableAapt2(หรือคล้ายกัน) falseในgradle.propertiesไฟล์. ขอบคุณมากสำหรับคำตอบที่เป็นประโยชน์ :)
Maxr1998

33

ฉันแก้ไขปัญหานี้โดยการเพิ่มบรรทัดต่อไปนี้ในไฟล์ gradle.properties

android.enableAapt2=false

2
ฉันคิดว่าคำตอบนี้สมควรได้รับคำอธิบาย
ksugiarto

คำตอบนี้ช่วยได้ แต่ไม่สามารถแก้ปัญหาได้เพียงแค่ปิดโมดูลการไล่ระดับที่เป็นสาเหตุหากคุณต้องการ aapt2 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และเพิ่มประเภทหน่วยเช่น:

<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

นั่นไม่สมเหตุสมผลเลย หากคุณไม่มีที่เก็บเมื่อคุณต้องการคุณจะไม่ได้รับเท่าที่รวมทรัพยากร การสร้างจะล้มเหลวโดยขาดการอ้างอิง หากคุณไม่ต้องการที่เก็บการระบุจะไม่เปลี่ยนแปลงอะไรเลย OP จะไม่ได้รับขั้นตอนการสร้างมากนักหากยังไม่ได้รวมการอ้างอิง google maven repo ไว้ในโครงการ คำตอบของคุณไม่สามารถแก้ปัญหาได้ คุณต้องทำการเปลี่ยนแปลงอื่น ๆ ด้วย
Eugen Pechanec

-6

ไลบรารีที่จำเป็นสำหรับเครื่อง 64 บิต:

หากคุณใช้ Ubuntu เวอร์ชัน 64 บิตคุณต้องติดตั้งไลบรารี 32 บิตด้วยคำสั่งต่อไปนี้:

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

หากคุณใช้งาน Fedora 64 บิตคำสั่งคือ:

sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686

ฉันไม่เห็นว่าการติดตั้งแพ็คเกจเหล่านี้ควรแก้ไขปัญหาใน OP อย่างไร ปัญหานี้เกี่ยวข้องกับวิธีการบีบอัดที่ยุบตัวอย่างไร? ฉันไม่ได้มี lib32z1 ติดตั้งตัวเองและการติดตั้งของฉันทำงานหลังจากใช้นี้stackoverflow.com/a/44304075/2412477 ; ฉันแนะนำให้ทุกคนลองก่อนติดตั้งแพ็คเกจที่อาจไม่จำเป็น
Stephan Henningsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.