Biên dịch AAPT2 không thành công: dimen không hợp lệ trên Android 3.0 Canary 1


88

Tôi đang chơi với Ứng dụng tức thì cho Android. Tôi đã cài đặt tất cả các gói chính xác và mệt mỏi để tạo Ứng dụng mới với hỗ trợ Ứng dụng tức thì (đã chọn hộp Ứng dụng tức thì khi tạo ứng dụng mới). Vấn đề là tôi luôn gặp sự cố với các công cụ biên dịch. Có ai khác gặp sự cố này không và có thể tìm thấy bất kỳ giải pháp nào.

Môi trường của tôi:

  • Android Studio 3.0 Canary 1
  • Biên dịch SDK: 25
  • Công cụ xây dựng: "26.0.0 rc2"
  • Plugin Gradle: 3.0.0-alpha1
  • Gradle: đã thử cả gradle-4.0-mốc 1 và 2
  • Java 1.8 / 1.7
  • Hệ điều hành: đã thử cả Windows 10 và Linux Ubuntu 16.4 LTS

Lỗi:

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

Dòng được đề cập chứa (520):

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

Hy vọng rằng tôi đã cung cấp đủ thông tin cho bạn để giải quyết vấn đề. Cảm ơn bạn.


4
Như một giải pháp để làm cho bản dựng hoạt động, tôi hiện đã vô hiệu hóa aapt2 và nó hoạt động để thử nghiệm bản dựng ... bạn có thể làm điều đó bằng cách đặt android.enableAapt2 = false trong tệp gradle.properties của bạn. Tôi nghĩ rằng đó có thể là một lỗi của studio không chắc chắn ...
BruceWayne

Giải pháp khác là stackoverflow.com/a/33943562/5125608 Nó phù hợp với tôi.
anlijudavid

5
Phiên bản canary mới nhất của FYI, 5, được phát hành và Google đã đề cập bên dưới rằng họ vẫn gặp sự cố với AAPT2 này như sau, AAPT2. Chúng tôi đang tiếp tục ổn định AAPT2 cho phép xử lý tài nguyên gia tăng. Nếu bản dựng của bạn không thành công do sự cố xử lý tài nguyên, vui lòng gửi báo cáo lỗi cho chúng tôi. Để tạm thời vô hiệu AAPT, hãy đặt android.enableAapt2 = false trong tệp gradle.properties của bạn. Roboelectric hiện không tương thích với AAPT2
Infinite Loops

Câu trả lời:


57

Cách giải quyết là chuyển máy phát triển của bạn sang ngôn ngữ sử dụng "." dưới dạng dấu thập phân.

Nó có thể được thay đổi theo cách sau:

nhập mô tả hình ảnh ở đây


6
Điều này đã làm việc cho tôi. Áp dụng trên toàn hệ thống là không cần thiết. Nhưng khởi động lại Android-Studio là không đủ. Bạn cần đăng xuất và đăng nhập lại (hoặc khởi động lại hệ thống của bạn) để thực hiện các thay đổi hoạt động cho bản dựng gradle.
Salim

14
Nó hoạt động! Đối với linux, bạn nên làm: export LC_NUMERIC = "en_US.UTF-8" và sau đó khởi động Android Studio trong cùng một lời nhắc
sposnjak

17
Tôi đã thêm export LC_NUMERIC = "en_US.UTF-8" vào đầu studio.sh của mình và nó hoạt động tốt. Tôi chắc chắn sẽ không thay đổi ngôn ngữ toàn hệ thống của mình chỉ để khắc phục một số lỗi.
rzehan

7
... w? Đề xuất ai đó thay đổi ngôn ngữ trên toàn hệ thống của họ chỉ vì một lỗi trong một ứng dụng là điều điên rồ. Nó sẽ ảnh hưởng đến cách ngày của bạn được định dạng, ví dụ như trong ứng dụng email, thậm chí cả ngôn ngữ và khá nhiều thứ khác nữa.
Stephan Henningsen

2
Tôi đang ở trên cửa sổ. Bất kỳ đề xuất?
dùng2520215

106

Dưới đây là bốn giải pháp khác nhau được đề cập : A, B, C và D; chọn một cái phù hợp với bạn:

A) Sửa Android Studio thông qua tệp trình khởi chạy Ubuntu .desktop

Đây là một giải pháp thay thế chỉ dành cho Ubuntu cho cách tiếp cận chung về Khắc phục sự cố Android Studio (xem bên dưới). Lưu ý rằng bạn có thể vẫn muốn thực hiện phần về Sửa lỗi và thậm chí có thể hoàn nguyên bất kỳ sửa đổi nào studio.shđể xác nhận hoàn toàn việc sửa chữa này.

