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

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

1

Ringkasan Proyek

android-hidden-api adalah repository yang menyediakan bahan untuk memakai API Android yang disembunyikan Google, baik pada tahap kompilasi maupun pada tahap runtime. Hidden API adalah class dan method di android.jar yang bertanda @hide, sedangkan internal API adalah isi package com.android.internal di framework.jar; README tetap menyebut keduanya sebagai hidden API. README.md:3-8

Hidden API dan internal API

Perbedaan istilah ini menentukan alat yang dipakai, jadi keduanya perlu dipisahkan lebih dulu.

IstilahLokasiIsi
Hidden APIandroid.jarclass dan method dengan atribut javadoc @hide
Internal APIframework.jar, package com.android.internalclass dan resource internal framework

README menegaskan bahwa satu istilah tetap dipakai untuk dua asal yang berbeda, sehingga pembaca harus memeriksa lokasi asalnya saat mencari sebuah API. README.md:3-8

Dua jalur pemakaian

Repository ini tidak memaksa satu cara. Ada jalur jar kustom untuk urusan kompilasi, dan jalur artifact untuk urusan resource internal.

graph TD
  dev["developer"] --> pick{"perlu apa?"}
  pick -->|"compile melawan hidden API"| jar["custom android.jar"]
  pick -->|"hanya resource internal"| lib["artifact android-hidden-api"]
  jar --> script["cli/hiddenjar"]
  jar --> task["task buildHiddenJar"]
  script --> sdk["platforms/android-XX/android.jar"]
  task --> sdk
  sdk --> build["kompilasi lolos"]
  lib --> acc["InternalAccessor"]
  lib --> hold["ResourcesHolder"]
  acc --> read["resource com.android.internal terbaca"]
  build -.->|"runtime API 28+"| block["non-SDK blocklist"]
  style pick fill:#f59e0b,color:#000
  style sdk fill:#336791,color:#fff
  style lib fill:#8b5cf6,color:#fff
  style acc fill:#8b5cf6,color:#fff
  style hold fill:#8b5cf6,color:#fff
  style build fill:#2d7d46,color:#fff
  style read fill:#2d7d46,color:#fff
  style block fill:#dc2626,color:#fff
%% fig: Dua jalur pemakaian android-hidden-api
%% desc: Jalur jar kustom membuka kompilasi melawan hidden API, jalur artifact membuka resource internal saat runtime, dan non-SDK blocklist tetap berlaku pada runtime.
Fig. 1: Dua jalur pemakaian android-hidden-apiJalur jar kustom membuka kompilasi melawan hidden API, jalur artifact membuka resource internal saat runtime, dan non-SDK blocklist tetap berlaku pada runtime.

Jalur pertama menaruh custom android.jar ke <SDK location>/platforms/, mengganti misalnya android-30/android.jar, lalu menaikkan compileSdkVersion dan targetSdkVersion sebelum build ulang. README.md:14-20 Jar kustom itu dibuat oleh hiddenjar, sebuah CLI yang menarik framework jar dari emulator atau device berjalan lewat adb, mengubah DEX menjadi .class, menggabungkan seluruh $BOOTCLASSPATH termasuk modul mainline/APEX, memangkas hasilnya menjadi stub signature-only, lalu memverifikasi bahwa jar tersebut benar-benar dapat mengompilasi satu hidden API. README.md:26-35 Skripnya tersedia dalam dua versi, cli/hiddenjar untuk macOS/Linux dan cli/hiddenjar.ps1 untuk Windows, dengan VERSION="1.0.0" dan dex-tools 2.4.37. cli/hiddenjar:15-19

Jalur yang sama dapat dijalankan lewat Gradle wrapper melalui task buildHiddenJar, hiddenJarDoctor, dan restoreHiddenJar. build.gradle:111-129 Prasyaratnya JDK, adb, serta emulator berjalan pada API ≥ 34 atau device fisik; citra emulator yang lebih lama mungkin membawa framework.jar yang sudah dipangkas. README.md:37-43

AspekCustom android.jarArtifact android-hidden-api
Alat utamacli/hiddenjar atau task Gradle buildHiddenJarInternalAccessor dan ResourcesHolder
Yang dibukahidden class dan method saat kompilasiresource com.android.internal.R saat runtime
Letak hasil<SDK location>/platforms/android-30/android.jardeklarasi implementation di blok dependencies
Batastidak melewati non-SDK blocklist saat runtimetidak menyentuh hidden class atau method

Jalur resource internal

Jalur kedua ditujukan untuk pemakaian resource internal saja. Cukup tambahkan implementation 'com.anggrayudi:android-hidden-api:X.Y'; bila memakai versi SNAPSHOT, repository snapshot ditambahkan ke blok allprojects. README.md:105-114 Pemakaiannya berupa panggilan statis seperti InternalAccessor.getString("accept") dan InternalAccessor.getColor("config_defaultNotificationColor"). README.md:134-138

InternalAccessor menyatakan dirinya sebagai utilitas untuk seluruh resource di class com.android.internal.R dan tidak lagi memakai Java reflection. resources-helper/src/main/java/com/anggrayudi/hiddenapi/InternalAccessor.java:14-19 ResourcesHolder sejak versi 0.0.5 dialihkan fungsinya: menyimpan objek apa pun dan mengirimnya lewat Broadcast, bukan lagi menampung resource hasil reflection. resources-helper/src/main/java/com/anggrayudi/hiddenapi/ResourcesHolder.java:20-23

Rincian keduanya ada di InternalAccessor: Membaca Resource com.android.internal dan ResourcesHolder dan Pengiriman via Broadcast.

Batas dukungan

⚠️ Custom android.jar hanya membuka tahap kompilasi. Sejak Android 9 (API 28), Android tetap menegakkan non-SDK blocklist untuk aplikasi non-system saat runtime. README.md:99-100

Dokumen metode build menulis batas yang sama: "Compile-time success ≠ runtime access." docs/BUILD_CUSTOM_ANDROID_JAR_FROM_EMULATOR.md:38-39 Perilaku runtime dibahas lebih jauh di Batas Runtime dan Cakupan Hidden API.

Isi repository

settings.gradle hanya memuat dua modul, yaitu :resources-helper dan :sample. settings.gradle:9 Keduanya dikompilasi dengan compileSdkVersion 37, minSdkVersion 23, dan targetSdkVersion 37. build.gradle:24-36 Koordinat publikasinya GROUP=com.anggrayudi dengan artifact android-hidden-api pada VERSION_NAME=35.0-SNAPSHOT, dan deskripsi POM-nya "A library that provides access to Android hidden APIs and internal resources." gradle.properties:20-29

Langkah pemasangan jar, opsi CLI, dan konfigurasi build dibahas terpisah di Memasang Custom android.jar ke SDK, Panduan CLI hiddenjar, dan Konfigurasi Build Gradle. Susunan modul di dalam repository dijelaskan di Arsitektur Repository.