Memigrasikan project Android ke Cloud Endpoints Frameworks 2.0

Halaman ini menjelaskan proses migrasi aplikasi Android Cloud Endpoints versi 1.0 yang ada ke Framework Endpoint untuk App Engine. Perlu diperhatikan bahwa halaman ini merujuk ke Endpoint versi 1.0 sebagai Framework Endpoint versi 1.0 dan Framework Endpoint baru untuk App Engine sebagai Framework Endpoint versi 2.0.

Manfaat

Framework baru ini menghadirkan 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

Framework Endpoint versi 2.0 tidak memengaruhi antarmuka ke API Anda. Klien yang sudah ada akan terus berfungsi setelah migrasi tanpa perubahan kode sisi klien apa pun.

Memigrasikan project multi-modul Android ke Endpoints Frameworks versi 2.0

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

Daftar tugas

Gunakan daftar tugas tingkat tinggi berikut saat Anda mengerjakan panduan migrasi. Panduan migrasi ini mengasumsikan bahwa Anda sudah memiliki project Android 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.
  6. Membuat library klien.

Sebelum memulai

  1. Instal 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. Gunakan Kredensial Default Aplikasi:

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

     gcloud components install app-engine-java
    

Opsional: Download 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/
    

Migrate to Endpoints Frameworks versi 2.0

Update file build.gradle

Dependensi Framework Endpoint 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'
    }
}

Update file app/build.gradle

Pada Endpoint versi 1.0, Anda menggunakan plugin Gradle, gradle-appengine-plugin, untuk membuat Dokumen Penemuan API. Pada Framework Endpoint versi 2.0, Anda menggunakan endpoints-framework-gradle-plugin untuk membuat Dokumen Discovery.

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

Update file backend/build.gradle

Alat Gradle lingkungan standar App Engine telah diupdate. Project Framework Endpoint versi 1.0 menggunakan gradle-appengine-plugin di com.google.appengine, dan project Endpoints 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)
        }
    }
}

Update file web.xml

Pada Framework Endpoints versi 2.0, class servlet diubah dari SystemServiceServlet menjadi EndpointsServlet.

Pola URL telah 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>

Buat ulang project

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

Build Ulang Android Studio

Men-deploy modul backend

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

gradle appengineDeploy

Membuat library klien

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

gradle endpointsClientLibs

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

Menambahkan pengelolaan Endpoints API

Framework Endpoints 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 Framework 2.0 lainnya, buka halaman Java tentang Framework Endpoint untuk App Engine.