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.
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.gradledi direktori root proyekFile
build.gradlemodul utamaFile
build.gradlesub-modul
build.gradle di direktori root proyek
Pada file build.gradle di direktori root proyek, ditambahkan dependensi terhadap plugin mPaaS:
Versi plugin dapat meningkat seiring penambahan fitur dalam iterasi baru.
classpath 'com.alipay.android:android-gradle-plugin:3.0.0.9.13'
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:
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 menentukanexportPackages. Jika tidak, kelas mungkin gagal dimuat. Misalnya, jika seluruh kode berada di bawahcom.alipay.demodancom.alipay.bundle, Anda dapat menentukancom.alipaydalamexportPackages. Anda juga dapat menentukancom.alipay.demodancom.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. Nilai11110000menunjukkan 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 |
Bundle-Version | Versi Bundle. Diambil dari |
Init-Level | Waktu pemuatan Bundle. Diambil dari properti |
Package-Id | ID package resource Bundle. Diambil dari properti yang didefinisikan dalam file |
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 |
Component-Name | Diambil dari |
exportPackages | Nama package yang berisi semua kelas dari Bundle ini. Untuk informasi lebih lanjut, lihat file |
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
dependencyfilebuild.gradleBundle tersebut. Misalnya, jika Bundle A bergantung pada sub-modulbapidi Bundle B, konfigurasikan dependensi terhadapbapidi bagiandependencyfilebuild.gradlesub-modul yang sesuai dalam Bundle A.provided "com.alipay.android.phone:bundleB:1.0.1:bapi@jar"groupId:artifactid:version:classifierdalam 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
.jaryang dibuat dari seluruh proyek Bundle sebenarnya adalah file dalam format.apk, tetapi memiliki ekstensi.jar, sepertiframework-build.jar.Untuk bergantung pada Bundle dalam Portal, deklarasikan dependensi terhadap paket Bundle tersebut di bagian
dependencyfilebuild.gradlemodul 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
:rawke 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"
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
ContentProviderharus 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
slinksPortal. Format konfigurasinya adalahgroupId-artifactId. Jika artifactId diakhiri dengan-build, hapus akhiran tersebut. Misalnya, jika groupId adalahcom.mpaas.groupdan artifactId adalahtestBundle-build, tambahkan bariscom.mpaas.group-testBundleke fileslinks.Pengaitan statis (static linking) memasukkan kode Bundle ke dalam
APK'sclasses.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.gradledi direktori root proyekbuild.gradledi 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:
Versi plugin dapat meningkat seiring penambahan fitur dalam iterasi baru.

Plugin ini berisi plugin Portal, yang menggabungkan Bundle selama proses pengemasan.
Menggabungkan bundle
.jarMenggabungkan
AndroidManifestbundle
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:

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
AARpihak ketiga yang dirujuk berisi salah satu dari tiga jenis resource di atas, Anda juga harus mengekstrakAARtersebut 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.
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:
Deklarasikan alamat repositori dependensi di file root
build.gradlePortal atau Bundle. Repositori dependensi harus sesuai dengan repositori publikasi Bundle. Untuk informasi lebih lanjut tentang cara mengonfigurasi repositori dependensi, lihat Konfigurasi repositori dependensi.Anda dapat mendeklarasikan
dependenciesdi filebuild.gradlemodul utama Portal atau Bundle. Contoh berikut menunjukkan cara menambahkan dependensi terhadap Bundlequinox:
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'
}