AAPT2 संकलन विफल: Android 3.0 कैनरी 1 पर अमान्य डिमेन


88

मैं एंड्रॉइड के लिए इंस्टेंट एप्स के साथ खेल रहा हूं। मैंने सभी सही पैकेजों को स्थापित किया और इंस्टेंट एप सपोर्ट के साथ नया एप्लिकेशन बनाने के लिए थक गया (नए एप्लिकेशन को देखते हुए इंस्टेंट एप के लिए बॉक्स की जांच की)। समस्या यह है कि मैं हमेशा संकलन उपकरणों के साथ एक समस्या में भागता हूं। क्या किसी और को यह समस्या है और वह किसी भी समाधान को खोजने में सक्षम था।

मेरा वातावरण:

  • एंड्रॉइड स्टूडियो 3.0 कैनरी 1
  • संकलन SDK: 25
  • बिल्ड टूल्स: "26.0.0 rc2"
  • ग्रेड प्लगइन: 3.0.0-Alpha1
  • ग्रेडल: ग्रेड-4.0-मील का पत्थर 1 और 2 दोनों की कोशिश की
  • जावा 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 करके सेट कर सकते हैं। मुझे लगता है कि यह एक स्टूडियो बग नहीं हो सकता है ...
ब्रूसवेने

अन्य समाधान है stackoverflow.com/a/33943562/5125608 यह मेरे लिए काम करता है।
एलीज़ुदविद

5
FYI करें नवीनतम कैनरी बिल्ड, 5 जारी किया गया है और Google ने नीचे उल्लेख किया है कि वे अभी भी इस AAPT2 के साथ समस्या का पालन करते हैं, AAPT2। हम AAPT2 को स्थिर करना जारी रख रहे हैं जो वृद्धिशील संसाधन प्रसंस्करण को सक्षम बनाता है। यदि संसाधन निर्माण समस्या के कारण आपका निर्माण विफल हो जाता है, तो कृपया हमें एक बग रिपोर्ट भेजें। AAPT को अस्थायी रूप से अक्षम करने के लिए, अपने gradle.properties फ़ाइल में android.enableAapt2 = false सेट करें। रोबोइलेक्ट्रिक वर्तमान में AAPT2
अनंत लूप्स

जवाबों:


57

वर्कअराउंड आपके डेवलपमेंट मशीन को एक लोकेल पर स्विच करना है जो "का उपयोग करता है।" दशमलव चिह्न के रूप में।

इसे निम्न तरीके से बदला जा सकता है:

यहाँ छवि विवरण दर्ज करें


6
इसने मेरे लिए काम किया। सिस्टम-वाइड लागू करना आवश्यक नहीं था। लेकिन एंड्रॉइड-स्टूडियो को पुनरारंभ करना पर्याप्त नहीं है। ढाल निर्माण के लिए परिवर्तनों को सक्रिय करने के लिए आपको फिर से लॉग-आउट और लॉग-इन (या अपने सिस्टम को पुनरारंभ करना) की आवश्यकता है।
सलीम

14
यह काम करता हैं! Linux के लिए आपको क्या करना चाहिए: LC_NUMERIC = "en_US.UTF-8" निर्यात करें और फिर उसी प्रॉम्प्ट में Android Studio शुरू करें
sposnjak

17
मैंने अपने स्टूडियो की शुरुआत में LC_NUMERIC = "en_US.UTF-8" एक्सपोर्ट जोड़ा और यह ठीक काम करता है। मैं निश्चित रूप से कुछ बग के आसपास काम करने के लिए अपने सिस्टम के विस्तृत लोकेल को नहीं बदलूंगा।
रेज़िहान

7
... वाट? किसी को एक ऐप में एक बग के कारण अपने सिस्टम के विस्तृत लोकेल को बदलने की सिफारिश करना पागल है। यह प्रभावित करेगा कि कैसे आपकी तिथि ईमेल क्लाइंट्स, जैसे भाषा और बहुत अधिक सब कुछ में भी स्वरूपित है।
स्टीफन हेन्सिंगेन

2
वैसे मैं खिड़कियों पर हूँ। कोई सुझाव?
user2520215

106

नीचे चार अलग-अलग समाधानों का उल्लेख किया गया है : ए, बी, सी और डी; जो आपको सूट करता है, उसे चुनें:

ए) उबंटू .desktop लांचर फ़ाइल के माध्यम से एंड्रॉइड स्टूडियो को ठीक करना

