Migrazione dei progetti Android in Cloud Endpoints Frameworks 2.0

In questa pagina viene descritta la migrazione di un'app Android Cloud Endpoints 1.0 esistente ad Endpoints Frameworks per App Engine. Tieni presente che questa pagina si riferisce alla versione 1.0 degli endpoint come versione 1.0 degli endpoint e alla nuova versione 2.0 degli endpoint per App Engine.

Vantaggi

Il nuovo framework offre numerosi vantaggi, tra cui:

  • Latenza di richiesta ridotta
  • Migliore integrazione con le funzionalità di App Engine, come i domini personalizzati.
  • Supporto ufficiale per le configurazioni Guice
  • Facoltativamente, nuove funzionalità di gestione delle API

La versione 2.0 di Endpoints Frameworks non influisce sulle interfacce della tua API. I client esistenti continuano a funzionare dopo la migrazione senza modifiche al codice lato client.

Migrazione dei progetti con più moduli di Android alla versione 2.0 di Endpoints Frameworks

I passaggi seguenti spiegano come spostare i progetti di Android Studio Endpoints Frameworks 1.0 in Endpoints Frameworks versione 2.0. La guida esegue la migrazione di un progetto Android Studio con un modulo Endpoint.

Elenco attività

Utilizza il seguente elenco di attività generiche durante l'esecuzione della guida alla migrazione. Questa guida alla migrazione presume che tu abbia un progetto Android esistente che utilizza un modulo Google Cloud.

  1. Prima di iniziare:
  2. Configura l'interfaccia a riga di comando di Google Cloud.
  3. (Facoltativo) Scarica il codice di esempio.
  4. Esegui la migrazione alla versione 2.0 dei framework di endpoint.
  5. Esegui il deployment del modulo di backend.
  6. Generare le librerie client.

Prima di iniziare

  1. Installa Android Studio.
  2. Installa Android SDK 26 o versioni successive.
  3. Installa l'interfaccia a riga di comando gcloud.

Configurare l'interfaccia a riga di comando gcloud

Per configurare l'interfaccia a riga di comando gcloud:

  1. Inizializza l'interfaccia a riga di comando gcloud:

     gcloud init
    
  2. Usa credenziali predefinite applicazione:

     gcloud auth application-default login
    
  3. Installa il componente app-engine-java:

     gcloud components install app-engine-java
    

Facoltativo: scarica il codice di esempio

Per clonare i progetti di esempio legacy e v2 da GitHub:

  1. Clona il repository di esempio sul tuo computer locale:

     git clone https://github.com/GoogleCloudPlatform/android-docs-samples
    
  2. Passa alla directory contenente il codice di esempio per legacy e v2:

     cd android-docs-samples/endpoints-frameworks/
    

Eseguire la migrazione alla versione 2.0 di Endpoints Frameworks

Aggiorna il file build.gradle

Le dipendenze di Endpoints Frameworks versione 2.0 utilizzano Guava 19 e il plug-in di build Android Android com.android.tools.build:gradle:2.3.3 utilizza Guava 18. Aggiungi Guava 19 alla chiusura di dipendenze dello script di build di build.gradle per sostituire questa dipendenza transitiva.

Legacy

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }
}

v2

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // V2: Include this dependency when using Endpoints Framework v2
        classpath 'com.google.guava:guava:19.0'

        classpath 'com.android.tools.build:gradle:2.3.3'
    }
}

Aggiorna il file app/build.gradle

Nella versione 1.0 di Endpoints, è stato utilizzato il plug-in Gradle, gradle-appengine-plugin, per generare un documento Discovery API. Nella versione 2.0 di Endpoint Frameworks, puoi utilizzare endpoints-framework-gradle-plugin per generare un documento di rilevamento.

Questo script di build utilizza il plug-in lato client, com.google.cloud.tools.endpoints-framework-client.

Legacy

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.1'
    defaultConfig {
        applicationId 'com.example.migration.endpoints.app'
        minSdkVersion 25
        targetSdkVersion 26
        versionCode 1
        versionName '1.0'
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // androidTestCompile compiles instrumentation tests written using Espresso
    // used by Firebase Test Lab
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.1'
    compile 'com.google.code.findbugs:jsr305:2.0.1'
    compile 'com.google.http-client:google-http-client-android:1.22.0'
    compile 'com.google.api-client:google-api-client:+'
    testCompile 'junit:junit:4.12'

    // LEGACY: Legacy compile :backend project
    compile project(path: ':backend', configuration: 'android-endpoints')
}

v2

apply plugin: 'com.android.application'

// V2: Apply the new Endpoints Framework client plugin
apply plugin: 'com.google.cloud.tools.endpoints-framework-client'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // V2: Add the new Endpoints Framework plugin dependencies
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
    }
}

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.1'
    defaultConfig {
        applicationId 'com.example.migration.endpoints.app'
        minSdkVersion 25
        targetSdkVersion 26
        versionCode 1
        versionName '1.0'
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // androidTestCompile compiles instrumentation tests written using Espresso
    // used by Firebase Test Lab
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.1'
    compile 'com.google.code.findbugs:jsr305:2.0.1'
    testCompile 'junit:junit:4.12'

    // V2: Endpoints Framework v2 migration
    endpointsServer project(path: ':backend', configuration: 'endpoints')
    compile 'com.google.api-client:google-api-client:+'
    compile 'com.google.http-client:google-http-client-android:1.22.0'
}

