全部产品
Search
文档中心

Mobile Platform as a Service:Proyek Portal dan Bundle

更新时间:Feb 03, 2026

Penting
  • Jika Anda menggunakan baseline 10.2.3 atau versi yang lebih baru, gunakan metode AAR native.

  • Jenis koneksi berbasis komponen (Portal & Bundle) memerlukan Android Studio Flamingo (2022.2.1) atau versi sebelumnya.

Kerangka kerja berbasis komponen adalah kerangka kerja mPaaS yang didasarkan pada teknologi Open Service Gateway Initiative (OSGi). Kerangka kerja ini membagi sebuah aplikasi menjadi satu atau beberapa proyek Bundle yang independen secara bisnis dan satu proyek Portal. mPaaS mengelola siklus hidup dan dependensi setiap proyek Bundle, sedangkan proyek Portal menggabungkan semua paket proyek Bundle menjadi satu paket .apk yang dapat dijalankan.

Kerangka kerja mPaaS sangat ideal untuk pengembangan aplikasi berbasis tim. Kerangka kerja ini mencakup fitur-fitur seperti inisialisasi komponen dan instrumentasi untuk membantu Anda mengintegrasikan komponen mPaaS dengan mudah.

Proyek Bundle

Proyek native tradisional terdiri dari satu modul utama dan, opsional, beberapa sub-modul. Proyek mPaaS Bundle biasanya terdiri dari satu modul utama bernama app dan beberapa sub-modul.

Sebagai contoh, di Alipay, sebuah Bundle biasanya terdiri dari modul utama bernama app dan tiga sub-modul berikut:

  • api: Hanya berisi definisi antarmuka.

  • biz: Berisi implementasi antarmuka tersebut.

  • ui: Berisi activity, custom view, dan komponen terkait UI lainnya.

Catatan

Sebuah Bundle harus memiliki setidaknya satu sub-modul bernama api. Tanpa sub-modul ini, paket antarmuka Bundle tidak dapat dibuat, sehingga Bundle lain tidak dapat bergantung padanya.

Topik ini menjelaskan proyek Bundle dari aspek-aspek berikut:

Perbedaan antara Bundle dan proyek tradisional

Bundle pada dasarnya adalah proyek native. Perbedaan utamanya adalah bahwa plugin mPaaS Apply plugin ditambahkan ke file build.gradle pada proyek, modul utama, dan sub-modul. Perbedaan tersebut terdapat pada file-file berikut:

  • File build.gradle di direktori root proyek

  • File build.gradle modul utama

  • File build.gradle sub-modul

build.gradle di direktori root proyek

Pada file build.gradle di direktori root proyek, ditambahkan dependensi terhadap plugin mPaaS:

Catatan

Versi plugin dapat meningkat seiring penambahan fitur dalam iterasi baru.

classpath 'com.alipay.android:android-gradle-plugin:3.0.0.9.13'

image.png

build.gradle modul utama

Pada file build.gradle modul utama, ditambahkan deklarasi untuk plugin mPaaS Bundle Apply plugin. Hal ini menunjukkan bahwa proyek tersebut merupakan proyek Bundle. Konfigurasi Bundle adalah sebagai berikut:

apply plugin: 'com.alipay.bundle'

Konfigurasi berikut juga ditambahkan ke file build.gradle modul utama:image

Di mana:

  • version: Versi Bundle ini.

  • group: Group ID Bundle ini.

  • exportPackages: Menentukan nama package yang berisi semua kelas dari proyek Bundle saat ini. Anda dapat menentukan nama package induk. Untuk Bundle yang tidak ditautkan secara statis, Anda harus menentukan exportPackages. Jika tidak, kelas mungkin gagal dimuat. Misalnya, jika seluruh kode berada di bawah com.alipay.demo dan com.alipay.bundle, Anda dapat menentukan com.alipay dalam exportPackages. Anda juga dapat menentukan com.alipay.demo dan com.alipay.bundle. Hindari penggunaan nama package yang terlalu umum atau terlalu spesifik.

  • initLevel: Menentukan kapan framework memuat Bundle ini selama startup. Rentang nilainya dari 0 hingga 100. Nilai yang lebih rendah berarti Bundle dimuat lebih awal. Nilai 11110000 menunjukkan pemuatan malas (lazy loading), artinya Bundle dimuat sesuai permintaan.

  • packageId: Menentukan ID resource Bundle saat ini. ID ini diperlukan untuk packaging aapt dan harus unik untuk setiap Bundle dalam arsitektur multi-Bundle. ID package yang saat ini digunakan oleh mPaaS adalah sebagai berikut:

Bundle

