Migrazione di progetti Android in Cloud Endpoints Frameworks 2.0

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina viene descritta la migrazione di un'app esistente di Android Cloud Endpoints dalla versione 1.0 a Endpoints Frameworks per App Engine. Tieni presente che questa pagina si riferisce agli endpoint versione 1.0 come endpoints version 1.0 e ai nuovi endpoints Frameworks per App Engine come endpoints Frameworks versione 2.0.

Vantaggi

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

  • Latenza di richiesta ridotta
  • Integrazione migliore 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 alcuna modifica al codice lato client.

Migrazione di progetti multimodulo Android a Endpoints Frameworks 2.0

I seguenti passaggi ti aiuteranno a spostare i progetti Android Studio Endpoints versione 1.0 in Endpoints 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à di alto livello mentre lavori nella guida alla migrazione. Questa guida alla migrazione presume che tu abbia un progetto Android esistente utilizzando 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 2.0.
  5. Esegui il deployment del modulo di backend.
  6. Genera 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 dell'applicazione:

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

     gcloud components install app-engine-java
    

(Facoltativo) Scarica il codice campione

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

  1. Clona il repository di esempio nella macchina 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/
    

Esegui la migrazione a Endpoints Frameworks 2.0

Aggiorna il file build.gradle

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

È stato aggiornato lo strumento Gradle dell'ambiente standard di App Engine. I progetti di endpoint di versione 1.0 utilizzavano gradle-appengine-plugin in com.google.appengine, mentre i progetti di Framework di endpoint 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 è stata modificata 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 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 di backend utilizzando la seguente attività Gradle nel modulo backend:

gradle appengineDeploy

Genera librerie client

Per generare librerie client, utilizza la seguente attività Gradle mentre sei nel modulo backend:

gradle endpointsClientLibs

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

Aggiunta della gestione dell'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 API

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