Pregunta ¿Cómo construyo el SDK de Android con API internas y ocultas disponibles?


Quiero reconstruir el SDK de Android (o más bien solo el android.jar) para incluir las API internas y ocultas.

No pude encontrar ninguna documentación o discusión sobre cómo hacerlo. Tengo un entorno de compilación Ubuntu CyanogenMod ya configurado que puede construir cm7.

Ahora, leí que SDK creará el SDK, pero quiero construir un SDK que incluya métodos y campos que estén marcados como ocultos usando @hide. es posible?

Lo que quiero hacer es realizar cambios en una aplicación que utiliza API oculta y para poder reconstruirla, me gustaría usar el SDK modificado.


76
2017-10-25 10:55


origen


Respuestas:


Esto es lo que siempre hago para usar api oculto.

  1. Construya el repositorio o descargue frascos de https://sites.google.com/site/hippunosource/home/android/androidnohide-apiwo-shi-yongsuru-rifurekushonha-wei-shi-yong
  2. copia hacia fuera / target / common / obj / JAVA_LIBRARIES / framework_intermediates / classes.jar (mejor cambiarle el nombre a algo como framework_all.jar)
  3. configure su ruta de compilación del proyecto -> bibliotecas -> agregue estos archivos jar externos. En Order and Export, muévelo hacia arriba y antes de android.jar

61
2017-11-15 16:10



He investigado un poco sobre esto, y mi conclusión es simple: Esto no puede hacerse sin bastante trabajo. Lea el resto de esta respuesta para obtener detalles sobre lo que he encontrado.


android.jar en realidad se compone de la "API pública" de framework.jar y core.jar que se encuentra en system/frameworks/ en el dispositivo. android.jar es un tipo de lo que yo llamaría encabezado de la biblioteca Java, toda implementación en el código de bytes real es solo una throw new RuntimeException("stub");, esto te permite construir contra android.jar (por ejemplo, en Eclipse), pero la ejecución debe realizarse en un dispositivo o emulador.

La API pública de Android SDK se define por clases / métodos / campos que son no prefijado con el @{hide} anotación de javadoc. Es decir. todo lo que es no anotado está incluido en el SDK.

android.jar se construye a partir de las fuentes ubicadas en out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates que a su vez es generado por la herramienta DroidDoc situado en build/tools/droiddoc.

DroidDoc es la herramienta (probablemente adaptada de javadoc, o que usa javadoc) que genera la documentación real de Android SDK. Como un efecto secundario, y probablemente porque ya está analizando todo el javadoc, también arroja los talones de Android que luego se compilan en el android.jar que se distribuye en el SDK.

Entonces, para incluir las cosas que están ocultas, si solo quieres incluir partes específicas, simplemente elimina la @hide anotación y reconstruir el SDK.

Sin embargo, si quieres incluir todas las partes ocultas, las cosas se vuelven mucho más complicadas. Puedes modificar DroidDoc (la fuente relevante está en build/tools/droiddoc/src/Stubs.java) tal que nada se detecta como oculto. Esto es bastante trivial y lo he intentado, sin embargo, los apéndices que se generan no compilan en absoluto.

Mi conclusión ahora es que esto simplemente no es factible. Los stubs generados si elimina la parte de DroidDoc que detecta anotaciones ocultas, simplemente no son compilables y requeriría bastante trabajo para compilarse correctamente.

Entonces mi respuesta a sus preguntas es: No, esto no se puede hacer sin hacer mucho trabajo. Lo siento.


Una nota al margen sobre el mkstubs herramienta. mkstubs se usan cuando construyes un Complemento SDK, es decir, los complementos que puede encontrar en el administrador de Android SDK de los proveedores, p. Samsung le proporciona una API adicional para cosas específicas de teléfonos Samsung. mkstubs hace mucho lo mismo que el proceso de generación de stubs DroidDoc, sin embargo, no utiliza @hide anotaciones, usa una .defs archivo que describe qué paquetes / clases / campos incluir o excluir de su complemento SDK.

Sin embargo, esto es irrelevante para la pregunta, ya que la compilación del SDK de Android no no utilizar el mkstubs herramienta. (Desafortunadamente.)


39
2018-03-05 10:23



Podríamos reconstruir los archivos * .jar de la plataforma Android.

Primero, conecta ADB a tu dispositivo. Entonces corre:

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

