Compilazione AAPT2 non riuscita: dimensione non valida su Android 3.0 Canary 1


88

Sto giocando con le app istantanee per Android, ho installato tutti i pacchetti corretti e sono stanco di creare una nuova applicazione con supporto per l'app istantanea (selezionata la casella per l'app istantanea quando creo una nuova applicazione). Il problema è che mi imbatto sempre in un problema con gli strumenti di compilazione. Qualcun altro ha questo problema ed è stato in grado di trovare una soluzione alternativa.

Il mio ambiente:

  • Android Studio 3.0 Canary 1
  • Compilare SDK: 25
  • Strumenti di compilazione: "26.0.0 rc2"
  • Plugin Gradle: 3.0.0-alpha1
  • Gradle: provato sia gradle-4.0-milestone1 che 2
  • Java 1.8 / 1.7
  • Sistema operativo: ho provato sia Windows 10 che Linux Ubuntu 16.4 LTS

L'errore:

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

La riga in questione contiene (520):

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

Spero di averti fornito informazioni sufficienti per risolvere il problema. Grazie.


4
Come soluzione alternativa per far funzionare la build, al momento ho disabilitato aapt2 e funziona per testare la build ... puoi farlo impostando android.enableAapt2 = false nel tuo file gradle.properties. Penso che potrebbe essere un bug dello studio non sono sicuro ...
BruceWayne

Un'altra soluzione è stackoverflow.com/a/33943562/5125608 Funziona per me.
anlijudavid

5
Cordiali saluti, l'ultima build canary, 5, è stata rilasciata e Google ha menzionato di seguito che hanno ancora problemi con questo AAPT2 come segue, AAPT2. Stiamo continuando a stabilizzare AAPT2 che consente l'elaborazione incrementale delle risorse. Se la tua build fallisce a causa di un problema di elaborazione delle risorse, inviaci una segnalazione di bug. Per disabilitare temporaneamente AAPT, imposta android.enableAapt2 = false nel tuo file gradle.properties. Roboelectric non è attualmente compatibile con AAPT2
Infinite Loops

Risposte:


57

La soluzione alternativa consiste nel cambiare la macchina di sviluppo in una locale che utilizza "." come segno decimale.

Può essere modificato nel modo seguente:

inserisci qui la descrizione dell'immagine


6
Questo ha funzionato per me. L'applicazione a livello di sistema non era necessaria. Ma riavviare Android-Studio non è sufficiente. È necessario disconnettersi e accedere di nuovo (o riavviare il sistema) per rendere attive le modifiche per gradle build.
Salim

14
Funziona! Per Linux dovresti: esportare LC_NUMERIC = "en_US.UTF-8" e quindi avviare Android Studio nello stesso prompt
sposnjak

17
Ho aggiunto export LC_NUMERIC = "en_US.UTF-8" all'inizio del mio studio.sh e funziona bene. Certamente non cambierei le impostazioni locali del mio sistema solo per aggirare qualche bug.
rzehan

7
... cosa? Consigliare a qualcuno di cambiare la propria localizzazione a livello di sistema solo a causa di un bug in un'app è folle. Avrà un impatto sulla formattazione della data, ad esempio nei client di posta elettronica, persino sulla lingua e praticamente su tutto il resto.
Stephan Henningsen

2
Bene, sono su Windows. Eventuali suggerimenti?
user2520215

106

Di seguito sono menzionate quattro diverse soluzioni: A, B, C e D; scegli quello che ti si addice:

A) Correzione di Android Studio tramite il file di avvio .desktop di Ubuntu

Questa è un'alternativa solo per Ubuntu all'approccio generale sulla correzione di Android Studio (vedi sotto). Tieni presente che potresti comunque voler implementare la parte relativa alla correzione della shell e forse anche ripristinare le modifiche a studio.shper confermare completamente questa correzione.