packageId

com.alipay.android.phone.thirdparty:androidsupportrecyclerview-build

28

com.alipay.android.phone.mobilesdk:framework-build

30

com.alipay.android.phone.rome:pushservice-build

35

com.alipay.android.phone.sync:syncservice-build

38

com.alipay.android.phone.wallet:nebulabiz-build

41

com.alipay.android.phone.mobilecommon:share-build

42

com.alipay.android.phone.wallet:nebulacore-build

66

com.alipay.android.mpaas:scan-build

72

com.alipay.android.phone.wallet:nebula-build

76

com.alipay.android.phone.securitycommon:aliupgrade-build

77

Dependensi mPaaS berikut ditambahkan dalam dependencies:

dependencies {
    compile project(":api")
    apt 'com.alipay.android.tools:androidannotations:2.7.1@jar'
    //mPaaS dependencies
    provided 'com.alipay.android.phone.thirdparty:fastjson-api:1.1.73@jar'
    provided 'com.alipay.android.phone.thirdparty:androidsupport-api:13.23@jar'
}

build.gradle sub-modul

Pada file build.gradle sub-modul, ditambahkan deklarasi untuk plugin mPaaS Apply plugin. Hal ini menunjukkan bahwa proyek tersebut merupakan sub-modul dari sebuah Bundle. Proses ini pada akhirnya akan membuat paket antarmuka Bundle.

apply plugin: 'com.alipay.library'

Dependensi mPaaS berikut ditambahkan dalam dependencies:

dependencies {
    apt 'com.alipay.android.tools:androidannotations:2.7.1@jar'
    //mPaaS dependencies
    provided "com.alipay.android.phone.thirdparty:utdid-api:1.0.3@jar"
    provided "com.alipay.android.phone.mobilesdk:framework-api:2.1.1@jar"
}

Properti bundel

Desain properti Bundle dalam kerangka kerja ini didasarkan pada Bundle OSGi, tetapi lebih sederhana dan ringan.

Tabel berikut mencantumkan properti Bundle beserta deskripsinya.

Properti

Deskripsi

Bundle-Name

Nama Bundle. Diambil dari group dalam file build.gradle dan name yang didefinisikan dalam file settings.gradle.

Bundle-Version

Versi Bundle. Diambil dari version dalam file build.gradle.

Init-Level

Waktu pemuatan Bundle. Diambil dari properti init.level yang didefinisikan dalam file build.gradle.

Package-Id

ID package resource Bundle. Diambil dari properti yang didefinisikan dalam file build.gradle.

Contains-Dex

Menunjukkan apakah Bundle berisi file DEX. Plugin kompilasi menentukan hal ini secara otomatis.

Contains-Res

Menunjukkan apakah Bundle berisi resource. Plugin kompilasi menentukan hal ini secara otomatis.

Native-Library

File .so yang disertakan dalam Bundle. Plugin kompilasi menentukan hal ini secara otomatis.

Component-Name

Diambil dari Activity, Service, BroadcastReceiver, dan ContentProvider yang didefinisikan dalam file AndroidManifest.xml.

exportPackages

Nama package yang berisi semua kelas dari Bundle ini. Untuk informasi lebih lanjut, lihat file build.gradle modul utama.

Paket antarmuka Bundle

Sebuah Bundle dapat berisi beberapa sub-modul, seperti biz, api, dan ui. Saat Anda mengompilasi dan mengemas Bundle, setiap sub-modul menghasilkan paket antarmuka dalam format .jar. Bundle lain dapat menggunakan paket antarmuka api tersebut.

Saat pengemasan, paket proyek Bundle juga dihasilkan. Paket proyek ini berisi semua sub-modul dan dapat digunakan oleh proyek Portal. Paket proyek dikompilasi dalam Portal untuk menghasilkan paket .apk akhir.

  • Paket antarmuka yang dibuat dari sub-modul Bundle hanya berisi kelas antarmuka Java atau Kotlin yang didefinisikan. Paket ini tidak menyertakan resource lain, seperti resource dalam direktori res. Hanya sub-modul bernama api yang dapat menghasilkan paket antarmuka ini.

  • Proyek Bundle saling bergantung melalui paket antarmukanya. Untuk membuat dependensi, Anda harus mengonfigurasinya di bagian dependency file build.gradle Bundle tersebut. Misalnya, jika Bundle A bergantung pada sub-modul bapi di Bundle B, konfigurasikan dependensi terhadap bapi di bagian dependency file build.gradle sub-modul yang sesuai dalam Bundle A.

    provided "com.alipay.android.phone:bundleB:1.0.1:bapi@jar"
  • groupId:artifactid:version:classifier dalam dependensi bersesuaian dengan group, name, version, dan nama sub-modul yang dideklarasikan dalam Bundle.

  • Secara default, nama Bundle adalah nama folder modul utama. Anda dapat mengubahnya di settings.gradle, seperti pada kode berikut. Dalam contoh ini, app adalah nama proyek modul utama:

    include ':api', ':xxxx-build'
    project(':xxxx-build').projectDir = new File('app')