Aggiorna il file backend/build.gradle

Lo strumento Gradle dell'ambiente standard di App Engine è stato aggiornato. I progetti della versione 1.0 di Endpoints Frameworks hanno utilizzato gradle-appengine-plugin in com.google.appengine, mentre i progetti della versione 2.0 di Endpoints utilizzano appengine-gradle-plugin.

Questo script di build utilizza il plug-in lato server, com.google.cloud.tools.endpoints-framework-server.

Legacy

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // LEGACY: Deprecated App Engine plugin dependency
        classpath 'com.google.appengine:gradle-appengine-plugin:1.9.59'
    }
}

repositories {
    jcenter();
}

apply plugin: 'java'
apply plugin: 'war'

// LEGACY: Deprecated Apply App Engine plugin dependency
apply plugin: 'appengine'

sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

dependencies {
    // LEGACY: Deprecated App Engine plugin dependency
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.59'

    // LEGACY: Legacy Endpoints Framework dependencies
    compile 'com.google.appengine:appengine-endpoints:1.9.59'
    compile 'com.google.appengine:appengine-endpoints-deps:1.9.59'

    compile 'javax.servlet:servlet-api:2.5'
}

appengine { // LEGACY: Deprecated App Engine plugin Tasks configuration
    downloadSdk = true
    appcfg {
        oauth2 = true

        // extraOptions is used for acceptance test and
        // is not required.
        def application = findProperty("appengine.deploy.application")
        def version = findProperty("appengine.deploy.version")
        def serviceAccount = findProperty("appengine.deploy.serviceAccount")

        extraOptions = ["--application=" + application, "--version=" + version,
            '--service_account_json_key_file=' + serviceAccount]
    }
    endpoints {
        getClientLibsOnBuild = true
        getDiscoveryDocsOnBuild = true
    }
}

v2

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // V2: Add the new App Engine and Endpoints Frameworks plugin dependencies
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.3'
    }
}

repositories {
    jcenter();
}

apply plugin: 'java'
apply plugin: 'war'

// V2: Apply new App Engine and Endpoints Framework server plugins
apply plugin: 'com.google.cloud.tools.appengine'
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'

sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

dependencies {
    // V2: Endpoints Framework v2 migration
    compile 'com.google.endpoints:endpoints-framework:2.0.9'
    compile 'javax.inject:javax.inject:1'

    compile 'javax.servlet:servlet-api:2.5'
}

// V2: Define deployment configuration using the new App Engine plugin
// with the appengine closure
appengine {  // App Engine tasks configuration
    deploy {   // deploy configuration

        // The following is used for acceptance tests and
        // is not required for a migration.
        project = findProperty("appengine.deploy.project")
        version = findProperty("appengine.deploy.version")
        def promoteProp = findProperty("appengine.deploy.promote")
        if (promoteProp != null) {
            promote = new Boolean(promoteProp)
        }
    }
}

Aggiorna il file web.xml

Nella versione 2.0 di Endpoints Frameworks, la classe servlet è cambiata da SystemServiceServlet a EndpointsServlet.

Il pattern URL è stato aggiornato da /_ah/spi/* a /_ah/api/*.

Legacy

<servlet>
    <!-- LEGACY: Start of Legacy section -->
    <servlet-name>SystemServiceServlet</servlet-name>
    <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
    <!-- LEGACY: End of Legacy section -->
    <init-param>
        <param-name>services</param-name>
        <param-value>com.example.migration.endpoints.backend.MyEndpoint</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <!-- LEGACY: Start of legacy section -->
    <servlet-name>SystemServiceServlet</servlet-name>
    <url-pattern>/_ah/spi/*</url-pattern>
    <!-- LEGACY: End of legacy section -->
</servlet-mapping>

v2

<servlet>
    <!-- V2: Start of v2 section -->
    <servlet-name>EndpointsServlet</servlet-name>
    <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
    <!-- V2: End of v2 section -->
    <init-param>
        <param-name>services</param-name>
        <param-value>com.example.migration.endpoints.backend.MyEndpoint</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <!-- V2: Start of v2 section -->
    <servlet-name>EndpointsServlet</servlet-name>
    <url-pattern>/_ah/api/*</url-pattern>
    <!-- V2: End of v2 section -->
</servlet-mapping>

Riprogetta progetto

Infine, utilizza l'elenco di build di Android Studio per pulire e ricreare il progetto Android Studio con le nuove dipendenze.

Ricostruzione Android Studio

Esegui il deployment del modulo di backend

Il nuovo plug-in Gradle App Engine viene ora utilizzato per eseguire il deployment del modulo backend utilizzando la seguente attività Gradle durante il modulo backend:

gradle appengineDeploy

Genera librerie client

Per generare le librerie client, durante il modulo backend utilizza la seguente attività Gradle:

gradle endpointsClientLibs

Scopri di più sulle attività disponibili per il plug-in Endpoint Frameworks Gradle.

Aggiunta della gestione delle API Endpoints

La versione 2.0 di Endpoints Frameworks ti consente anche di attivare le funzionalità di gestione delle API, tra cui:

  • Gestione delle chiavi API
  • Condivisione API
  • Autenticazione degli utenti
  • Metriche delle API
  • Log delle API

Per iniziare a utilizzare queste e altre funzionalità di Cloud Endpoints Frameworks 2.0, vai alla pagina Java su Endpoints Frameworks per App Engine.