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

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

9

Task Gradle Pembungkus hiddenjar

Tiga task Gradle di build.gradle akar adalah pembungkus tipis untuk skrip hiddenjar. Task hanya menyusun commandLine, lalu menyerahkan seluruh pekerjaan ke proses eksternal. Ketiganya bertipe Exec, tergabung dalam group hiddenjar, dan tidak mendeklarasikan inputs/outputs (build.gradle:111-130). Perintah yang didukung wrapper ini juga dicatat sebagai komentar di kepala blok tersebut (build.gradle:67-84).

Tiga task dan subcommand yang dijalankan

TaskTipeSubcommandArgumen tambahanSumber
buildHiddenJarExecbuildseluruh hasil hiddenJarArgs()build.gradle:111-115
hiddenJarDoctorExecdoctor[] (kosong)build.gradle:117-121
restoreHiddenJarExecrestorehanya --api dan --sdk-dirbuild.gradle:123-130

buildHiddenJar meneruskan value prop dan bool prop ke skrip. hiddenJarDoctor tidak meneruskan apa pun, sehingga -PsdkDir pada task itu diabaikan meskipun skrip doctor menerima --sdk-dir (cli/hiddenjar:84). restoreHiddenJar membangun daftar argumennya sendiri dan membaca dua properti saja (build.gradle:123-130).

Alur satu invokasi

graph LR
  G["./gradlew buildHiddenJar -Papi=37 -Pinstall"] --> A["hiddenJarArgs()"]
  A --> I["hiddenJarInvoke('build', args)"]
  I --> OS{"os.name contains 'windows'?"}
  OS -->|"ya"| PS["powershell -File cli/hiddenjar.ps1 build"]
  OS -->|"tidak"| SH["bash cli/hiddenjar build"]
  PS --> CMD["cmd_build"]
  SH --> CMD
  CMD --> VER["verify_compile"]
  VER --> INS["install_jar"]
  INS --> SDK[("platforms/android-37/android.jar")]
  style G fill:#f59e0b,color:#000
  style A fill:#f59e0b,color:#000
  style I fill:#f59e0b,color:#000
  style OS fill:#f59e0b,color:#000
  style VER fill:#f59e0b,color:#000
  style PS fill:#8b5cf6,color:#fff
  style SH fill:#8b5cf6,color:#fff
  style CMD fill:#2d7d46,color:#fff
  style INS fill:#2d7d46,color:#fff
  style SDK fill:#336791,color:#fff
%% fig: Alur satu invokasi buildHiddenJar
%% desc: Gradle menerjemahkan properti -P menjadi flag CLI, memilih PowerShell atau bash, lalu menjalankan cmd_build sampai install_jar menulis ke android.jar SDK.
Fig. 1: Alur satu invokasi buildHiddenJarGradle menerjemahkan properti -P menjadi flag CLI, memilih PowerShell atau bash, lalu menjalankan cmd_build sampai install_jar menulis ke android.jar SDK.

Properti diterjemahkan oleh closure hiddenJarArgs(): map valueFlags memetakan api, serial, avd, output, sdkDir, dexTools, sedangkan boolFlags memetakan onlyFramework, install, keep, keepBodies. Setiap entri hanya ditambahkan bila project.hasProperty(prop) benar (build.gradle:97-109). Senarai hasilnya diberikan ke hiddenJarInvoke(sub, extra) yang mengembalikan daftar perintah siap eksekusi (build.gradle:89-95).

-Papi bukan syarat mutlak untuk buildHiddenJar. Bila --api tidak dikirim, cmd_build membaca ro.build.version.sdk dari device yang sedang terpasang (cli/hiddenjar:251-254).

Pemetaan properti ke flag CLI

Properti -PFlag skripJenis
api--apivalue
serial--serialvalue
avd--avdvalue
output--outputvalue
sdkDir--sdk-dirvalue
dexTools--dex-toolsvalue
onlyFramework--only-frameworkbool
install--installbool
keep--keepbool
keepBodies--keep-bodiesbool

Karena pemetaan memakai hasProperty, properti yang tidak dikirim tidak menghasilkan flag dan skrip memakai nilai default-nya sendiri (build.gradle:97-109). Nilai default tiap flag terdokumentasi pada blok usage skrip (cli/hiddenjar:74-99).

Tiga flag skrip tidak punya padanan properti Gradle: --keep-dangling, --all-bootclasspath, dan --work-dir (cli/hiddenjar:74-99). Ketiganya hanya bisa dipakai lewat pemanggilan skrip langsung seperti pada Panduan CLI hiddenjar.