Paket proyek Bundle

  • Paket .jar yang dibuat dari seluruh proyek Bundle sebenarnya adalah file dalam format .apk, tetapi memiliki ekstensi .jar, seperti framework-build.jar.

  • Untuk bergantung pada Bundle dalam Portal, deklarasikan dependensi terhadap paket Bundle tersebut di bagian dependency file build.gradle modul utama Portal, seperti ditunjukkan di bawah ini:

    dependencies {
        bundle "com.alipay.android.phone.mobilesdk:framework-build:version@jar"
        manifest "com.alipay.android.phone.mobilesdk:framework-build:version:AndroidManifest@xml"
    }
  • Ada dua jenis paket Bundle: debug dan release. Saat Portal bergantung pada paket debug Bundle, Anda harus menambahkan :raw ke dependensinya.

    • Saat Portal bergantung pada paket debug Bundle: bundle "com.alipay.android.phone.mobilesdk:framework-build:version:raw@jar"

    • Saat Portal bergantung pada paket release Bundle: bundle "com.alipay.android.phone.mobilesdk:framework-build:version@jar"

Catatan
  • Saat mengemas Portal, Anda perlu menentukan hal-hal berikut:

    • Bundle mana yang akan dimasukkan ke dalam file DEX utama aplikasi. Bundle yang ditautkan secara statis dan berisi ContentProvider harus disertakan.

    • Bundle mana yang akan dimuat secara dinamis. Untuk aplikasi kecil, Anda dapat memasukkan semua Bundle ke dalam file DEX utama.

  • Untuk memasukkan kode Bundle ke dalam file DEX utama, konfigurasikan Bundle tersebut di file slinks Portal. Format konfigurasinya adalah groupId-artifactId. Jika artifactId diakhiri dengan -build, hapus akhiran tersebut. Misalnya, jika groupId adalah com.mpaas.group dan artifactId adalah testBundle-build, tambahkan baris com.mpaas.group-testBundle ke file slinks.

  • Pengaitan statis (static linking) memasukkan kode Bundle ke dalam APK's classes.dex, classes1.dex, classes2.dex, dan file DEX lainnya. Hal ini memungkinkan kelas dalam Bundle dimuat saat startup proyek.

Proyek Portal

Proyek Portal menggabungkan semua paket proyek Bundle menjadi satu paket .apk yang dapat dijalankan.

Perbedaan antara Portal dan proyek tradisional

Perbedaan antara proyek Portal dan proyek tradisional terletak pada file build.gradle:

  • build.gradle di direktori root proyek

  • build.gradle di direktori modul utama

build.gradle di direktori root proyek

Seperti yang ditunjukkan pada gambar berikut, plugin com.alipay.android:android-gradle-plugin:2.1.3.2.7 ditambahkan ke classpath:

Catatan

Versi plugin dapat meningkat seiring penambahan fitur dalam iterasi baru.

image.png

Plugin ini berisi plugin Portal, yang menggabungkan Bundle selama proses pengemasan.

  • Menggabungkan bundle .jar

  • Menggabungkan AndroidManifest bundle

build.gradle di direktori modul utama

Ditambahkan deklarasi untuk plugin mPaaS Apply Portal plugin. Hal ini menunjukkan bahwa proyek tersebut merupakan proyek Portal. Konfigurasi Portal adalah sebagai berikut:

apply plugin: 'com.alipay.portal'

Anda juga perlu menambahkan dependensi Bundle yang sesuai ke blok dependencies. Pernyataan dalam dependencies mendeklarasikan bundle dan manifes yang digantungkan oleh Portal:

image

Penting
  • Umumnya, Anda tidak menulis kode dalam proyek Portal.

  • Jenis resource berikut dari proyek Bundle, seperti styles, drawables, dan strings, harus ditempatkan di proyek Portal. Jika tidak, resource tersebut tidak dapat ditemukan selama kompilasi atau pada waktu proses:

    • Resource yang digunakan dalam AndroidManifest.xml.

    • Resource yang diteruskan ke NotificationManager.

    • Resource yang digunakan melalui metode getResources().getIdentifier().

    • Jika paket AAR pihak ketiga yang dirujuk berisi salah satu dari tiga jenis resource di atas, Anda juga harus mengekstrak AAR tersebut dan menyalin resource yang sesuai ke proyek Portal.

