Migrazione dei progetti Android a Cloud Endpoints Frameworks 2.0

In questa pagina viene descritta la migrazione di un dispositivo Android Cloud Endpoints esistente versione 1.0 dall'app Framework endpoint per App Engine. Tieni presente che in questa pagina Endpoints 1.0 è indicato come Endpoints Frameworks 1.0 e il nuovo Endpoints Frameworks per App Engine come Endpoints Frameworks 2.0.

Vantaggi

Il nuovo framework offre una serie di vantaggi, tra cui:

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

La versione 2.0 di Endpoints Frameworks non influisce sulle interfacce dei tuoi tramite Google Cloud CLI o tramite l'API Compute Engine. I clienti esistenti continuano a funzionare dopo la migrazione senza alcun lato client modifiche al codice.

Migrazione di progetti multi-modulo Android alla versione 2.0 di Endpoints Frameworks

I passaggi che seguono ti guidano nella migrazione dei progetti Android Studio Endpoints Frameworks versione 1.0 alla versione 2.0 di Endpoints Frameworks. La guida esegue la migrazione di un progetto Android Studio con un modulo Endpoints.

Elenco attività

Utilizza il seguente elenco di attività di alto livello mentre lavori nella guida alla migrazione. Questa guida alla migrazione presuppone che tu abbia un progetto Android esistente che utilizza un modulo Google Cloud.

  1. Prima di iniziare.
  2. Configura Google Cloud CLI.
  3. (Facoltativo) Scarica il codice campione.
  4. Eseguire la migrazione a Endpoints Frameworks versione 2.0.
  5. Esegui il deployment del modulo di backend.
  6. Genera librerie client.

Prima di iniziare

  1. Installa Android Studio.
  2. Installa l'SDK Android 26 o versioni successive.
  3. Installa gcloud CLI.

Configurare l'interfaccia a riga di comando gcloud

Per configurare gcloud CLI:

  1. Inizializza gcloud CLI:

     gcloud init
    
  2. Usa le credenziali predefinite dell'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 sulla tua macchina locale:

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

     cd android-docs-samples/endpoints-frameworks/
    

Esegui la migrazione a Endpoints Frameworks versione 2.0

Aggiorna il file build.gradle

Le dipendenze di Endpoints Frameworks versione 2.0 utilizzano Guava 19 e il plug-in di compilazione Android Gradle com.android.tools.build:gradle:2.3.3 utilizza Guava 18. Aggiungi Guava 19 alla chiusura delle dipendenze dello script di build dell'elemento build.gradle per 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, hai utilizzato il plug-in Gradle,gradle-appengine-plugin, per generare un documento di scoperta dell'API. In Endpoints Frameworks versione 2.0, utilizzi 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

Gli strumenti Gradle dell'ambiente standard di App Engine sono stati aggiornati. I progetti Endpoints Frameworks versione 1.0 utilizzavano gradle-appengine-plugin in com.google.appengine, mentre i progetti Endpoints Frameworks versione 2.0 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

In Endpoints Frameworks versione 2.0, la classe servlet è cambiata da 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>

Ricrea il progetto

Infine, usa l'elenco build di Android Studio per pulire e ricreare il progetto Android Studio con il nuovo delle dipendenze.

Ricostruzione di 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 di backend utilizzando il seguente task Gradle nel modulo backend:

gradle appengineDeploy

Genera librerie client

Per generare le librerie client, utilizza il seguente task Gradle nel modulo backend:

gradle endpointsClientLibs

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

Aggiunta della gestione dell'API Endpoints

Endpoints Frameworks versione 2.0 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 relativa a Framework endpoint per App Engine.