Lompat ke konten
dokumentasi.id
Commit 98ceeb4
v2
Star3,6 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-61 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.
Fig. 1: Sumber konfigurasi build antar berkasVersion 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-19

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

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

Entri [versions]NilaiPemakai
agp9.2.1com.android.library, com.android.application
kotlin2.3.21org.jetbrains.kotlin.android, kotlin-stdlib-jdk8
vanniktechPublish0.37.0com.vanniktech.maven.publish
dokka2.2.0org.jetbrains.dokka (dideklarasikan, tidak diterapkan)
appcompat1.7.1androidx-appcompat
coreKtx1.19.0androidx-core-ktx
localbroadcastmanager1.1.0androidx-localbroadcastmanager
timber5.0.1timber
junit4.13.2junit

Tabel di atas dibaca dari bagian [versions]. gradle/libs.versions.toml:1-10 Bagian [libraries] memetakan setiap versi ke koordinat Maven, dan bagian [plugins] memetakannya ke id plugin beserta version.ref. gradle/libs.versions.toml:12-25

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

Setting DSLNilai
compileSdkVersion37
minSdkVersion23
targetSdkVersion37
versionCode1
versionName"$VERSION_NAME", yaitu 35.0-SNAPSHOT
testInstrumentationRunnerandroidx.test.runner.AndroidJUnitRunner
vectorDrawables.useSupportLibrarytrue
sourceCompatibility / targetCompatibilityJavaVersion.VERSION_11
buildFeatures.buildConfigtrue

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

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

Dependensi modul itu adalah junit dan kotlin-stdlib-jdk8 sebagai testImplementation, ditambah androidx.appcompat dan androidx.localbroadcastmanager sebagai implementation. resources-helper/build.gradle:24-30

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

⚠️ Build type release pada sample memakai signingConfig = signingConfigs.debug. Artefak release modul ini ditandatangani dengan debug keystore dan tidak layak untuk distribusi. sample/build.gradle:17-23

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

settings.gradle hanya mendaftarkan dua modul, :resources-helper dan :sample, serta tiga repository untuk pluginManagement. settings.gradle:1-9

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.
Fig. 2: Jalur publikasi artefak MavenProperti 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-38

PropertiNilai
GROUPcom.anggrayudi
POM_ARTIFACT_IDandroid-hidden-api
VERSION_NAME35.0-SNAPSHOT
RELEASE_SIGNING_ENABLEDfalse
SONATYPE_AUTOMATIC_RELEASEtrue
SONATYPE_HOSTCENTRAL_PORTAL
POM_LICENSE_NAMEThe Apache Software License, Version 2.0
POM_SCM_URLhttps://github.com/anggrayudi/android-hidden-api
POM_DEVELOPER_IDanggrayudi

⚠️ VERSION_NAME bernilai 35.0-SNAPSHOT, bukan versi rilis. Build dari source ini menghasilkan artefak snapshot, dan repository snapshot untuk mengambilnya sudah disiapkan di blok allprojects.

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

Wrapper menunjuk distribusi gradle-9.6.1-bin.zip. gradle/wrapper/gradle-wrapper.properties:4

Task clean yang didaftarkan di root hanya menghapus rootProject.layout.buildDirectory. build.gradle:63-65

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.