Я провел некоторые исследования по этому вопросу, и мой вывод таков: Это невозможно сделать без особых усилий. Прочитайте оставшуюся часть этого ответа, чтобы узнать подробнее о том, что я нашел.
android.jar
на самом деле состоит из "public 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
. (К сожалению.)