यह फिक्सिंग एंड्रॉइड स्टूडियो पर सामान्य दृष्टिकोण के लिए केवल उबंटू-विकल्प है (नीचे देखें)। ध्यान दें कि आप अभी भी शेल को ठीक करने के बारे में भाग को लागू करना चाहते हैं , और शायद studio.shइस सुधार की पूरी तरह से पुष्टि करने के लिए किसी भी संशोधन को वापस कर दें।

मैं studio.shहर कैनरी अपडेट के लिए अपनी थपथपाहट से थक गया , इसलिए मैं एक बेहतर समाधान के साथ आया जो इस कदम को समाप्त करता है। यह उबंटू पर काम करता है और इसमें एक .desktop लांचर बनाना शामिल है जो कि बीमार पर्यावरण चर को प्रश्न में सेट करता है।

  1. नोट करें कि आपका Android Studio 3 कहां स्थापित है, जैसे ~/opt/android-studio-3

  2. पहले से मौजूद न होने की स्थिति में अपने स्थानीय आइकन और एप्लिकेशन निर्देशिका तैयार करें:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
    
  3. एक एंड्रॉइड स्टूडियो 3 आइकन बनाएं जो आपके लॉन्चर को डिफ़ॉल्ट आइकन से बाहर खड़ा कर देगा और इसे सहेज देगा ~/.local/share/icons/android-studio-3.png। या आप मूल चीज़ पर पनीर के टुकड़े को रगड़कर मेरे द्वारा बनाए गए का उपयोग कर सकते हैं ( ~/opt/android-studio-3/bin/studio.png):

    एंड्रॉयड स्टूडियो-3.png

  4. इसे शेल में कॉपी और पेस्ट करके एक एंड्रॉइड स्टूडियो 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. अब मुश्किल भाग के लिए। आदर्श रूप से आपको डैश से एंड्रॉइड स्टूडियो 3 के लिए शॉर्ट्स खोजने, शुरू करने और बनाने में सक्षम होना चाहिए:

आपके आनंद के लिए

लेकिन व्यक्तिगत रूप से, मुझे अपनी नई या बदली हुई .desktop फ़ाइलों का पता लगाने के लिए लगभग उबंटू आने में हमेशा परेशानी होती है। एक समाधान के लिए लॉग आउट और फिर से वापस करना है। अगर किसी को पता है कि रेसकान को कैसे मजबूर किया जाए तो कृपया मुझे बताएं!

बी) फिक्सिंग एंड्रॉइड स्टूडियो शुरू स्क्रिप्ट

यहाँ एक आसान, सुरुचिपूर्ण और अर्ध-स्थाई फ़िक्स है: केवल अपने स्टार्टअप स्क्रिप्ट को संशोधित करके 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 को पुनरारंभ करें

एंड्रॉइड स्टूडियो या ग्रेडेल को अपग्रेड करने पर एक नोट

जब आप बाद में अपने एंड्रॉइड स्टूडियो इंस्टॉलेशन को अपग्रेड करते हैं, तो यह पता लगाएगा कि आपने संशोधित किया है studio.sh। आपको इंस्टॉलर को फ़ाइल को बदलने देना चाहिए, और बाद में ऊपर वर्णित अनुसार फिर से पैच प्रदर्शन करना चाहिए। अंत में एंड्रॉइड स्टूडियो को पुनरारंभ करें, और आप फिर से तैयार होंगे। अन्य समाधान इससे प्रभावित नहीं हैं।

सी) खोल को ठीक करना; ग्रैडल, जेनकिंस, वह सब

उपयोग करने वाले शेल से बिल्डिंग को gradlewभी ठीक करने की आवश्यकता होती है। यह केवल शेल को प्रभावित करता है न कि एंड्रॉइड स्टूडियो को। एक चुनें:

  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
    

    ध्यान दें कि कैसे उबास शेल उपनामों को उबंटू पर जोड़ा जाता है; यदि आप किसी भिन्न OS पर हैं, तो शायद आपको इसके बजाय ~ / .bashrc या ~ / .profile के लिए अपील करनी चाहिए।

    फिर एक नया शेल शुरू करें और अब ./gradlewनए उपनाम का उपयोग करने के बजाय gr:

    gr clean assDebug

# 2 का स्पष्ट नुकसान यह है कि इसे सभी परियोजनाओं पर मैन्युअल रूप से लागू किया जाना है। मुझे लगता है कि लाभ यह है कि जब एक नया ग्रेडलेव स्थापित किया studio.shजाता है, तो यह स्वचालित रूप से अधिलेखित हो जाएगा, बहुत कुछ प्रतिस्थापित हो जाता है, इसलिए यदि आप बग को ठीक कर दिया गया है तो परीक्षण करें =)

डी) APPT2 को एक साथ सभी को निष्क्रिय करना

