Я провел некоторое расследование по этому поводу, и мой вывод простой: Это невозможно сделать без некоторой работы. Прочтите оставшуюся часть этого ответа, чтобы узнать подробнее о том, что я нашел.
android.jar
фактически состоит из "общедоступного API" framework.jar
и core.jar
, который находится в system/frameworks/
на устройстве. android.jar
- это то, что я бы назвал заголовком библиотеки Java, вся реализация в фактическом байтовом коде - это просто throw new RuntimeException("stub");
, это позволяет вам строить против android.jar
(например, в Eclipse), но выполнение должно выполняться на устройстве или эмуляторе.
Общедоступный API Android SDK определяется классами / методами / полями, которые не имеют префикс аннотации @{hide}
javadoc. Т.е. все, что не аннотировано, включено в SDK.
android.jar
построен из источников, расположенных в out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates
, который сам генерируется инструментом DroidDoc, расположенным в build/tools/droiddoc
.
DroidDoc - это инструмент (возможно, адаптированный из javadoc или использующий javadoc), который генерирует фактическую документацию Android SDK. В качестве побочного эффекта и, вероятно, из-за того, что он уже анализирует всю документацию javadoc, он также извергает заглушки Android, которые затем компилируются в android.jar
, который распространяется в SDK.
Итак, чтобы включить скрытый материал, вы можете, если вы хотите включить только определенные части, просто удалите аннотацию @hide
и перестройте SDK.
Однако, если вы хотите включить все скрытые части, все становится намного сложнее. Вы можете изменить DroidDoc (соответствующий источник находится в build/tools/droiddoc/src/Stubs.java
) так, чтобы ничего не обнаруживалось как скрытое. Это довольно тривиально, и я пробовал это, однако генерируемые затем заглушки вообще не компилируются.
На данный момент я пришел к выводу, что это просто невозможно. Заглушки, сгенерированные, если вы удалите часть DroidDoc, которая обнаруживает скрытые аннотации, просто не компилируются, и для правильной компиляции потребуется довольно много работы.
Итак, мой ответ на ваши вопросы: нет, этого нельзя сделать, не проделав большой работы. Извините.
Замечание об инструменте mkstubs
. mkstubs
используются при создании надстройки SDK, т. Е. Надстроек, которые вы можете найти в диспетчере Android SDK от поставщиков, например Samsung предоставляет вам дополнительный API для вещей, специфичных для телефонов Samsung. mkstubs
выполняет во многом то же самое, что и процесс создания заглушек DroidDoc, однако он не использует @hide
аннотации, он использует .defs
файл, описывающий, какие пакеты / классы / поля включить или исключить из вашего дополнения SDK.
Однако все это не имеет отношения к вопросу, поскольку сборка Android SDK не использует инструмент mkstubs
. (К несчастью.)
person
Bjarke Freund-Hansen
schedule
05.03.2012
@Hidden
метку API, к которому вы хотите получить доступ, а затем выполнитьmake update-api
иmake SDK
, чтобы создать свой собственный SDK. - person dreamtale   schedule 02.03.2012