Mi sono stancato di riparare il mio studio.shper ogni aggiornamento canarino, quindi ho trovato una soluzione migliore che elimina questo passaggio. Funziona su Ubuntu e implica semplicemente la creazione di un launcher .desktop che imposta la variabile di ambiente malata in questione.

  1. Prendi nota di dove è installato Android Studio 3, ad es ~/opt/android-studio-3.

  2. Prepara la tua icona locale e la directory delle applicazioni, nel caso in cui non esistano già:

    mkdir -vp ~/.local/share/icons ~/.local/share/applications
  3. Crea un'icona di Android Studio 3 che farà risaltare il tuo launcher rispetto all'icona predefinita e salvalo in ~/.local/share/icons/android-studio-3.png. Oppure puoi usare quello che ho fatto strofinando un pezzo di formaggio sull'originale ( ~/opt/android-studio-3/bin/studio.png):

    android-studio-3.png

  4. Crea un file di avvio di Android Studio 3 copiandolo e incollandolo in una 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. Rendilo eseguibile:

    chmod +x ~/.local/share/applications/android-studio-3.desktop
  6. Ora per la parte difficile. Idealmente dovresti essere in grado di trovare, avviare e creare cortometraggi per Android Studio 3 dal Dash:

Per il tuo piacere

Ma personalmente, ho quasi sempre problemi a far rilevare a Ubuntu i miei file .desktop nuovi o modificati. Una soluzione è disconnettersi e accedere nuovamente. Se qualcuno sa come forzare una nuova scansione per favore fatemelo sapere!

B) Correzione dello script di avvio di Android Studio

Ecco una soluzione semplice, elegante e semipermanente: cambia solo la locale di Android Studio stesso modificando il suo script di avvio:

  1. Modifica studio.shad esempio ~/opt/android-studio/bin/studio.sho qualunque sia il percorso di installazione.

  2. Da qualche parte all'inizio del file, sotto #!/bin/she prima che appaiano le prime righe di codice, aggiungi questo:

    LC_NUMERIC="en_US.UTF-8".

    Ecco la parte superiore del mio studio.shper completezza:

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

Una nota sull'aggiornamento di Android Studio o Gradle

Quando successivamente aggiorni l'installazione di Android Studio, rileverà che hai modificato studio.sh. Dovresti lasciare che il programma di installazione sostituisca il file e successivamente eseguire nuovamente la patch come descritto sopra. Infine riavvia Android Studio e sarai di nuovo pronto. Le altre soluzioni non ne risentono.

C) Fissaggio del guscio; Gradle, Jenkins, tutto questo

Anche la compilazione dalla shell utilizzando gradlewrichiede l'applicazione della correzione. Ciò riguarda solo la shell e non Android Studio. Sceglierne uno:

  1. O specifica la correzione su ogni chiamata in questo modo:

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

  2. Oppure per renderlo permanente per il progetto , modifica il gradlewfile nella radice del progetto e da qualche parte in alto aggiungi questo:

    LC_NUMERIC="en_US.UTF-8"

    Come qui:

    #!/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. Oppure si può naturalmente anche aggiungere una correzione globale e permanente anche se l'uso di un 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

    Nota questo è il modo in cui gli alias della shell bash vengono aggiunti su Ubuntu; se sei su un sistema operativo diverso forse dovresti aggiungere a ~ / .bashrc o ~ / .profile invece.

    Quindi avvia una nuova shell e ora invece di invocare ./gradlewusa il nuovo alias gr:

    gr clean assDebug

Il chiaro svantaggio di # 2 è che questo deve essere applicato a tutti i progetti manualmente. Il vantaggio, penso, è che questo verrà automaticamente sovrascritto quando viene installato un nuovo gradlew, proprio come studio.shviene sostituito, quindi puoi verificare se il bug è stato risolto =)

D) Disabilitare APPT2 tutti insieme

Personalmente non lo farei, ma l'ho aggiunto per completezza poiché è sicuramente un modo per fare in modo che appt2 smetta di dare errori. Aggiungi questa riga a gradle.properties:android.enableAapt2=false


