3
Konfigurasi Build Gradle
Konfigurasi build repository ini terpusat pada satu berkas root build.gradle. Berkas itu mendeklarasikan semua plugin di tingkat root, lalu membagikan pengaturan Android yang sama ke setiap modul melalui blok subprojects yang bereaksi pada id plugin com.android.library dan com.android.application. build.gradle:21-611 Versi tidak ditulis langsung di berkas build; angkanya dibaca dari version catalog gradle/libs.versions.toml, sedangkan metadata publikasi berada di gradle.properties.
Peta konfigurasi
graph TD
TOML["gradle/libs.versions.toml"] --> ROOT["build.gradle: plugins + allprojects"]
PROPS["gradle.properties"] --> SUB
ROOT --> SUB["subprojects { plugins.withId }"]
SUB --> RH["resources-helper: com.android.library"]
SUB --> SMP["sample: com.android.application"]
RH --> PUB["com.vanniktech.maven.publish"]
PROPS --> PUB
style TOML fill:#f59e0b,color:#000
style PROPS fill:#f59e0b,color:#000
style ROOT fill:#f59e0b,color:#000
style SUB fill:#8b5cf6,color:#fff
style RH fill:#2d7d46,color:#fff
style SMP fill:#2d7d46,color:#fff
style PUB fill:#336791,color:#fff
%% fig: Sumber konfigurasi build antar berkas
%% desc: Version catalog dan gradle.properties mengalir ke build.gradle root, lalu blok subprojects membagikan pengaturan Android ke resources-helper dan sample.Blok allprojects menambahkan tiga repository untuk semua modul: google(), mavenCentral(), dan https://central.sonatype.com/repository/maven-snapshots/. build.gradle:13-192
Plugin dan versi terpusat
Blok plugins di root memakai alias libs.plugins.* dan seluruh entrinya bertanda apply false, karena penerapan sebenarnya terjadi di berkas build masing-masing modul. build.gradle:3-113
Plugin org.jetbrains.kotlin.android tetap dideklarasikan walaupun tidak diterapkan di modul mana pun. Komentar di berkas menyatakan deklarasi itulah yang mengunci versi compiler Kotlin yang dipakai built-in Kotlin AGP. build.gradle:6-84
Entri [versions] | Nilai | Pemakai |
|---|---|---|
agp | 9.2.1 | com.android.library, com.android.application |
kotlin | 2.3.21 | org.jetbrains.kotlin.android, kotlin-stdlib-jdk8 |
vanniktechPublish | 0.37.0 | com.vanniktech.maven.publish |
dokka | 2.2.0 | org.jetbrains.dokka (dideklarasikan, tidak diterapkan) |
appcompat | 1.7.1 | androidx-appcompat |
coreKtx | 1.19.0 | androidx-core-ktx |
localbroadcastmanager | 1.1.0 | androidx-localbroadcastmanager |
timber | 5.0.1 | timber |
junit | 4.13.2 | junit |
Tabel di atas dibaca dari bagian [versions]. gradle/libs.versions.toml:1-105 Bagian [libraries] memetakan setiap versi ke koordinat Maven, dan bagian [plugins] memetakannya ke id plugin beserta version.ref. gradle/libs.versions.toml:12-256
Nilai DSL yang berlaku untuk semua modul
Blok subprojects memasang android { ... } untuk setiap modul yang memasang salah satu id plugin Android. Pengaturan berikut karena itu identik di resources-helper dan sample. build.gradle:26-457
| Setting DSL | Nilai |
|---|---|
compileSdkVersion | 37 |
minSdkVersion | 23 |
targetSdkVersion | 37 |
versionCode | 1 |
versionName | "$VERSION_NAME", yaitu 35.0-SNAPSHOT |
testInstrumentationRunner | androidx.test.runner.AndroidJUnitRunner |
vectorDrawables.useSupportLibrary | true |
sourceCompatibility / targetCompatibility | JavaVersion.VERSION_11 |
buildFeatures.buildConfig | true |
Bagian Kotlin memakai DSL baru kotlin { compilerOptions { ... } }, bukan kotlinOptions lama. Dua freeCompilerArgs yang dipasang adalah -jvm-default=no-compatibility dan -opt-in=kotlin.RequiresOptIn. Setiap modul juga otomatis mendapat implementation libs.kotlin.stdlib.jdk8. build.gradle:47-588
Modul resources-helper dan sample
resources-helper memasang libs.plugins.android.library dan libs.plugins.maven.publish, memakai namespace = 'com.anggrayudi.hiddenapi', serta mematikan minifikasi di build type release maupun debug. Berkasnya juga menetapkan group = 'com.anggrayudi' dan version = "$VERSION_NAME". resources-helper/build.gradle:1-229
Dependensi modul itu adalah junit dan kotlin-stdlib-jdk8 sebagai testImplementation, ditambah androidx.appcompat dan androidx.localbroadcastmanager sebagai implementation. resources-helper/build.gradle:24-3010
sample adalah modul com.android.application dengan namespace = 'com.anggrayudi.hiddenapi.sample'. Berkasnya mendefinisikan signingConfigs.debug memakai keyAlias 'androiddebugkey' dan keystore ~/.android/debug.keystore, mematikan lintOptions.abortOnError, menyalakan viewBinding, serta membuat dimensi flavor librarySource dengan dua product flavor: local (default) dan maven. sample/build.gradle:1-4711
⚠️ Build type
releasepadasamplememakaisigningConfig = signingConfigs.debug. Artefakreleasemodul ini ditandatangani dengan debug keystore dan tidak layak untuk distribusi. sample/build.gradle:17-2312
Dependensi sample mencakup fileTree(dir: 'libs', include: ['*.jar']), androidx.appcompat, androidx.core.ktx, timber, dan implementation project(':resources-helper'). Dua baris dependensi per flavor masih dikomentari, sehingga flavor local dan maven saat ini memakai modul proyek yang sama. sample/build.gradle:49-6013
settings.gradle hanya mendaftarkan dua modul, :resources-helper dan :sample, serta tiga repository untuk pluginManagement. settings.gradle:1-914
Publikasi Maven
graph LR
V["VERSION_NAME=35.0-SNAPSHOT"] --> P["resources-helper: maven-publish"]
G["GROUP=com.anggrayudi + POM_ARTIFACT_ID"] --> P
P --> H["SONATYPE_HOST=CENTRAL_PORTAL"]
H --> C["Sonatype Central Portal"]
style V fill:#f59e0b,color:#000
style G fill:#f59e0b,color:#000
style P fill:#8b5cf6,color:#fff
style H fill:#f59e0b,color:#000
style C fill:#336791,color:#fff
%% fig: Jalur publikasi artefak Maven
%% desc: Properti di gradle.properties dibaca plugin maven-publish pada resources-helper, lalu dikirim ke Sonatype Central Portal sesuai SONATYPE_HOST.Properti publikasi dibaca plugin maven-publish dari gradle.properties. Berkas itu menetapkan koordinat artefak, status signing, serta seluruh isi POM. gradle.properties:20-3815
| Properti | Nilai |
|---|---|
GROUP | com.anggrayudi |
POM_ARTIFACT_ID | android-hidden-api |
VERSION_NAME | 35.0-SNAPSHOT |
RELEASE_SIGNING_ENABLED | false |
SONATYPE_AUTOMATIC_RELEASE | true |
SONATYPE_HOST | CENTRAL_PORTAL |
POM_LICENSE_NAME | The Apache Software License, Version 2.0 |
POM_SCM_URL | https://github.com/anggrayudi/android-hidden-api |
POM_DEVELOPER_ID | anggrayudi |
⚠️
VERSION_NAMEbernilai35.0-SNAPSHOT, bukan versi rilis. Build dari source ini menghasilkan artefak snapshot, dan repository snapshot untuk mengambilnya sudah disiapkan di blokallprojects.
Lingkungan build dan wrapper
org.gradle.jvmargs=-Xmx2G membatasi memori daemon Gradle, android.useAndroidX=true mengaktifkan AndroidX, dan kotlin.code.style=official memilih gaya kode resmi. Baris org.gradle.parallel masih dikomentari, jadi parallel build tidak aktif. gradle.properties:9-1916
Wrapper menunjuk distribusi gradle-9.6.1-bin.zip. gradle/wrapper/gradle-wrapper.properties:417
Task clean yang didaftarkan di root hanya menghapus rootProject.layout.buildDirectory. build.gradle:63-6518
Task buildHiddenJar, hiddenJarDoctor, dan restoreHiddenJar juga didaftarkan di berkas root, dan ketiganya membungkus skrip cli/hiddenjar. Rinciannya ada di Task Gradle Pembungkus hiddenjar serta Pipeline Build hiddenjar.