Dependensi proyek

Aplikasi berbasis kerangka kerja mPaaS mencakup satu atau beberapa Bundle dan satu Portal. Sebuah aplikasi hanya dapat memiliki satu proyek Portal, tetapi dapat memiliki beberapa proyek Bundle.

Plugin mPaaS menggabungkan semua paket proyek Bundle dalam proyek Portal menjadi satu paket .apk yang dapat dijalankan. Setelah penggabungan, plugin tersebut men-deploy proyek Bundle ke repositori tertentu. Alamat repositori ini didefinisikan dalam file build.gradle modul utama Bundle, seperti pada kode berikut:

uploadArchives {
    repositories {
        mavenLocal()
    }
}

Secara default, alamat ini mengarah ke repositori lokal ~/.m2 untuk upload. Anda juga dapat menambahkan alamat repositori kustom, seperti di bawah ini:

mavenDeployer {
    mavenLocal()
    repository(url: "${repository_url}") {
        authentication(userName: 'userName', password: 'userName_pwd')
    }
    snapshotRepository(url: "${repository_url}") {
        authentication(userName: 'userName', password: 'userName_pwd')
    }
}

Setelah upload, Bundle tersedia di repositori yang ditentukan dalam format groupid:artifactid:version:classifier@type. Oleh karena itu, Anda dapat menentukan dependensi untuk setiap Bundle dengan mendeklarasikannya di bagian dependency file build.gradle modul utama Portal, seperti ditunjukkan di bawah ini:

dependencies {
    bundle 'com.alipay.android.phone.mobilesdk:quinox-build:2.2.1.161221190158:nolog@jar'
    manifest 'com.alipay.android.phone.mobilesdk:quinox-build:2.2.1.161221190158:AndroidManifest@xml'
}

Demikian pula, untuk dependensi antar proyek Bundle, Anda harus mendeklarasikan alamat repositori di file root build.gradle Bundle yang bergantung.

Penting

username dan password dalam konfigurasi berikut bukan kredensial logon Konsol Anda. Untuk mendapatkan nilai-nilai ini, cari dan bergabunglah dengan grup DingTalk dengan ID 145930007362. Parameter tersebut dijelaskan sebagai berikut:

  • mavenLocal() menentukan alamat repositori lokal untuk dependensi.

  • maven{} mendeklarasikan alamat repositori remote untuk dependensi.

allprojects {
    repositories {
        mavenLocal()
        mavenCentral()
        maven {
            credentials {
                username "{username}"
                password "{password}"
            }
            url "http://mvn.cloud.alipay.com/nexus/content/repositories/releases/"
        }
    }
}

Hasil kompilasi dan pengemasan Bundle

Setelah Anda mengompilasi dan mengemas Bundle menggunakan plugin mPaaS, paket proyek (paket .jar) dihasilkan. Untuk informasi lebih lanjut, lihat Paket proyek Bundle dan Paket antarmuka Bundle.

Paket proyek dipublikasikan ke repositori yang ditentukan dalam format groupid:artifactid:version:classifier@type. Alamat repositori publikasi didefinisikan dalam file build.gradle modul utama Bundle, seperti pada contoh berikut:

uploadArchives {
    repositories {
        mavenLocal()
    }
}

Konfigurasi di atas menentukan repositori Maven lokal (mavenLocal) sebagai repositori publikasi. Untuk mengubah alamat repositori Maven lokal (default: ~/.m2) atau menambahkan repositori publikasi, lihat Konfigurasi repositori publikasi.

Menambahkan dependensi Bundle

Anda dapat menambahkan dependensi terhadap Bundle dari dalam Portal, atau menambahkan dependensi satu Bundle terhadap Bundle lainnya. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Deklarasikan alamat repositori dependensi di file root build.gradle Portal atau Bundle. Repositori dependensi harus sesuai dengan repositori publikasi Bundle. Untuk informasi lebih lanjut tentang cara mengonfigurasi repositori dependensi, lihat Konfigurasi repositori dependensi.

  2. Anda dapat mendeklarasikan dependencies di file build.gradle modul utama Portal atau Bundle. Contoh berikut menunjukkan cara menambahkan dependensi terhadap Bundle quinox:

dependencies {
    bundle 'com.alipay.android.phone.mobilesdk:quinox-build:2.2.1.161221190158:nolog@jar'
    manifest 'com.alipay.android.phone.mobilesdk:quinox-build:2.2.1.161221190158:AndroidManifest@xml'
}

Topik terkait