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-1301). Perintah yang didukung wrapper ini juga dicatat sebagai komentar di kepala blok tersebut (build.gradle:67-842).
Tiga task dan subcommand yang dijalankan
| Task | Tipe | Subcommand | Argumen tambahan | Sumber |
|---|---|---|---|---|
buildHiddenJar | Exec | build | seluruh hasil hiddenJarArgs() | build.gradle:111-1153 |
hiddenJarDoctor | Exec | doctor | [] (kosong) | build.gradle:117-1214 |
restoreHiddenJar | Exec | restore | hanya --api dan --sdk-dir | build.gradle:123-1305 |
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-1305).
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.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-1096). Senarai hasilnya diberikan ke hiddenJarInvoke(sub, extra) yang mengembalikan daftar perintah siap eksekusi (build.gradle:89-957).
-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 -P | Flag skrip | Jenis |
|---|---|---|
api | --api | value |
serial | --serial | value |
avd | --avd | value |
output | --output | value |
sdkDir | --sdk-dir | value |
dexTools | --dex-tools | value |
onlyFramework | --only-framework | bool |
install | --install | bool |
keep | --keep | bool |
keepBodies | --keep-bodies | bool |
Karena pemetaan memakai hasProperty, properti yang tidak dikirim tidak menghasilkan flag dan skrip memakai nilai default-nya sendiri (build.gradle:97-1096). 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-957). Kedua path skrip dideklarasikan sebagai ext.hiddenJarBashScript dan ext.hiddenJarPsScript (build.gradle:85-868).
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-5309). 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-9710).
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-45411).
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.-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_jarmenimpa<sdk>/platforms/android-<api>*/android.jardan hanya membuat cadanganandroid.jar.origbila cadangan itu belum ada. Build berikutnya memakai cadangan lama, bukan jar SDK asli (cli/hiddenjar:444-456).
⚠️
restoreHiddenJargagal tanpa-Papi. Skrip berhenti denganrestore requires --api N, dan juga berhenti denganno backup found at $backupbilaandroid.jar.origtidak ada. Port PowerShell memakai pesan yang sama (cli/hiddenjar:462-471, cli/hiddenjar.ps1:424-43412).
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.mdmencantumkan tiga flag prop (-PonlyFramework -Pinstall -Pkeep), sedangkan komentar dibuild.gradlemencantumkan empat termasuk-PkeepBodies— danboolFlagsmemang memetakankeepBodies(README.md:91-9213) (build.gradle:80-8114). Pakai daftar dibuild.gradlesebagai acuan.