Tôi cảm thấy mệt mỏi với việc vá lỗi studio.shcho mỗi bản cập nhật canary, vì vậy tôi đã đưa ra một giải pháp tốt hơn loại bỏ bước này. Nó hoạt động trên Ubuntu và chỉ liên quan đến việc tạo một trình khởi chạy .desktop đặt biến môi trường bị bệnh đang được đề cập.

  1. Hãy ghi nhớ nơi bạn Android Studio 3 được cài đặt, ví dụ ~/opt/android-studio-3.

  2. Chuẩn bị biểu tượng cục bộ và thư mục ứng dụng của bạn, trong trường hợp chưa tồn tại:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
  3. Tạo biểu tượng Android Studio 3 sẽ làm cho trình khởi chạy của bạn nổi bật so với biểu tượng mặc định và lưu nó vào ~/.local/share/icons/android-studio-3.png. Hoặc bạn có thể sử dụng cái tôi đã làm bằng cách chà một miếng pho mát lên bản gốc ( ~/opt/android-studio-3/bin/studio.png):

    android-studio-3.png

  4. Tạo tệp trình khởi chạy Android Studio 3 bằng cách sao chép và dán tệp này vào trình bao:

    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. Làm cho nó có thể thực thi:

    chmod +x ~/.local/share/applications/android-studio-3.desktop
  6. Bây giờ cho một phần khó khăn. Lý tưởng nhất là bạn có thể tìm, bắt đầu và tạo các đoạn ngắn cho Android Studio 3 từ Dash:

Cho niềm vui của bạn

Nhưng về mặt cá nhân, tôi hầu như luôn gặp sự cố khi Ubuntu phát hiện các tệp .desktop mới hoặc đã thay đổi của tôi. Một giải pháp là đăng xuất và đăng nhập lại. Nếu ai biết cách buộc quét lại, xin vui lòng cho tôi biết!

B) Sửa lỗi tập lệnh khởi động Android Studio

Đây là một cách khắc phục dễ dàng, thanh lịch và bán vĩnh viễn: Chỉ thay đổi ngôn ngữ của chính Android Studio bằng cách sửa đổi tập lệnh khởi động của nó:

  1. Chỉnh sửa studio.shví dụ ~/opt/android-studio/bin/studio.shhoặc bất kỳ đường dẫn cài đặt của bạn có thể là.

  2. Ở một nơi nào đó ở đầu tệp, bên dưới #!/bin/shvà trước khi các dòng mã đầu tiên xuất hiện, hãy thêm đoạn mã này:

    LC_NUMERIC="en_US.UTF-8".

    Đây là phần hàng đầu của tôi studio.shvề sự hoàn chỉnh:

    #!/bin/sh
    #
    # ---------------------------------------------------------------------
    # Android Studio startup script.
    # ---------------------------------------------------------------------
    #
    
    LC_NUMERIC="en_US.UTF-8"
    
    message()
    {
      TITLE="Cannot start Android Studio"
    ...
  3. Khởi động lại Android Studio

Lưu ý khi nâng cấp Android Studio hoặc Gradle

Khi bạn nâng cấp cài đặt Android Studio sau này, nó sẽ phát hiện ra rằng bạn đã sửa đổi studio.sh. Bạn nên để trình cài đặt thay thế tệp và sau đó thực hiện lại bản vá như mô tả ở trên. Cuối cùng khởi động lại Android Studio và bạn sẽ sẵn sàng trở lại. Các giải pháp khác không bị ảnh hưởng bởi điều này.

C) Sửa chữa vỏ; Gradle, Jenkins, tất cả những điều đó

Xây dựng từ vỏ bằng cách sử dụng gradlewcũng yêu cầu sửa chữa được áp dụng. Điều này chỉ ảnh hưởng đến shell chứ không ảnh hưởng đến Android Studio. Chọn một:

  1. Chỉ định bản sửa lỗi cho mọi lời gọi như thế này:

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

  2. Hoặc để đặt nó vĩnh viễn cho dự án , hãy chỉnh sửa gradlewtệp trong thư mục gốc của dự án và ở đâu đó ở trên cùng, hãy thêm tệp này:

    LC_NUMERIC="en_US.UTF-8"

    Như đây:

    #!/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. Hoặc bạn có thể dĩ nhiên cũng thêm một sửa chữa toàn cầu và vĩnh viễn mặc dù việc sử dụng một bí danh, 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

    Lưu ý rằng đây là cách các bí danh bash shell được thêm vào Ubuntu; nếu bạn đang sử dụng một hệ điều hành khác, có lẽ bạn nên thêm vào ~ / .bashrc hoặc ~ / .profile để thay thế.

    Sau đó, bắt đầu một trình bao mới và bây giờ thay vì gọi, hãy ./gradlewsử dụng bí danh mới gr:

    gr clean assDebug

Nhược điểm rõ ràng của # 2 là điều này phải được áp dụng cho tất cả các dự án theo cách thủ công. Ưu điểm, tôi nghĩ, là điều này sẽ tự động được ghi đè khi một gradlew mới được cài đặt, giống như studio.shđược thay thế, vì vậy bạn có thể kiểm tra xem lỗi đã được sửa chưa =)

D) Vô hiệu hóa tất cả APPT2 cùng nhau

