Я провел некоторое расследование по этому поводу, и мой вывод простой: это невозможно сделать без небольшой работы. Прочтите оставшуюся часть этого ответа, чтобы узнать о том, что я нашел.
android.jar
фактически состоит из «общедоступного API» framework.jar
и core.jar
находится system/frameworks/
на устройстве. android.jar
- это своего рода то, что я бы назвал заголовком библиотеки Java, вся реализация в фактическом байтовом коде - это просто a 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
инструмент. (К сожалению.)