Android Gradle Plugin 3.4.0 (aprile 2019)

Questa versione del plug-in Android richiede i seguenti requisiti:

3.4.3 (luglio 2020)

Questo aggiornamento minore supporta la compatibilità con le nuove impostazioni predefinite e funzionalità per visibilità del pacchetto su Android 11.

Per informazioni dettagliate, consulta le note di rilascio 4.0.1.

3.4.2 (luglio 2019)

Questo aggiornamento minore supporta Android Studio 3.4.2 e include vari bug correzioni e miglioramenti delle prestazioni. Per visualizzare un elenco di importanti correzioni di bug, leggi il post correlato nella Blog degli aggiornamenti delle release.

3.4.1 (maggio 2019)

Questo aggiornamento minore supporta Android Studio 3.4.1 e include vari bug correzioni e miglioramenti delle prestazioni. Per visualizzare un elenco di importanti correzioni di bug, leggi il post correlato nella Blog degli aggiornamenti delle release.

Nuove funzionalità

  • Nuove configurazioni delle dipendenze per il controllo lint: il parametro il comportamento di lintChecks è cambiato e una nuova dipendenza lintPublish, è stata introdotta per fornire hai un maggiore controllo sui controlli lint che vengono pacchettizzati nel tuo Android librerie.

    • lintChecks: si tratta di una configurazione esistente che da utilizzare per i controlli lint da eseguire solo durante la creazione del tuo progetto localmente. Se in precedenza utilizzavi lintChecks configurazione della dipendenza per includere il lint nell'AAR pubblicato, devi eseguire la migrazione delle dipendenze per utilizzare la nuova configurazione lintPublish descritti di seguito.
    • lintPublish: usa questa nuova configurazione nella raccolta progetti per i controlli lint che vuoi includere nel file AAR pubblicato come mostrato di seguito. Ciò significa che i progetti che utilizzano la tua libreria per applicare anche i 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 avere una build complessiva il miglioramento della velocità. Se noti una regressione delle prestazioni relativa queste attività, segnala un bug.

Cambiamenti del comportamento

  • Ritiro del plug-in della funzionalità delle app istantanee Android Avviso: se utilizzi ancora com.android.feature per creare la tua app istantanea, Il plug-in Android per Gradle 3.4.0 genera un avviso di deprecazione. Per assicurarti di poter comunque creare la tua app istantanea su versioni future di esegui la migrazione dell'app istantanea all'uso il plug-in delle funzionalità dinamiche, che ti consente anche di pubblicare sia l'app installata che l'app istantanea esperienze di un singolo Android App Bundle.

  • R8 abilitato per impostazione predefinita: R8 integra la desugaring, restringimento, offuscamento, ottimizzazione e dexing in un unico passaggio, ottenendo nel prestazioni di build visibili miglioramenti. R8 è stato introdotto nel plug-in Android Gradle 3.3.0 e adesso è abilitato per impostazione predefinita per i progetti di app e libreria Android. usando il plugin 3.4.0 e successivo.

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

Prima di R8, ProGuard era un passaggio di compilazione diverso dal dexing e
              dissuadere.

Ora, con R8, puoi ridurre, restringere, offuscare, ottimizzare e dexing (D8) vengono completate in un solo passaggio, come illustrato di seguito.

Con R8, è possibile eseguire la sgombero, il restringimento, l'offuscamento, l'ottimizzazione
      il dexing viene eseguito in un unico passaggio di compilazione.

Ricorda che R8 è progettato per funzionare con le regole ProGuard esistenti, probabilmente non dovrai fare nulla per trarre vantaggio da R8. Tuttavia, perché si tratta di una tecnologia diversa da ProGuard, progettata appositamente per i progetti Android, la riduzione e l'ottimizzazione possono comportare la rimozione del codice che ProGuard potrebbe non avere. Quindi, in questa improbabile situazione, potresti aver bisogno aggiungere altre regole per mantenere quel codice nell'output della build.

Se riscontri problemi con R8, leggi le Domande frequenti sulla compatibilità con R8 per verificare se esiste una soluzione al problema. Se una soluzione non è documentata, segnala un bug. Puoi disabilitare R8 aggiungendo una delle seguenti righe all'interfaccia File gradle.properties:

      # 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 Da useProguard a false nella tua app build.gradle del modulo, il plug-in Android Gradle utilizza R8 di ridurre il codice dell'app per quel tipo di build, indipendentemente dal fatto che Disabilita R8 nel file gradle.properties del tuo progetto.

  • Il servizio ndkCompile è deprecato: ora puoi usufruire di un generare un errore di generazione se provi a utilizzare ndkBuild per compilare librerie native. Dovresti invece usare CMake o ndk-build Aggiungi il codice C e C++ al tuo progetto.

Problemi noti

  • Al momento l'utilizzo corretto di nomi di pacchetti univoci non è applicato ma diventerà più restrittivo con le versioni successive del plug-in. Su Android del plug-in Gradle versione 3.4.0, puoi scegliere di verificare se il tuo dichiara i nomi di pacchetto accettabili aggiungendo la riga seguente a il tuo file gradle.properties.

              android.uniquePackageNames = true
              
            

    Scopri di più sull'impostazione di un nome pacchetto tramite Android Gradle consulta l'articolo Imposta l'ID applicazione.