Eu fiz algumas investigações sobre isso e minha conclusão é simples: isso não pode ser feito sem um pouco de trabalho. Leia o restante desta resposta para obter detalhes sobre o que descobri.
android.jar
é, na verdade, composto pela "API pública" de framework.jar
e core.jar
que é encontrada no system/frameworks/
dispositivo. android.jar
é um tipo do que eu chamaria de cabeçalho da biblioteca Java, todas as implementações no código de bytes real são apenas um throw new RuntimeException("stub");
, isso permite que você construa android.jar
(por exemplo, no Eclipse), mas a execução deve ser realizada em um dispositivo ou emulador.
A API pública do Android SDK é definida por classes / métodos / campos que não são prefixados com a @{hide}
anotação javadoc. Ou seja, tudo o que não é anotado está incluído no SDK.
android.jar
é construído a partir de fontes localizadas nas out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates
quais ele próprio é gerado pela ferramenta DroidDoc localizada em build/tools/droiddoc
.
DroidDoc é a ferramenta (provavelmente adaptada do javadoc ou usando o javadoc) que gera a documentação real do Android SDK. Como efeito colateral, e provavelmente porque já está analisando todo o javadoc, ele também expele os stubs do Android que são compilados no android.jar
que é distribuído no SDK.
Portanto, para incluir o que está oculto, você pode, se quiser incluir apenas partes específicas, apenas remover a @hide
anotação e reconstruir o SDK.
No entanto, se você quiser incluir todas as partes ocultas, as coisas ficam muito mais complicadas. Você pode modificar o DroidDoc (a fonte relevante está em build/tools/droiddoc/src/Stubs.java
) de forma que nada seja detectado como oculto. Isso é bastante trivial e eu tentei fazer isso, no entanto, os stubs que são gerados não compilam de todo.
Minha conclusão agora é que isso simplesmente não é viável. Os stubs gerados se você remover a parte do DroidDoc que detecta anotações ocultas, simplesmente não é compilável e exigiria um pouco de trabalho para compilar corretamente.
Portanto, minha resposta às suas perguntas é: Não, isso não pode ser feito sem muito trabalho. Desculpa.
Uma observação lateral sobre a mkstubs
ferramenta. mkstubs
são usados quando você constrói um complemento SDK , ou seja, os complementos que você pode encontrar no gerenciador do Android SDK de fornecedores, por exemplo, a Samsung fornecendo a você uma API adicional para coisas específicas para telefones Samsung. mkstubs
faz quase o mesmo que o processo de geração de stubs do DroidDoc; no entanto, não usa @hide
anotações, ele usa um .defs
arquivo que descreve quais pacotes / classes / campos incluir ou excluir do seu complemento SDK.
No entanto, tudo isso é irrelevante para a questão, já que o Android SDK build não usa a mkstubs
ferramenta. (Infelizmente.)