Plug-in Android Gradle 3.4.0 (aprile 2019)

Questa versione del plug-in Android richiede quanto segue:

3.4.3 (luglio 2020)

Questo aggiornamento secondario supporta la compatibilità con le nuove impostazioni e funzionalità predefinite per la visibilità dei pacchetti in Android 11.

Per informazioni dettagliate, consulta le note di rilascio 4.0.1.

3.4.2 (luglio 2019)

Questo aggiornamento secondario supporta Android Studio 3.4.2 e include varie correzioni di bug e miglioramenti delle prestazioni. Per visualizzare un elenco di correzioni di bug degne di nota, leggi il post correlato sul blog degli aggiornamenti delle release.

3.4.1 (maggio 2019)

Questo aggiornamento secondario supporta Android Studio 3.4.1 e include varie correzioni di bug e miglioramenti delle prestazioni. Per visualizzare un elenco di correzioni di bug degne di nota, leggi il post correlato sul blog degli aggiornamenti delle release.

Nuove funzionalità

  • Nuove configurazioni delle dipendenze per i controlli lint: il comportamento di lintChecks è cambiato ed è stata introdotta una nuova configurazione delle dipendenze, lintPublish, per offrire maggiore controllo sui controlli lint pacchettizzati nelle librerie Android.

    • lintChecks: questa è una configurazione esistente che devi utilizzare per i controlli lint da eseguire solo quando crei il progetto localmente. Se in precedenza utilizzavi la configurazione delle dipendenze lintChecks per includere i controlli lint nell'AAR pubblicato, devi eseguire la migrazione di queste dipendenze per utilizzare invece la nuova configurazione lintPublish descritta di seguito.
    • lintPublish: utilizza questa nuova configurazione nei progetti delle librerie per i controlli lint da includere nell'AAR pubblicato, come mostrato di seguito. Ciò significa che i progetti che utilizzano la tua libreria applicano questi controlli lint.

    Il seguente esempio di codice utilizza entrambe le configurazioni delle dipendenze in un progetto di libreria Android locale.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • In generale, le attività di pacchettizzazione e firma dovrebbero migliorare la velocità di creazione complessiva. Se noti una regressione delle prestazioni relativa a queste attività, segnala un bug.

Modifiche del comportamento

  • Avviso relativo al ritiro del plug-in delle app istantanee Android: se usi ancora il plug-in com.android.feature per creare la tua app istantanea, il plug-in Android Gradle 3.4.0 ti restituirà un avviso di ritiro. Per assicurarti di poter comunque creare la tua app istantanea su versioni future del plug-in, esegui la migrazione dell'app istantanea al plug-in delle funzionalità dinamiche, che ti consente anche di pubblicare le esperienze delle app istantanee e installate da un unico Android App Bundle.

  • R8 abilitato per impostazione predefinita: R8 integra la desugaring, la riduzione, l'offuscamento, l'ottimizzazione e il dexing in un unico passaggio, con conseguente miglioramenti evidenti delle prestazioni della build. R8 è stato introdotto nel plug-in Android Gradle 3.3.0 e ora è abilitato per impostazione predefinita sia per i progetti di app che per le librerie Android utilizzando il plug-in 3.4.0 e versioni successive.

La seguente immagine fornisce una panoramica generale del processo di compilazione prima dell'introduzione di R8.

Prima della versione R8, ProGuard era un passaggio di compilazione diverso dal dexing e dal desugaring.

Ora, con R8, le operazioni di desugaring, riduzione, offuscamento, ottimizzazione e dexing (D8) vengono tutte completate in un unico passaggio, come illustrato di seguito.

Con R8, le operazioni di desugaring, riduzione, offuscamento, ottimizzazione e dexing vengono eseguite in un unico passaggio di compilazione.

Tieni presente che R8 è progettato per funzionare con le regole ProGuard esistenti, pertanto probabilmente non dovrai intraprendere alcuna azione per usufruire di R8. Tuttavia, la riduzione e l'ottimizzazione potrebbero comportare la rimozione di codice diverso da ProGuard, ma poiché si tratta di una tecnologia diversa da quella di ProGuard progettata appositamente per i progetti Android. Quindi, in questa situazione improbabile, potresti dover aggiungere ulteriori regole per mantenere questo codice nell'output della build.

Se riscontri problemi con R8, leggi le domande frequenti sulla compatibilità di R8 per verificare se esiste una soluzione al tuo problema. Se la soluzione non è documentata, segnala un bug. Puoi disabilitare R8 aggiungendo una delle seguenti righe al file gradle.properties del progetto:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Nota: per un determinato tipo di build, se imposti useProguard su false nel file build.gradle del modulo dell'app, il plug-in Android Gradle utilizza R8 per ridurre il codice della tua app per quel tipo di build, indipendentemente dal fatto che R8 venga disabilitato nel file gradle.properties del tuo progetto.

  • L'app ndkCompile è deprecata:ora ricevi un errore di build se provi a utilizzare ndkBuild per compilare le tue librerie native. Dovresti invece utilizzare CMake o ndk-build per aggiungere codice C e C++ al tuo progetto.

Problemi noti

  • Al momento non viene applicato in modo corretto l'utilizzo di nomi di pacchetto univoci, ma diventerà più rigido nelle versioni successive del plug-in. Nella versione 3.4.0 del plug-in Gradle per Android versione 3.4.0, puoi attivare la verifica per verificare se il tuo progetto dichiara nomi di pacchetti accettabili aggiungendo la riga di seguito al file gradle.properties.

              android.uniquePackageNames = true
              
            

    Per scoprire di più sull'impostazione del nome di un pacchetto tramite il plug-in Android Gradle, consulta Impostare l'ID applicazione.