10
questa sembra una soluzione molto migliore rispetto alla risposta accettata
lelloman

2
Per qualche motivo questo non funziona per me. Ho Android Studio 3.0 Canary 3 e dopo aver impostato tutto questo il problema di unione persiste. La mia localizzazione è en_US.UTF-8
vladaman

1
Ho appena aggiornato a canary 3 e sono tornato qui per copiare di nuovo incolla, per me funziona ancora
lelloman

1
@vladaman Questo risolve l'evidente bug in virgola mobile, tuttavia Android Studio 3.0 canary 3 è ancora più rigoroso di prima e alcuni bug nei file di risorse che erano precedentemente accettati ora causeranno un errore di unione. Si noti che a partire da oggi, l'anteprima della libreria di progettazione è soggetta a bug e non verrà sviluppata su Android Studio 3.0 canary 3.
aberaud

1
@Stephan Henningsen non è sicuro di cosa avrei potuto fare di sbagliato, anche se in realtà sto usando l'SDK, gli strumenti e le librerie nella versione 26.X. Ho già corretto l'errore da solo disabilitando aapt2 impostando android.enableAapt2(o simile) falsein mio gradle.properties. Grazie mille per la risposta utile comunque :)
Maxr1998

33

Ho risolto questo problema aggiungendo la seguente riga ai file gradle.properties

android.enableAapt2=false

2
Penso che questa risposta meriti la sua spiegazione.
ksugiarto

questa risposta ha aiutato ma non risolve il problema, spegne semplicemente il modulo gradle che lo ha causato, se hai bisogno di aapt2, aggiungilo sicuramente export LC_NUMERIC="en_US.UTF-8"al tuo .bashrc che ha funzionato a
meraviglia

1
che dire degli utenti del sistema operativo MAC?
HendraWD

Sto sviluppando in un ambiente Windows, di quali modifiche ho bisogno per questo?
Mehbube Arman

android.enableAapt2 = false è stato deprecato e verrà rimosso entro la fine del 2018.
XurajB,

1

Questo problema è stato risolto nella più recente stalla di Android Studio. L'aggiornamento del tuo Android Studio a 3.0 dovrebbe risolvere questo problema (inoltre non è necessario disabilitare AAPT2).


0

Assicurati di non aggiungere unità (dp) durante l'utilizzo format="float"

Stavo affrontando lo stesso problema perché ho generato automaticamente i dimens utilizzando Android Studio utilizzando Extract dimen resourcee ha aggiunto un tipo di unità come:

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

Dovrebbe essere:

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


-6

Inserisci

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

ai repository funzionano per me


@EugenPechanec Sì
Romuald DANSOU

Non ha alcun senso. Se ti mancava il repository quando ne avevi bisogno, non saresti arrivato fino alla fusione delle risorse. La compilazione fallirebbe con le dipendenze mancanti. Se non avessi bisogno del repository, averlo specificato non cambierebbe nulla. OP non sarebbe arrivato così lontano nel processo di creazione se non avessero già incluso il riferimento al repository di Google Maven nel loro progetto. La tua risposta non fornisce una soluzione al problema in questione. Devi aver apportato anche altre modifiche.
Eugen Pechanec

-6

Librerie richieste per macchine a 64 bit:

Se stai utilizzando una versione a 64 bit di Ubuntu, devi installare alcune librerie a 32 bit con il seguente comando:

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

Se stai utilizzando Fedora a 64 bit, il comando è:

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

Non vedo come l'installazione di questi pacchetti dovrebbe risolvere il problema in questione nell'OP. In che modo questo problema è correlato a un metodo di compressione sgonfio? Non ho nemmeno installato lib32z1 e la mia installazione funziona dopo aver applicato questo stackoverflow.com/a/44304075/2412477 ; Consiglio a chiunque di provarlo prima di installare pacchetti potenzialmente non necessari.
Stephan Henningsen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.