2015-10-25 11 views
9

Questo è molto strano. Oggi AS (1.4) arrestato correttamente ricreare l'apk di debug nel mio progetto:APK stallo per Android Studio per la variante di build dopo le modifiche xml

  • Qualsiasi XML cambia non si riflettono nel codice durante l'esecuzione del progetto di
  • Modifiche a codice Java, non soggiacciono, anche quando le modifiche XML non sono
  • La pulizia e quindi l'esecuzione di esecuzione sembra risolvere il problema, un APK aggiornato viene creato con successo ogni volta.
  • Ho due varianti di costruzione nel mio progetto, , questo problema interessa solo uno di loro.
  • Sto usando Genymotion, ma il problema esiste anche nell'emulatore e nell'hardware.
  • Sospetto che sia stato inserito un tipo di blocco nei file xml. Ad esempio, se rinominare un file e premere Esegui, le modifiche si propagano. Ma ispezionando R.java mostra le voci sia per il vecchio nome del file che per quello nuovo - il vecchio non viene semplicemente cancellato/aggiornato.
  • Il layout xml che sto testando con questo è ora stato ridotto a un layout relativo vuoto con un colore di sfondo. Il colore non viene aggiornato quando dovrebbe essere.

Non so molto del processo di compilazione, quindi tutto ciò che ho provato è l'eliminazione della cartella di costruzione, la reimportazione del progetto e il vecchio riavvio/annullamento della cache su Android Studio. Qualche suggerimento su cosa potrebbe causare questo strano comportamento o su come risolverlo?

Edit: E 'molto difficile da definire il comportamento alla base di questo - a volte ho notato in modo coerente che colpisce solo alcuni file XML. Sembra che questo ragazzo ha lo stesso problema: Android Studio project build issue

Ho passato un paio d'ore a reinstallare Android Studio da zero e il problema rimane ..

risposta

1

In realtà ho trovato il problema qui un po 'di tempo fa ed era piuttosto sottile. Il mio progetto ha creato varianti con un set sorgente principale e un set sorgente per ogni variante. E 'stato definito un po' come questo:

sourceSets { 

    def defaultDirectory = "src/main/" 
    def flavorADirectory = "src/flavor_a/" 

    flavor_a { 
     java.srcDirs = [defaultDirectory + 'java', flavorADirectory + 'java'] 
     res.srcDirs = [defaultDirectory + 'res', flavorADirectory + 'res'] 
     manifest.srcFile flavorADirectory + 'AndroidManifest.xml' 
    } 

    def flavorBDirectory = "src/flavor_b/" 

    flavor_b{ 
     java.srcDirs = [defaultDirectory + 'java', flavorBDirectory + 'java'] 
     res.srcDirs = [defaultDirectory + 'gift', flavorBDirectory + 'res'] 
     manifest.srcFile flavorBDirectory + 'AndroidManifest.xml' 
    } 
} 

Quindi le varianti compilati bene, ma ogni cambiamento XML è stato innescando una ricostruzione completa. Non sono sicuro del ragionamento esatto dietro di esso, ma credo che il principale sourceset debba essere specificato come entità separata. Android Studio deve vedere la parola chiave main e sapere meglio come comportarsi. Ciò significa che non v'è alcuna necessità di specificare la directory predefinita come parte di i set di origine accumulo variante Rimozione che in questo modo, rende il problema andare via e non ricostruisce più costante verifica:

sourceSets { 

    def defaultDirectory = "src/main/" 

    main { 
     java.srcDirs = [defaultDirectory + 'java'] 
     res.srcDirs = [defaultDirectory + 'res'] 
    } 

    def flavorADirectory = "src/flavor_a/" 

    flavor_a { 
     java.srcDirs = [flavorADirectory + 'java'] 
     res.srcDirs = [flavorADirectory + 'res'] 
     manifest.srcFile flavorADirectory + 'AndroidManifest.xml' 
    } 

    def flavorBDirectory = "src/flavor_b/" 

    flavor_b{ 
     java.srcDirs = [flavorBDirectory + 'java'] 
     res.srcDirs = [flavorBDirectory + 'res'] 
     manifest.srcFile flavorBDirectory + 'AndroidManifest.xml' 
    } 
} 
1

Daniel, ho sicuramente notato questo problema me stesso. Sembra che alcune modifiche semplicemente non si propagheranno a meno che ADB non rilevi che l'app non è attualmente installata su un dispositivo di destinazione.

Disclaimer: Questa è una soluzione alternativa, piuttosto che una spiegazione del comportamento, ma funziona per me. Per risolvere il problema, ho configurato le mie configurazioni di esecuzione per disinstallare il pacchetto in questione prima di installarlo di nuovo. Tieni presente che la disinstallazione di un APK ovviamente influirà su elementi quali database, dati persistenti dalle preferenze, ecc., Quindi non utilizzarli se il processo di sviluppo si basa su questi.

Passi: (da here)

  1. In Android Studio, fare clic sul menu a tendina a sinistra del tasto Esegui e selezionare Modifica configurazioni ...
  2. Clicca su App sotto Android Application, e nella scheda Generale, trovare l'intestazione 'Prima di avviare'
  3. Fare clic sul pulsante +, selezionare Esegui strumento esterno, fare clic sul pulsante + nella finestra popup.
  4. Assegnare un nome (ad esempio disinstallazione adb) e descrizione e digitare adb in Programma: e uninstall <your-package-name> in Parametri :. Assicurati che il nuovo elemento sia selezionato quando fai clic su Ok nella finestra popup.

Nota: se non si dispone di adb nella variabile d'ambiente PATH, dare il percorso completo di adb in programma: campo (ad esempio,/home/utente/android/sdk/platform-tools/ADB).

Ancora una volta, mi dispiace che non è una spiegazione del problema in sé, ma questo risolve definitivamente il problema per me.

Fammi sapere come funziona per voi.

+0

Grazie, sì qualcosa di simile potrebbe essere la mia unica opzione:/ –

+1

Avere la taglia: DI non credo di poterlo contrassegnare come risposta perché ho ancora bisogno di accedere alla memoria persistente ecc. –

+1

Capisco perfettamente. Grazie per la taglia! Terrò gli occhi aperti per una soluzione _actual_ e ti assicurerò di sapere se trovo qualcosa. – lustig

Problemi correlati