Memigrasikan project Android ke Cloud Endpoints Frameworks 2.0

Halaman ini menjelaskan cara memigrasikan aplikasi Android Cloud Endpoints versi 1.0 yang ada ke Framework Endpoint untuk App Engine. Perhatikan bahwa halaman ini merujuk ke Endpoints versi 1.0 sebagai Endpoints Frameworks versi 1.0 dan Endpoints Frameworks baru untuk App Engine sebagai Endpoints Frameworks versi 2.0.

Manfaat

Framework baru ini memberikan sejumlah manfaat, termasuk:

  • Mengurangi latensi permintaan
  • Integrasi yang lebih baik dengan fitur App Engine, seperti domain kustom.
  • Dukungan resmi untuk konfigurasi Guice
  • Secara opsional, fitur pengelolaan API baru

Endpoints Frameworks versi 2.0 tidak memengaruhi antarmuka ke API Anda. Klien yang ada akan terus berfungsi setelah migrasi tanpa perubahan kode sisi klien.

Memigrasikan project multi-modul Android ke Endpoints Frameworks versi 2.0

Langkah-langkah berikut akan memandu Anda memindahkan project Android Studio Endpoints Frameworks versi 1.0 ke Endpoints Frameworks versi 2.0. Panduan ini memigrasikan project Android Studio dengan modul Endpoints.

Daftar tugas

Gunakan daftar tugas tingkat tinggi berikut saat Anda mempelajari panduan migrasi. Panduan migrasi ini mengasumsikan bahwa Anda sudah memiliki project Android yang menggunakan modul Google Cloud.

  1. Sebelum memulai.
  2. Siapkan Google Cloud CLI.
  3. Opsional: Download kode contoh.
  4. Bermigrasi ke Endpoints Frameworks versi 2.0.
  5. Deploy modul backend Anda.
  6. Buat library klien.

Sebelum memulai

  1. Menginstal Android Studio.
  2. Instal Android SDK 26+.
  3. Instal gcloud CLI.

Menyiapkan gcloud CLI

Untuk menyiapkan gcloud CLI:

  1. Lakukan inisialisasi gcloud CLI:

     gcloud init
    
  2. Menggunakan Kredensial Default Aplikasi:

     gcloud auth application-default login
    
  3. Instal komponen app-engine-java:

     gcloud components install app-engine-java
    

Opsional: Mendownload kode contoh

Untuk meng-clone project contoh legacy dan v2 dari GitHub:

  1. Clone repositori contoh ke komputer lokal Anda:

     git clone https://github.com/GoogleCloudPlatform/android-docs-samples
    
  2. Ubah ke direktori yang berisi kode contoh untuk legacy dan v2:

     cd android-docs-samples/endpoints-frameworks/
    

Bermigrasi ke Endpoints Frameworks versi 2.0

Memperbarui file build.gradle

Dependensi Endpoints Framework versi 2.0 menggunakan Guava 19 dan plugin build Android Gradle com.android.tools.build:gradle:2.3.3 menggunakan Guava 18. Tambahkan Guava 19 ke penutupan dependensi skrip build build.gradle untuk mengganti dependensi transitif ini.

Lama

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

Memperbarui file app/build.gradle

Di Endpoints versi 1.0, Anda menggunakan plugin Gradle, gradle-appengine-plugin, untuk membuat Dokumen Penemuan API. Di Endpoints Frameworks versi 2.0, Anda menggunakan endpoints-framework-gradle-plugin untuk membuat Dokumen Penemuan.

Skrip build ini menggunakan plugin sisi klien, com.google.cloud.tools.endpoints-framework-client.

Lama

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

Memperbarui file backend/build.gradle

Alat Gradle lingkungan standar App Engine telah diperbarui. Project Endpoints Frameworks versi 1.0 menggunakan gradle-appengine-plugin di com.google.appengine, dan project Endpoints Frameworks versi 2.0 menggunakan appengine-gradle-plugin.

Skrip build ini menggunakan plugin sisi server, com.google.cloud.tools.endpoints-framework-server.

Lama

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

Memperbarui file web.xml

Di Endpoints Frameworks versi 2.0, class servlet berubah dari SystemServiceServlet menjadi EndpointsServlet.

Pola URL diperbarui dari /_ah/spi/* menjadi /_ah/api/*.

Lama

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

Membangun ulang project

Terakhir, gunakan daftar build Android Studio untuk membersihkan dan mem-build ulang project Android Studio dengan dependensi baru.

Build Ulang Android Studio

Men-deploy modul backend

Plugin App Engine Gradle baru kini digunakan untuk men-deploy modul backend menggunakan tugas Gradle berikut saat berada di modul backend:

gradle appengineDeploy

Membuat library klien

Untuk membuat library klien, gunakan tugas Gradle berikut saat berada di modul backend:

gradle endpointsClientLibs

Pelajari lebih lanjut tugas yang tersedia untuk plugin Gradle Framework Endpoints.

Menambahkan pengelolaan Endpoints API

Endpoints Frameworks versi 2.0 juga memungkinkan Anda mengaktifkan fitur pengelolaan API, termasuk:

  • Pengelolaan kunci API
  • Berbagi API
  • Autentikasi pengguna
  • Metrik API
  • Log API

Untuk mulai menggunakan fitur ini dan fitur Cloud Endpoints Frameworks 2.0 lainnya, buka halaman Java tentang Framework Endpoints untuk App Engine.