Cá nhân tôi sẽ không làm điều này, nhưng tôi đã thêm nó cho hoàn chỉnh vì nó chắc chắn là một cách để khiến appt2 ngừng đưa ra lỗi. Thêm dòng này vào gradle.properties:android.enableAapt2=false


10
đây có vẻ là một giải pháp tốt hơn nhiều so với câu trả lời được chấp nhận
lelloman

2
Vì một số lý do điều này không làm việc cho tôi. Tôi đã nhận Android Studio 3.0 Canary 3 và sau khi thiết lập tất cả điều này, sự cố hợp nhất vẫn tiếp diễn. Ngôn ngữ của tôi là en_US.UTF-8
vladaman

1
Tôi chỉ cập nhật để chim hoàng yến 3 và trở về đây để sao chép dán một lần nữa, nó vẫn còn làm việc cho tôi
lelloman

1
@vladaman Cách này sửa lỗi dấu phẩy động rõ ràng, tuy nhiên Android Studio 3.0 canary 3 vẫn nghiêm ngặt hơn trước và một số lỗi trong tệp tài nguyên của bạn mà trước đây được chấp nhận sẽ gây ra lỗi hợp nhất. Lưu ý rằng tính đến ngày hôm nay, xem trước thư viện thiết kế được nghe trộm và sẽ không xây dựng trên Android Studio 3.0 chim hoàng yến 3.
aberaud

1
@Stephan Henningsen không chắc mình đã làm gì sai, mặc dù thực sự tôi đang sử dụng SDK, công cụ và libs trong phiên bản 26.X. Tôi đã tự mình sửa lỗi bằng cách vô hiệu hóa aapt2 bằng cách đặt android.enableAapt2(hoặc tương tự) thành falsetrong của tôi gradle.properties. Cảm ơn rất nhiều cho câu trả lời nào hữu ích :)
Maxr1998

33

Tôi đã giải quyết vấn đề này bằng cách thêm dòng sau vào tệp gradle.properties

android.enableAapt2=false

2
Tôi nghĩ câu trả lời này xứng đáng được giải thích.
ksugiarto

Câu trả lời này đã giúp nhưng không giải quyết vấn đề này chỉ tắt module gradle gây ra nó, nếu bạn cần aapt2 sau đó chắc chắn thêm export LC_NUMERIC="en_US.UTF-8"để .bashrc của bạn mà làm việc như sự quyến rũ đối với tôi
lukassos

1
người dùng MAC OS thì sao?
HendraWD

Tôi đang phát triển trong môi trường windows, tôi cần thay đổi gì cho điều này?
Mehbube Arman

android.enableAapt2 = false không được dùng nữa và sẽ bị xóa vào cuối năm 2018.
XurajB 27/09/18

1

Sự cố này đã được khắc phục trong phiên bản ổn định Android Studio mới nhất. Nâng cấp Android Studio lên 3.0 sẽ giải quyết được vấn đề này cho bạn (cũng không cần phải tắt AAPT2).


0

Đảm bảo rằng bạn không thêm bất kỳ đơn vị (dp) nào khi sử dụng format="float"

Tôi cũng gặp phải vấn đề tương tự vì tôi đã tự động tạo kích thước bằng Android Studio bằng cách sử dụng Android Studio Extract dimen resourcevà nó đã thêm loại đơn vị như:

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

Nó phải là:

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


-6

thêm vào

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

để kho lưu trữ hoạt động cho tôi


@EugenPechanec Có
Romuald DANSOU

Điều đó không có ý nghĩa gì. Nếu bạn thiếu kho lưu trữ khi bạn cần, bạn sẽ không nhận được nhiều tài nguyên hợp nhất. Xây dựng sẽ không thành công với các phụ thuộc bị thiếu. Nếu bạn không cần kho lưu trữ, thì việc chỉ định nó sẽ không thay đổi được gì. OP sẽ không đạt được điều này xa trong quá trình xây dựng nếu họ chưa bao gồm tham chiếu repo google maven trong dự án của họ. Câu trả lời của bạn không cung cấp giải pháp cho vấn đề trong tầm tay. Bạn cũng phải thực hiện các thay đổi khác.
Eugen Pechanec

-6

Thư viện bắt buộc cho máy 64 bit:

Nếu bạn đang chạy phiên bản Ubuntu 64 bit, bạn cần cài đặt một số thư viện 32 bit bằng lệnh sau:

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

Nếu bạn đang chạy Fedora 64-bit, lệnh là:

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

Tôi không thấy cách cài đặt các gói này sẽ khắc phục sự cố ngay trong OP. Làm thế nào vấn đề này liên quan đến một phương pháp nén xì hơi? Tôi thậm chí chưa tự cài đặt lib32z1 và cài đặt của tôi hoạt động sau khi áp dụng stackoverflow.com/a/44304075/2412477 này ; Tôi khuyên mọi người nên thử điều đó trước khi cài đặt các gói có thể không cần thiết.
Stephan Henningsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.