Pertanyaan Bagaimana cara saya membangun SDK Android dengan API tersembunyi dan internal yang tersedia?


Saya ingin membangun kembali SDK Android (atau lebih tepatnya hanya android.jar) untuk menyertakan API tersembunyi dan internal.

Saya tidak dapat menemukan dokumentasi atau diskusi apa pun tentang cara melakukan hal ini. Saya memiliki lingkungan build CyanogenMod Ubuntu sudah setup yang mampu membangun cm7.

Sekarang, saya membaca bahwa membuat SDK akan membangun SDK tetapi saya ingin membangun SDK yang menyertakan metode dan bidang yang ditandai sebagai tersembunyi menggunakan @hide. Apakah ini mungkin?

Yang ingin saya lakukan adalah membuat perubahan ke aplikasi yang menggunakan API tersembunyi dan untuk membangunnya kembali, saya ingin menggunakan SDK yang dimodifikasi.


76
2017-10-25 10:55


asal


Jawaban:


Ini adalah apa yang selalu saya lakukan untuk menggunakan api tersembunyi.

  1. Buat repo atau unduh guci dari https://sites.google.com/site/hippunosource/home/android/androidnohide-apiwo-shi-yongsuru-rifurekushonha-wei-shi-yong
  2. salin keluar / target / umum / obj / JAVA_LIBRARIES / framework_intermediates / classes.jar (lebih baik untuk mengganti namanya sebagai sesuatu seperti framework_all.jar)
  3. konfigurasi jalur pembuatan proyek Anda -> pustaka -> tambahkan guci eksternal ini. Dalam Order dan Ekspor, pindahkan ke atas dan sebelum android.jar

61
2017-11-15 16:10



Saya telah melakukan beberapa penyelidikan ke dalam ini, dan kesimpulan saya hanyalah: Ini tidak dapat dilakukan tanpa sedikit kerja. Baca sisa jawaban ini untuk perincian tentang apa yang saya temukan.


android.jar sebenarnya terdiri dari "api publik" dari framework.jar dan core.jar yang ditemukan di system/frameworks/ di perangkat. android.jar adalah sejenis apa yang saya sebut sebagai header perpustakaan Java, semua implementasi dalam kode byte sebenarnya hanya a throw new RuntimeException("stub");, ini memungkinkan Anda membangun melawan android.jar (mis. dalam Eclipse), tetapi eksekusi harus dilakukan pada perangkat atau emulator.

API publik SDK Android ditentukan oleh kelas / metode / bidang yang tidak diawali dengan @{hide} anotasi javadoc. Yaitu. semuanya itu tidak dianotasi termasuk dalam SDK.

android.jar dibangun dari sumber yang berlokasi di out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates yang dibuat oleh alat itu sendiri DroidDoc terletak di build/tools/droiddoc.

DroidDoc adalah alat (mungkin diadaptasi dari javadoc, atau menggunakan javadoc) yang menghasilkan dokumentasi Android SDK yang sebenarnya. Sebagai efek samping, dan mungkin karena sudah menguraikan semua javadoc, itu juga memuntahkan android bertopik yang kemudian dikompilasi ke dalam android.jar yang didistribusikan di SDK.

Jadi untuk memasukkan hal-hal yang tersembunyi Anda bisa, jika Anda hanya ingin memasukkan bagian-bagian tertentu, cukup hapus @hide anotasi dan membangun ulang SDK.

Namun jika Anda ingin memasukkan semua bagian yang tersembunyi, semuanya menjadi lebih rumit. Anda dapat memodifikasi DroidDoc (sumber yang relevan ada di build/tools/droiddoc/src/Stubs.java) sehingga tidak ada yang terdeteksi sebagai tersembunyi. Ini cukup sepele dan saya telah mencoba ini, namun stub yang kemudian dibuat tidak dapat dikompilasi sama sekali.

Kesimpulan saya sekarang adalah ini tidak layak. Rintisan yang dihasilkan jika Anda menghapus bagian DroidDoc yang mendeteksi anotasi tersembunyi, sama sekali tidak dapat dikompilasi, dan akan membutuhkan sedikit kerja untuk dikompilasi dengan benar.

Jadi jawaban saya untuk pertanyaan Anda adalah: Tidak, ini tidak dapat dilakukan, tanpa melakukan banyak pekerjaan. Maaf.


Catatan tambahan tentang mkstubs alat. mkstubs digunakan saat Anda membuat Addon SDK, yaitu addons yang dapat Anda temukan di pengelola SDK Android dari vendor, mis. Samsung menyediakan Anda dengan API tambahan untuk hal-hal khusus untuk ponsel Samsung. mkstubs tidak banyak sama dengan proses generasi rintisan DroidDoc, namun tidak digunakan @hide anotasi, menggunakan an .defs file yang menjelaskan paket / kelas / bidang mana yang harus disertakan atau dikecualikan dari addon SDK Anda.

Namun ini semua tidak relevan dengan pertanyaan, seperti yang dilakukan oleh SDK Android tidak menggunakan mkstubs alat. (Sayangnya.)


39
2018-03-05 10:23



Kita bisa merekonstruksi file * .jar dari platform Android.