व्यक्तिगत रूप से मैं ऐसा नहीं करूंगा, लेकिन मैंने इसे पूर्णता के लिए जोड़ा है क्योंकि यह निश्चित रूप से appt2 को गलतियां देने से रोकने का एक तरीका है। इस लाइन को अपने में जोड़ें gradle.properties:android.enableAapt2=false


10
यह स्वीकार किए गए उत्तर की तुलना में बहुत बेहतर समाधान है
lelloman

2
किसी कारण से यह मेरे लिए काम नहीं करता है। मुझे एंड्रॉइड स्टूडियो 3.0 कैनरी 3 मिला और यह सब सेट करने के बाद मर्ज की समस्या बनी रहती है। मेरा स्थान
en_US.UTF

1
मैं सिर्फ कैनरी 3 में अपडेट हुआ और यहाँ फिर से कॉपी पेस्ट करने के लिए आया, यह अभी भी मेरे लिए काम कर रहा है
lelloman

1
@vladaman यह स्पष्ट फ़्लोटिंग पॉइंट बग को ठीक करता है, हालाँकि Android Studio 3.0 कैनरी 3 अभी भी पहले की तुलना में सख्त है, और आपके संसाधन फ़ाइलों में कुछ कीड़े जहाँ पहले स्वीकार किए जाते हैं अब एक मर्ज त्रुटि का कारण होगा। ध्यान दें कि आज के अनुसार, डिज़ाइन लाइब्रेरी का पूर्वावलोकन
खराब हो

1
@ स्टेफ़ेन हेन्निंगसन को यकीन नहीं है कि मैं क्या गलत कर सकता था, हालांकि मैं वास्तव में संस्करण 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
मैक ओएस उपयोगकर्ताओं के बारे में क्या?
हेंड्रडब्ल्यूडब्ल्यू

मैं एक विंडोज़ वातावरण में विकसित कर रहा हूं, इसके लिए मुझे क्या बदलाव चाहिए?
मेहबूब अरमान

android.enableAapt2 = असत्य निकाला जा रहा है और 2018 के अंत तक हटा दिया जाएगा।
XurajB

1

यह मुद्दा नवीनतम Android स्टूडियो में स्थिर किया गया है। अपने एंड्रॉइड स्टूडियो को 3.0 में अपग्रेड करना आपके लिए इस समस्या को हल करना चाहिए (AAPT2 को अक्षम करने की भी आवश्यकता नहीं है)।


0

सुनिश्चित करें कि आप उपयोग करते समय कोई इकाई (dp) नहीं जोड़ रहे हैं format="float"

मुझे उसी समस्या का सामना करना पड़ रहा था क्योंकि मैं एंड्रॉइड स्टूडियो का उपयोग करके ऑटो-जनरेट किए गए डिमेंस का उपयोग कर रहा था 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 हां
रोमेल्ड DANSOU

इसका कोई मतलब नहीं है। यदि आपको जरूरत पड़ने पर रिपॉजिटरी याद आ रही थी, तो आप संसाधनों को मर्ज करने से दूर नहीं होंगे। बिल्ड गुम निर्भरता के साथ विफल होगा। यदि आपको रिपॉजिटरी की आवश्यकता नहीं है, तो इसे निर्दिष्ट करने से कोई चीज़ नहीं बदलेगी। अगर यह पहले से ही अपने प्रोजेक्ट में google maven repo रेफरेंस को शामिल नहीं करता है तो OP को बिल्ड प्रोसेस में यह नहीं मिलेगा। आपका जवाब हाथ में समस्या का समाधान प्रदान नहीं करता है। आपने अन्य परिवर्तन भी किए होंगे।
यूजेन पिंचेक

-6

64-बिट मशीनों के लिए आवश्यक पुस्तकालय:

यदि आप उबंटू का 64-बिट संस्करण चला रहे हैं, तो आपको निम्नलिखित कमांड के साथ कुछ 32-बिट लाइब्रेरी स्थापित करने की आवश्यकता है:

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

यदि आप 64-बिट फेडोरा चला रहे हैं, तो कमांड है:

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

मैं यह नहीं देखता कि इन पैकेजों को स्थापित करने से ओपी में समस्या कैसे ठीक होनी चाहिए। यह समस्या अपस्फीति संपीड़न विधि से कैसे संबंधित है? मेरे पास भी lib32z1 स्वयं स्थापित नहीं है, और इस stackoverflow.com/a/44304075/2430477 को लागू करने के बाद मेरी स्थापना कार्य करती है ; मैं किसी को भी अनावश्यक पैकेज स्थापित करने से पहले कोशिश करने की सलाह देता हूं।
स्टीफन हेन्सिंगेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.