4
Memasang Custom android.jar ke SDK
Custom android.jar tidak mengubah perilaku runtime. Jar itu hanya membuka jalan kompilasi terhadap API @hide dan com.android.internal.*, karena javac membaca signature, bukan body method. Pemasangannya karena itu cukup satu operasi berkas: android.jar milik SDK diganti, sedangkan salinan stoknya disimpan sebagai android.jar.orig untuk rollback. Halaman ini membahas lokasi target, dua jalur pemasangan (manual dan --install), penyesuaian compileSdk/targetSdk, serta rollback. Cara membangun jar-nya sendiri ada di Panduan CLI hiddenjar, dan gerbang pemeriksaan sebelum jar boleh dipasang ada di Verifikasi Jar Kustom.
Direktori target: <SDK>/platforms/android-XX/
Sebelum menyentuh berkas apa pun, hiddenjar menentukan SDK root. Urutannya: --sdk-dir, lalu ANDROID_HOME, lalu ANDROID_SDK_ROOT, dan terakhir ~/Library/Android/sdk cli/hiddenjar:111-116. Direktori platform dicari di platforms/android-<api>, lalu platforms/android-<api>.0, lalu pola platforms/android-<api>* yang source.properties-nya memuat AndroidVersion.ApiLevel=<api> cli/hiddenjar:125-139.
| Objek | Peran | Bukti |
|---|---|---|
platforms/android-37/android.jar | berkas yang dibaca Gradle; diganti jar kustom | cli/hiddenjar:444-457 |
platforms/android-37/android.jar.orig | salinan jar stok, dibuat sekali saat instalasi pertama | cli/hiddenjar:444-457 |
platforms/android-37/source.properties | dipakai resolve_platform_dir untuk mencocokkan AndroidVersion.ApiLevel | cli/hiddenjar:125-139 |
--sdk-dir, ANDROID_HOME, ANDROID_SDK_ROOT | urutan penentuan SDK root | cli/hiddenjar:111-116 |
Kalau tidak ada direktori platform yang cocok, build berhenti sebelum menyentuh SDK, dengan pesan install it via sdkmanager "platforms;android-${api}" or pass --sdk-dir cli/hiddenjar:258-262. Artinya platform SDK harus sudah terpasang lebih dahulu; hiddenjar tidak membuatnya.
Alur pemasangan dan rollback
graph TD
out["android-37-custom.jar<br/>hasil build"] --> gate["verify_compile"]
gate -->|"gagal"| fail["die: verification failed"]
gate -->|"lolos"| opt{"OPT_INSTALL = true ?"}
opt -->|"tidak"| skip["jar tetap di disk, SDK tidak berubah"]
opt -->|"ya"| inst["install_jar"]
inst --> chk{"android.jar.orig ada?"}
chk -->|"belum"| bak["cp android.jar -> android.jar.orig"]
chk -->|"sudah"| keep["info: Backup already exists (kept)"]
bak --> cpj["cp custom jar -> platforms/android-37/android.jar"]
keep --> cpj
cpj --> sdk["compileSdkVersion 37 / targetSdkVersion 37"]
sdk --> rebuild["rebuild project"]
cpj -.->|"restore --api 37"| res["cp android.jar.orig -> android.jar"]
style out fill:#8b5cf6,color:#fff
style gate fill:#f59e0b,color:#000
style fail fill:#dc2626,color:#fff
style opt fill:#f59e0b,color:#000
style inst fill:#f59e0b,color:#000
style chk fill:#f59e0b,color:#000
style bak fill:#336791,color:#fff
style cpj fill:#336791,color:#fff
style res fill:#2d7d46,color:#fff
style rebuild fill:#2d7d46,color:#fff
style skip fill:#dc2626,color:#fff
%% fig: Pemasangan jar kustom, backup, dan rollback
%% desc: Jar hasil build melewati verify_compile, lalu install_jar membuat android.jar.orig sekali dan menimpa android.jar; restore menyalin balik backup itu.Langkah manual
README menyebut empat langkah: masuk ke <SDK location>/platforms/, menyalin dan mengganti berkas hidden API ke direktori itu (misalnya android-30/android.jar), mengubah compileSdkVersion dan targetSdkVersion ke level tersebut, lalu rebuild proyek README.md:17-221. Versi perintah konkretnya ada di dokumen build: cd ke direktori platform, cp android.jar android.jar.orig sebagai backup, lalu cp /path/to/android-custom-37.jar android.jar docs/BUILD_CUSTOM_ANDROID_JAR_FROM_EMULATOR.md:181-1892.
⚠️ Buat
android.jar.origsebelum menimpaandroid.jar. Salinan stok adalah satu-satunya sumber rollback; tanpa iturestoreberhenti denganno backup found at $backupcli/hiddenjar:462-471.
Jalur otomatis: hiddenjar build --install
Flag --install didefinisikan sebagai "install into <sdk>/platforms/android-<api>*/android.jar (auto-backup .orig)" cli/hiddenjar:89-89. Pemakaiannya digabung dengan pemilihan device, misalnya ./cli/hiddenjar build --avd Pixel_10_API_37 --install README.md:59-603.
install_jar hanya dipanggil ketika build sudah lolos verify_compile; bila verifikasi gagal, proses berhenti dengan die "verification failed (see checks above)" dan SDK tidak disentuh cli/hiddenjar:340-343. Di dalam install_jar, backup dibuat hanya jika belum ada, kalau sudah ada dicatat Backup already exists (kept), lalu jar hasil build disalin ke android.jar cli/hiddenjar:444-457. Port PowerShell melakukan hal yang sama untuk install dan restore di Windows cli/hiddenjar.ps1:410-4344.
Perintah Gradle yang setara memakai -Pinstall, dan rollback memakai task restoreHiddenJar README.md:84-895.
Menaikkan compileSdk dan targetSdk
Setelah jar terpasang, level SDK proyek harus menunjuk ke platform yang sama dengan direktori tempat jar dipasang. Repo ini sendiri memakai compileSdkVersion 37 dan targetSdkVersion 37 dengan minSdkVersion 23 build.gradle:27-316. README menambahkan catatan bahwa compileSdkVersion dan targetSdkVersion yang lebih tinggi lebih baik README.md:17-221.
Jar kustom hanya berisi stub signature, jadi lint, unit test, dan kompilasi tetap berjalan seperti pada jar SDK resmi selama namespace runtime JDK tidak ikut di-overlay — pembatasan itu dibahas di Verifikasi Jar Kustom dan Batasan Runtime dan Cakupan Hidden API.
Rollback ke android.jar.orig
hiddenjar restore --api <level> menyalin balik backup ke android.jar cli/hiddenjar:462-471. Perintah ini menolak berjalan tanpa --api dengan pesan restore requires --api N, dan menolak bila platform atau backup tidak ada cli/hiddenjar:462-471. Dari Gradle, task restoreHiddenJar meneruskan -Papi dan -PsdkDir ke subcommand yang sama build.gradle:123-1297.
⚠️
restoremenimpaandroid.jaryang sedang terpasang. Jar kustom yang tergantikan harus dibangun ulang untuk dipasang kembali, jadi simpan hasil--outputdi luar direktori SDK bila masih dibutuhkan.