Esegui la migrazione dell'app istantanea per supportare Android App Bundle

Se usi ancora il plug-in Android Gradle per funzionalità deprecato (com.android.feature) per i moduli delle app istantanee Android, devi: eseguire la migrazione all'utilizzo del plug-in dell'app di base (com.android.application) e Plug-in Dynamic Feature (com.android.dynamic-feature).

Sul plug-in Android per Gradle 3.3.0 e versioni successive, il plug-in dell'app di base include il supporto per creare esperienze istantanee. Vale a dire che se il modulo dell'app di base soddisfa i requisiti per creare un'esperienza istantanea, ne usufruirai automaticamente. Puoi quindi includere funzionalità aggiuntive che gli utenti possono scaricare on demand come app istantanee mediante il plug-in Dynamic Feature. Questa configurazione fa sì che supportare più facilmente sia l'app installata sia quella istantanea da un'unica app progetto e ti consente di trarre vantaggio dalla pubblicazione con Android App Bundle.

La seguente tabella descrive meglio i plug-in verso i quali eseguire la migrazione:

Descrizione del modulo Plug-in precedente Plug-in corrente
Il modulo che include il codice di base, le risorse e la funzionalità per la tua esperienza con l'app installata o istantanea. com.android.feature (con baseFeature = true) com.android.application

Nota: questo modulo include tutti i file manifest informazioni sulla firma necessarie per creare e pacchettizzare la tua app come Android App Bundle o APK.

Funzionalità modulari aggiuntive che gli utenti possono scaricare on demand com.android.feature com.android.dynamic-feature (con dist:instant="true" e dist:onDemand="false" nel manifest del modulo)
Codice e risorsa per una funzionalità disponibili solo per la versione installata della tua app. com.android.application com.android.dynamic-feature (con dist:instant="false" e dist:onDemand="false" nel manifest del modulo)

Questa pagina mostra come eseguire la migrazione del progetto di app istantanea esistente per creare Android App Bundle ad attivazione istantanea. Descrive inoltre come creare, testare pubblicare un Android App Bundle abilitato per le app istantanee.

Se stai creando nuove app istantanee per la tua app, leggi Crea un modulo delle funzionalità ad attivazione istantanea.

Comprendere le modifiche

Quando esegui la migrazione del progetto per utilizzare il plug-in Dynamic Feature, Gli Android App Bundle offrono un nuovo modo per creare e pubblicare la tua app che semplifica notevolmente la distribuzione di APK ottimizzati sul tuo utenti.

Gli app bundle semplificano la distribuzione pacchettizzando tutto il codice compilato della tua app e risorse per il caricamento, ma rimanda la generazione e la firma di APK a Google Play. Il nuovo modello di gestione delle app di Google Play utilizza quindi app bundle per generare e pubblicare APK ottimizzati per il dispositivo di ciascun utente configurazione, in modo da scaricare solo il codice e le risorse necessarie per l'esecuzione la tua app. Non devi più creare, firmare e gestire più APK per supportare diversi dispositivi e gli utenti ottengono download più piccoli e ottimizzati.

Quando si utilizza il plug-in delle funzionalità, ora deprecato, è necessario creare un'app istantanea creando un modulo di funzionalità di base che conteneva il codice e le risorse condivisi per tutti i moduli, incluso quello dell'app istantanea. Il resto del codice è stato incluso in più moduli di funzionalità non di base, che contenevano punti di contatto. per le tue esperienze istantanee. Per la versione installata dell'app, i tuoi potrebbe aver incluso un modulo dell'app separato, che conteneva il codice e le attività necessarie solo per l'app installata.

Quando esegui la migrazione della tua app per supportare Android App Bundle, il modulo dell'app rivendica il ruolo del modulo di base e tu organizzi ulteriori le app istantanee come moduli di funzionalità. In altre parole, il progetto ora è molto simile a un progetto di app standard, con un modulo di base ad attivazione istantanea e la possibilità di includere esperienze istantanee modulari aggiuntive.

Per eseguire la migrazione del progetto di app istantanea esistente e adottare Android App Bundle un modello di distribuzione più ottimizzato, segui i passaggi descritti nelle sezioni di seguito.

Converti il modulo delle funzionalità di base in un modulo dell'app

Devi prima modificare il file build.gradle del modulo delle funzionalità di base prima convertindolo nel modulo principale dell'app, nel seguente modo:

  1. Elimina la riga baseFeature true.
  2. Rimuovi tutte le dipendenze che utilizzano la dipendenza feature o application configurazioni.

    Alla moda

    dependencies {
        ...
        // delete any lines that look like
        // feature project(":foo")
        // feature project(":bar")
        // application project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // delete any lines that look like
        // feature(project(":foo"))
        // feature(project(":bar"))
        // application(project(":app"))
    }
    
  3. Sposta l'oggetto applicationId, insieme a tutte le altre configurazioni dello script di build ci aspetteresti di trovarsi nel modulo dell'app di base, dall'attuale com.android.application al modulo com.android.feature. Alcune di seguito sono riportati alcuni esempi. Per questo passaggio, a seconda delle tue esigenze Configurazione di build.gradle, potrebbe essere più semplice copiare e incollare android blocco di build.gradle dal modulo precedente alla nuova app del modulo build.gradle. Tuttavia, fai attenzione quando esegui Ecco.

    Alla moda

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(
                  'proguard-android-optimize.txt'),
                  'proguard-rules.pro'
            }
        }
    }
    

    Kotlin

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId = "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            getByName("release") {
                minifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }
    
  4. Contrassegna il modulo delle funzionalità come ad attivazione istantanea aggiungendo il bundle appropriato di distribuzione al manifest, come mostrato di seguito.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. Converti il modulo della funzionalità nel modulo dell'app di base modificando il relativo plug-in digita in com.android.application:

    Alla moda

    // Replace  "plugins { id 'com.android.feature' }"
    // with the following
    plugins {
      id 'com.android.application'
    }
    

    Kotlin

    // Replace  "plugins { id("com.android.feature") }"
    // with the following
    plugins {
        id("com.android.application")
    }
    