Pertama, hubungkan ADB ke perangkat Anda. Lalu lari:

adb pull /system/framework/core.jar .
adb pull /system/framework/framework.jar .

Itu core.jar berisi pustaka Java standar (java.*) dan framework.jar berisi pustaka Android (android.*). Ini belum dapat digunakan, karena file sebenarnya dalam format DEX, bukan format JAR.

Kita bisa mengonversi DEX-formatted * .jars ini menjadi JARs nyata menggunakan alat seperti dex2jar:

dex2jar core.jar
dex2jar framework.jar

Kemudian tarik guci ini menggunakan "Tambahkan JAR Eksternal ..." (dengan asumsi Anda menggunakan Eclipse ADT)

  • klik kanan pada Project → Properties → Java Build Path → Libraries → Add External JARs... → (Pilih core-dex2jar.jar dan framework-dex2jar.jar dari atas).

Ini akan memungkinkan Anda untuk menggunakan internal dan beberapa Java 7 API. (APK yang dihasilkan, sejauh yang saya bisa lihat, tidak mengandung kode aktual dari JARs.)


28
2017-11-25 10:09



Untuk Lollipop, alirannya sedikit berbeda:

  1. Dapatkan /system/framework/arm/boot.oat dari perangkat lollipop

  2. Gunakan 'java -jar oat2dex.jar boot boot.oat '

  3. Anda akan mendapat 2 folder: dex dan odex. Pergi ke dex dan buat 'java -jar dex2jar.jar framework.dex '
  4. Ubah nama framework.jar yang dihasilkan ke .zip, ekstrak, dan temukan kelas yang Anda butuhkan
  5. Buka [sdk_path] / platform / [target_platform] dan ekstrak android.jar (pertama ganti namanya menjadi zip).
  6. Salin file dari kerangka yang diekstrak ke diekstraksi android.jar. Kemudian kompres untuk zip dan beri nama untuk .jar :)

id: mungkin Anda perlu mengulangi langkah 4-6 untuk 'framework_classes2.dex'


16
2018-02-22 08:08



DroidCon 2011

Di sini Erik Hellman dari Sony Ericson menjelaskan cara mengakses API Android yang tersembunyi:

http://vimeo.com/30180393 (Hmm link tidak tampak berfungsi).

Goto DroidCon halaman web Hari 2 gulir ke bawah Menggunakan Hidden APIs 10:15 dan Anda bisa melihatnya di sana.

Tautan mati!

Saya telah menemukan yang ini: http://skillsmatter.com/podcast/os-mobile-server/hidden-api tak tahu berapa lama lagi

API resmi di SDK Android biasanya cukup untuk sebagian besar aplikasi normal. Namun, terkadang ada situasi di mana pengembang membutuhkan akses ke layanan sistem internal, API, dan sumber daya yang tidak dipublikasikan dalam API resmi. Untungnya, API ini masih tersedia melalui beberapa trik pintar dan seringkali dapat berguna ketika mengembangkan solusi baru dan inovatif di atas Android. Dalam sesi ini, Anda akan belajar cara mengakses dan menggunakan API yang tersembunyi dan terlindungi ini, batasan penggunaannya, dan beberapa tip 'tidak menipu tentang cara menggunakannya secara aman dan terkontrol di berbagai perangkat vendor dan versi Android. Penonton akan melihat beberapa demo canggih yang biasanya tidak dapat Anda lakukan dengan Android. Harapkan sesi yang cukup canggih dengan banyak wawasan di internal platform Android.


15
2017-10-25 11:37



Coba lihat ini:

Target akhir artikel ini adalah memberi pengembang kekuatan API Internal dan Tersembunyi tanpa menggunakan refleksi. Jika Anda menyelesaikan semua langkah yang dijelaskan dalam beberapa bagian selanjutnya, Anda akan dapat menggunakannya Intern dan Tersembunyi API seolah-olah mereka adalah API terbuka publik. Tidak akan ada kebutuhan untuk refleksi.

Tetapi jika Anda menggunakan API non-publik ini maka Anda harus menyadari bahwa aplikasi Anda berisiko besar. Pada dasarnya tidak ada jaminan bahwa API tidak akan rusak dengan pembaruan berikutnya ke OS Android. Bahkan tidak ada jaminan tentang perilaku yang konsisten di seluruh perangkat dari vendor yang berbeda. Anda benar-benar sendirian.

Ada tiga skenario yang mungkin ingin Anda ikuti:

  1. Aktifkan keduanya intern dan tersembunyi API (skenario A)
  2. Aktifkan saja tersembunyi API (skenario B)
  3. Aktifkan saja intern API (skenario C)

Skenario A adalah jumlah B dan C. Skenario B adalah yang paling mudah (tidak memerlukan modifikasi plugin ADT gerhana).

Skenario A: baca bagian 1, 2, 3, 4, 5

Skenario B: baca bagian 1, 2, 3, 5

Skenario C: baca bagian 1, 2, 3, 4, 5


12
2017-11-10 18:18



Anda dapat mengunduh yang dimodifikasi android.jar untuk digunakan sebagai API tersembunyi dari repositori ini. Ikuti instruksi di sana.


5
2017-09-17 08:50