Cabang Windows dan PowerShell

hiddenJarInvoke memilih interpreter dari System.getProperty('os.name'). Pada Windows ia menjalankan powershell -NoProfile -ExecutionPolicy Bypass -File <ps1> <sub> ..., di platform lain bash <skrip> <sub> ... (build.gradle:89-95). Kedua path skrip dideklarasikan sebagai ext.hiddenJarBashScript dan ext.hiddenJarPsScript (build.gradle:85-86).

Port PowerShell memakai permukaan flag yang sama: argumen non-flag pertama menjadi $Command, sisanya di-parse per --flag, dan opsi tak dikenal langsung berhenti (cli/hiddenjar.ps1:494-530). Skrip bash setara: $1 menjadi subcommand, parse_args menangani flag, dan opsi asing memicu die "unknown option: $1" (cli/hiddenjar:496-527). Dengan begitu argumen hasil Gradle terbaca sama di kedua platform (README.md:94-97).

Satu perbedaan perilaku tetap ada. Skrip bash mewajibkan unzip dan berhenti dengan unzip is required (cli/hiddenjar:241-246), sedangkan doctor versi PowerShell melaporkan unzip: not required (uses the JDK 'jar' tool) dan hanya menguji adb, javac, jar, dex2jar, dan sdk-dir (cli/hiddenjar.ps1:439-454).

Efek samping dan jebakan

graph TD
  B["buildHiddenJar"] --> B1["cmd_build"]
  B1 --> B2["Installed custom jar -> ..."]
  B1 --> B3["verification failed"]
  D["hiddenJarDoctor"] --> D1["cmd_doctor"]
  D1 --> D2["adb / javac / jar / dex2jar / sdk-dir"]
  R["restoreHiddenJar"] --> R1["cmd_restore"]
  R1 --> R2["cp android.jar.orig -> android.jar"]
  R1 --> R3["restore requires --api N"]
  R1 --> R4["no backup found at $backup"]
  style B fill:#2d7d46,color:#fff
  style B1 fill:#2d7d46,color:#fff
  style B2 fill:#336791,color:#fff
  style B3 fill:#dc2626,color:#fff
  style D fill:#8b5cf6,color:#fff
  style D1 fill:#8b5cf6,color:#fff
  style D2 fill:#8b5cf6,color:#fff
  style R fill:#f59e0b,color:#000
  style R1 fill:#f59e0b,color:#000
  style R2 fill:#336791,color:#fff
  style R3 fill:#dc2626,color:#fff
  style R4 fill:#dc2626,color:#fff
%% fig: Efek tiap task pada SDK dan jalur gagalnya
%% desc: buildHiddenJar menulis android.jar setelah gate verifikasi, hiddenJarDoctor hanya membaca lingkungan, dan restoreHiddenJar menimpa android.jar dari cadangan bila cadangan itu ada.
Fig. 2: Efek tiap task pada SDK dan jalur gagalnyabuildHiddenJar menulis android.jar setelah gate verifikasi, hiddenJarDoctor hanya membaca lingkungan, dan restoreHiddenJar menimpa android.jar dari cadangan bila cadangan itu ada.

-Pinstall baru dijalankan setelah gate verifikasi lulus: cmd_build memanggil install_jar sesudah verify_compile (cli/hiddenjar:337-343). Rincian gate tersebut ada di Verifikasi Jar Kustom.

⚠️ install_jar menimpa <sdk>/platforms/android-<api>*/android.jar dan hanya membuat cadangan android.jar.orig bila cadangan itu belum ada. Build berikutnya memakai cadangan lama, bukan jar SDK asli (cli/hiddenjar:444-456).

⚠️ restoreHiddenJar gagal tanpa -Papi. Skrip berhenti dengan restore requires --api N, dan juga berhenti dengan no backup found at $backup bila android.jar.orig tidak ada. Port PowerShell memakai pesan yang sama (cli/hiddenjar:462-471, cli/hiddenjar.ps1:424-434).

hiddenJarDoctor hanya memeriksa lingkungan: adb, javac, jar, unzip, dex2jar, sdk-dir, dan daftar device. Kode keluarnya bukan nol bila alat wajib hilang (cli/hiddenjar:476-491).

⚠️ README.md mencantumkan tiga flag prop (-PonlyFramework -Pinstall -Pkeep), sedangkan komentar di build.gradle mencantumkan empat termasuk -PkeepBodies — dan boolFlags memang memetakan keepBodies (README.md:91-92) (build.gradle:80-81). Pakai daftar di build.gradle sebagai acuan.