Converti il vecchio modulo dell'app in un modulo di funzionalità al momento dell'installazione

Se non disponi di codice o risorse nel modulo precedente dell'app, puoi semplicemente perché i passaggi che hai seguito nella sezione precedente hanno convertito modulo di funzionalità nel modulo dell'app di base dell'app.

Tuttavia, se nel modulo precedente dell'app sono presenti codice e risorse che rappresentano le funzionalità che vuoi mettere a disposizione degli utenti quando installano la tua app, segui i passaggi in questa sezione per convertire il modulo dell'app in un modulo delle funzionalità.

La creazione di un modulo di funzionalità comporta la modifica del tipo di plug-in da Da com.android.application a com.android.dynamic-feature, insieme ad alcuni e le altre modifiche a build.gradle, come segue:

  1. Cambia il tipo di plug-in da com.android.application a com.android.dynamic-feature.

    Alla moda

    // Replace "plugins { id 'com.android.feature' }"
    // with the following:
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "plugins { id("com.android.application") }"
    // with the following:
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. Come descritto nella sezione precedente, assicurati di aver spostato la build le configurazioni richieste dal plug-in com.android.application al server modulo dell'app di base, ad esempio regole applicationId o proguardFiles.

  3. Rinomina il modulo in modo simile a "installed_feature" come segue:

    1. Apri il riquadro Progetto selezionando Visualizza > Finestre degli strumenti > Project dalla barra dei menu.
    2. Fai clic con il tasto destro del mouse sul modulo della funzionalità e seleziona Refactoring > Rinomina.
    3. Nella finestra di dialogo visualizzata, seleziona Rinomina modulo e fai clic su OK.
    4. Inserisci il nuovo nome del modulo e fai clic su OK.
  4. Analogamente al passaggio 3, rinomina il nuovo modulo dell'app che hai creato nella precedente in una sezione ad esempio "app".

  5. Aggiungi una dipendenza di implementazione nel modulo "app" nella funzionalità del modulo build.gradle, come mostrato di seguito.

    Alla moda

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation(project(":app"))
    }
    
  6. Aggiungi la funzionalità al file build.gradle del nuovo modulo dell'app.

    Alla moda

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures = [":installed_feature"]
    }
    

    Kotlin

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures.addAll(listOf(":installed_feature"))
    }
    
  7. Nel file manifest del modulo delle funzionalità, contrassegnalo come installabile aggiungendo i tag di distribuzione bundle appropriati alla del file manifest.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="false" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    

Converti altri moduli delle funzionalità in moduli di funzionalità ad attivazione istantanea

Se hai modularizzato le funzionalità aggiuntive dell'app in più funzionalità devi seguire i passaggi di questa sezione per convertirli in moduli di funzionalità ad attivazione istantanea.

Per ogni modulo delle funzionalità rimanente del tuo progetto, procedi come segue per la conversione in funzionalità ad attivazione istantanea:

  1. Modifica il tipo di plug-in nel file build.gradle in com.android.dynamic-feature, come mostrato di seguito:

    Alla moda

    // Replace 'com.android.feature' with 'com.android.dynamic-feature'
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "com.android.feature" with "com.android.dynamic-feature"
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. Contrassegna ogni modulo delle funzionalità come ad attivazione istantanea aggiungendo quanto segue al file manifest.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    
  3. Aggiungi il modulo delle funzionalità al file build.gradle del nuovo modulo dell'applicazione in cui hai aggiunto installed_feature all'elenco dei moduli delle funzionalità.

    Alla moda

    android {
       ...
       dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"]
       // or whichever name exists for the instant enabled feature module
    }
    

    Kotlin

    android {
       ...
       dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2"))
       // or whichever name exists for the instant enabled feature module
    }
    

Crea, testa e pubblica un nuovo app bundle ad attivazione istantanea

Dopo aver completato i passaggi di questa pagina, il progetto è in grado di produrre un singolo artefatto, un Android App Bundle, che puoi usare per pubblicare sia installata e istantanea dell'app in Google Play Console e separatamente per i canali istantanei e installati. Inoltre con l'app bundle, hai il vantaggio di pubblicare APK ottimizzati per la configurazione del dispositivo di ciascun utente, pertanto scaricano solo il codice e le risorse necessarie per eseguire la tua app. cioè non è più necessario creare, firmare e gestire diversi APK per supportare diversi dispositivi, mentre gli utenti hanno dimensioni ridotte, con una maggiore ottimizzazione dei download.

Per iniziare a creare e testare il tuo app bundle ad attivazione istantanea, vai a Crea l'app bundle.