He investigado un poco sobre esto y mi conclusión es sencilla: esto no se puede hacer sin bastante trabajo. Lea el resto de esta respuesta para obtener detalles sobre lo que he encontrado.
android.jar
en realidad está compuesto por la "API pública" de framework.jar
y core.jar
que se encuentra en system/frameworks/
el dispositivo. android.jar
es una especie de lo que yo llamaría el encabezado de la biblioteca de Java, todas las implementaciones en el código de bytes real son solo una throw new RuntimeException("stub");
, esto le permite construir contraandroid.jar
(por ejemplo, en Eclipse), pero la ejecución debe realizarse en un dispositivo o emulador.
La API pública del SDK de Android se define mediante clases / métodos / campos que no tienen como prefijo la @{hide}
anotación javadoc. Es decir todo lo que no es anotado está incluido en el SDK.
android.jar
se construye a partir de las fuentes ubicadas en las out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates
que se genera la herramienta DroidDoc ubicada enbuild/tools/droiddoc
.
DroidDoc es la herramienta (probablemente adaptada de javadoc o usando javadoc) que genera la documentación real del SDK de Android. Como efecto secundario, y probablemente porque ya está analizando todo el javadoc, también arroja los stubs de Android que luego se compilan en elandroid.jar
que se distribuye en el SDK.
Entonces, para incluir las cosas que están ocultas, podría, si solo desea incluir partes específicas, simplemente elimine el @hide
anotación y reconstruya el SDK.
Sin embargo, si desea incluir todas las partes ocultas, las cosas se complican mucho más. Puede modificar DroidDoc (la fuente relevante está enbuild/tools/droiddoc/src/Stubs.java
) de modo que no se detecte nada como oculto. Esto es bastante trivial y lo he intentado, sin embargo, los stubs que luego se generan no se compilan en absoluto.
Mi conclusión a estas alturas 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ían 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 la mkstubs
herramienta. mkstubs
se utilizan cuando crea un complemento de SDK , es decir, los complementos que puede encontrar en el administrador de SDK de Android de los proveedores, por ejemplo, Samsung le proporciona una API adicional para cosas específicas de los teléfonos Samsung. mkstubs
hace lo mismo que el proceso de generación de stubs de DroidDoc, sin embargo, no usa @hide
anotaciones, usa un .defs
archivo que describe qué paquetes / clases / campos incluir o excluir de su complemento SDK.
Sin embargo, todo esto es irrelevante para la pregunta, ya que la compilación del SDK de Android no usa la mkstubs
herramienta. (Desafortunadamente.)