Como migrar projetos do Android para o Cloud Endpoints Frameworks 2.0

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Esta página descreve a migração de um aplicativo atual do Cloud Endpoints para Android versão 1.0 para o Endpoints Frameworks para o App Engine. Nesta página, o Cloud Endpoints 1.0 é chamado de Cloud Endpoints Frameworks versão 1.0 e o novo Endpoints Frameworks para App Engine é chamado de Endpoints Frameworks versão 2.0.

Benefícios

Existem vários benefícios no novo framework, incluindo:

  • latência reduzida de solicitação;
  • melhor integração com os recursos do App Engine, como domínios personalizados;
  • suporte oficial para configurações do Guice;
  • se quiser, novos recursos de gerenciamento de APIs.

O Endpoints Frameworks versão 2.0 não afeta as interfaces na API. Os clientes atuais continuam funcionando depois da migração sem alterações de código no lado do cliente.

Como migrar projetos com vários módulos do Android para o Endpoints Frameworks 2.0

As etapas a seguir ajudam você a transferir projetos da versão 1.0 do Endpoints Frameworks para Android Studio para o Endpoints Frameworks versão 2.0. O guia migra um projeto do Android Studio com um módulo do Cloud Endpoints.

Lista de tarefas

Use a lista de tarefas geral a seguir ao trabalhar com o guia de migração. Esse guia pressupõe que um projeto Android já tenha sido criado usando um módulo do Google Cloud.

  1. Antes de começar.
  2. Configure o Google Cloud CLI.
  3. Opcional: fazer o download do código de amostra.
  4. Migrar para o Endpoints Frameworks versão 2.0
  5. Implantar seu módulo de back-end.
  6. Gerar bibliotecas de cliente.

Antes de começar

  1. Instale o Android Studio.
  2. Instale o Android SDK 26+.
  3. Instale a CLI gcloud.

Configurar a CLI gcloud

Para configurar a CLI gcloud:

  1. Inicialize a CLI gcloud:

     gcloud init
    
  2. Use o Application Default Credentials:

     gcloud auth application-default login
    
  3. Instale o componente app-engine-java:

     gcloud components install app-engine-java
    

Opcional: fazer o download do código de amostra

Para clonar os projetos de amostra legacy e v2 do GitHub, faça o seguinte:

  1. Clone o repositório de amostra na sua máquina local:

     git clone https://github.com/GoogleCloudPlatform/android-docs-samples
    
  2. Altere para o diretório que contém o código de amostra para legacy e v2:

     cd android-docs-samples/endpoints-frameworks/
    

Migrar para o Endpoints Frameworks versão 2.0

Atualize o arquivo build.gradle

As dependências da versão 2.0 do Endpoints Frameworks usam o Guava 19 e o plug-in de compilação do Android Gradle com.android.tools.build:gradle:2.3.3 usa o Guava 18. Adicione Guava 19 ao fechamento de dependências do script de compilação do build.gradle para modificar essa dependência transitiva.

Legado

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'
    }
}

Atualize o arquivo app/build.gradle

Na versão 1.0 do Endpoints, você usou o plug-in Gradle, gradle-appengine-plugin, para gerar um documento de descoberta de API. No Endpoints Frameworks versão 2.0, você usa o endpoints-framework-gradle-plugin para gerar um documento de descoberta.

Este script de compilação usa o plug-in do lado do cliente com.google.cloud.tools.endpoints-framework-client.

Legado

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'
}

Atualize o arquivo backend/build.gradle

As ferramentas do Gradle para o ambiente padrão do App Engine foram atualizadas. Os projetos na versão 1.0 do Endpoints Frameworks usavam o com.google.appengine em gradle-appengine-plugin, e os projetos da versão 2.0 do Endpoints Frameworks usam appengine-gradle-plugin.

Este script de compilação usa o plug-in do lado do servidor com.google.cloud.tools.endpoints-framework-server.

Legado

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)
        }
    }
}

Atualizar o arquivo web.xml

Na versão 2.0 do Endpoints Frameworks, a classe de servlet foi alterada de SystemServiceServlet para EndpointsServlet.

O padrão de URL foi atualizado de /_ah/spi/* para /_ah/api/*.

Legado

<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>

Recompilar o projeto

Por fim, use a lista de compilação do Android Studio para limpar e recriar o projeto do Android Studio com as novas dependências.

Recompilação do Android Studio

Implantar o módulo de back-end

O novo plug-in do Gradle App Engine agora é usado para implantar o módulo de back-end usando a seguinte tarefa Gradle enquanto estiver no módulo backend:

gradle appengineDeploy

Gerar bibliotecas de cliente

Para gerar bibliotecas de clientes, use a seguinte tarefa Gradle no módulo backend:

gradle endpointsClientLibs

Saiba mais sobre as tarefas disponíveis para o plug-in do Gradle do Endpoints Frameworks.

Como adicionar gerenciamento da API do Endpoints

O Endpoints Frameworks versão 2.0 também permite ativar recursos de gerenciamento de API, incluindo:

  • gerenciamento de chave de API;
  • Compartilhamento da API
  • Autenticação de usuários
  • Métricas da API
  • registros da API.

Para começar a usar esses e outros recursos do Cloud Endpoints Frameworks 2.0, acesse a página Java sobre Endpoints Frameworks para o App Engine.