los core.jar contiene las bibliotecas estándar de Java (java.*) y el framework.jar contener las bibliotecas de Android (android.*) Esto no se puede utilizar todavía, ya que los archivos reales están en formato DEX, no en formato JAR.

Podríamos convertir estos * .jars con formato DEX en archivos JAR reales utilizando herramientas como dex2jar:

dex2jar core.jar
dex2jar framework.jar

Luego, ingrese estos archivos usando "Agregar archivos JAR externos ..." (suponiendo que esté utilizando Eclipse ADT)

  • haga clic derecho sobre Project → Properties → Java Build Path → Libraries → Add External JARs... → (Elija el core-dex2jar.jar y framework-dex2jar.jar desde arriba).

Esto le permitirá usar las API internas y algunas de Java 7. (La APK generada, hasta donde puedo ver, no contiene ningún código real de los JAR).


28
2017-11-25 10:09



Para Lollipop, el flujo es un poco diferente:

  1. Obtenga /system/framework/arm/boot.oat del dispositivo lollipop

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

  3. Obtendrá 2 carpetas: dex y odex. Ve a dex y crea 'java -jar dex2jar.jar framework.dex '
  4. Cambie el nombre resultante framework.jar por .zip, extraiga y encuentre las clases que necesita
  5. Vaya a [ruta_sdk] / platforms / [plataforma_destino] y extraiga android.jar (primero cámbiele el nombre a zip).
  6. Copie los archivos del marco extraído a android.jar extraído. Luego comprime para comprimir y cambiar el nombre a .jar :)

ps: probablemente necesites repetir los pasos 4-6 para 'framework_classes2.dex'


16
2018-02-22 08:08



DroidCon 2011

Aquí Erik Hellman de Sony Ericson explica cómo acceder a las API de Android ocultas:

http://vimeo.com/30180393 (El enlace Hmm no parece funcionar).

Ve a la Página web de DroidCon Día 2 desplazarse hacia abajo para Usando APIs ocultas 10:15 y puedes verlo allí.

¡Los enlaces están muriendo!

Encontré este: http://skillsmatter.com/podcast/os-mobile-server/hidden-api no sé cuánto tiempo pasará

Las API oficiales en Android SDK suelen ser suficientes para la mayoría de las aplicaciones normales. Sin embargo, a veces hay situaciones en las que un desarrollador necesita acceder a los servicios del sistema interno, las API y los recursos que no están publicados en las API oficiales. Afortunadamente, estas API todavía están disponibles a través de algunos trucos ingeniosos y, a menudo, pueden ser útiles cuando se desarrolla una solución nueva e innovadora sobre Android. En esta sesión, aprenderá cómo acceder y usar estas API ocultas y protegidas, las limitaciones de su uso y algunos consejos y sugerencias sobre cómo usarlas de forma segura y controlada en múltiples dispositivos de vendedores y versiones de Android. La audiencia verá varias demos avanzadas que normalmente no puedes hacer con Android. Espere una sesión bastante avanzada con muchas ideas en el interior de la plataforma Android.


15
2017-10-25 11:37



Intenta mirar esta:

El objetivo final de estos artículos es brindar a los desarrolladores el poder de las API internas y ocultas sin usar la reflexión. Si completa todos los pasos descritos en las siguientes partes, podrá usar Interno y Oculto API como si fueran API abiertas públicas. No habrá necesidad de reflexión.

Pero si usa estas API no públicas, debe tener en cuenta que su aplicación corre un gran riesgo. Básicamente, no hay garantías de que las API no se rompan con la próxima actualización del sistema operativo Android. Incluso no hay garantías sobre el comportamiento constante en dispositivos de diferentes proveedores. Estás completamente solo.

Hay tres escenarios que puede seguir:

  1. Habilite ambos interno y oculto API (escenario A)
  2. Habilitar solo oculto API (escenario B)
  3. Habilitar solo interno API (escenario C)

El escenario A es una suma de B y C. El escenario B es el más fácil (no requiere modificaciones de complementos ADT de eclipse).

Escenario A: leer partes 1, 2, 3, 4, 5

Escenario B: leer partes 1, 2, 3, 5

Escenario C: leer partes 1, 2, 3, 4, 5


12
2017-11-10 18:18



Puedes descargar el modificado android.jar para ser utilizado como API ocultas de este repositorio. Sigue las instrucciones allí.


5
2017-09-17 08:50