Zbadałem to trochę i mój wniosek jest prosty: nie da się tego zrobić bez dużej ilości pracy. Przeczytaj resztę tej odpowiedzi, aby uzyskać szczegółowe informacje na temat tego, co znalazłem.
android.jar
w rzeczywistości składa się z „publicznego interfejsu API” programu framework.jar
i core.jar
znajduje się w system/frameworks/
urządzeniu. android.jar
jest rodzajem tego, co nazwałbym nagłówkiem biblioteki Java, wszystkie implementacje w rzeczywistym kodzie bajtowym są po prostu a throw new RuntimeException("stub");
, to pozwala na kompilację android.jar
(np. w Eclipse), ale wykonanie musi być wykonane na urządzeniu lub emulatorze.
Publiczny interfejs API zestawu Android SDK jest definiowany przez klasy / metody / pola, które nie są poprzedzone @{hide}
adnotacją javadoc. To znaczy wszystko, co nie jest opisane, jest zawarte w SDK.
android.jar
jest zbudowany ze źródeł, w out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates
których sam jest generowany przez narzędzie DroidDoc znajdujące się w build/tools/droiddoc
.
DroidDoc to narzędzie (prawdopodobnie zaadaptowane z javadoc lub używające javadoc), które generuje rzeczywistą dokumentację Android SDK. Jako efekt uboczny i prawdopodobnie dlatego, że już analizuje cały javadoc, wypluwa również kody pośredniczące Androida, które są następnie kompilowane do tego, android.jar
który jest dystrybuowany w SDK.
Aby uwzględnić ukryte elementy, możesz, jeśli chcesz uwzględnić tylko określone części, po prostu usuń @hide
adnotację i przebuduj SDK.
Jeśli jednak chcesz uwzględnić wszystkie ukryte części, sprawy stają się znacznie bardziej skomplikowane. Możesz zmodyfikować DroidDoc (odpowiednie źródło jest w build/tools/droiddoc/src/Stubs.java
) tak, aby nic nie było wykrywane jako ukryte. Jest to dość trywialne i próbowałem tego, jednak generowane wówczas kody pośredniczące w ogóle się nie kompilują.
Mój wniosek jest teraz taki, że jest to po prostu niewykonalne. Stopy wygenerowane po usunięciu części DroidDoc, która wykrywa ukryte adnotacje, są po prostu niekompilowalne i wymagałyby sporo pracy, aby je poprawnie skompilować.
Tak więc moja odpowiedź na Twoje pytania brzmi: Nie, nie da się tego zrobić bez dużego nakładu pracy. Przepraszam.
Dodatkowa uwaga na temat mkstubs
narzędzia. mkstubs
są używane podczas budowania dodatku SDK , czyli dodatków, które można znaleźć w menedżerze Android SDK od dostawców, np. Samsunga udostępniającego dodatkowe API dla rzeczy specyficznych dla telefonów Samsung. mkstubs
robi to samo, co proces generowania kodów pośredniczących w DroidDoc, jednak nie używa @hide
adnotacji, używa .defs
pliku opisującego, które pakiety / klasy / pola należy uwzględnić lub wykluczyć z dodatku SDK.
Jednak to wszystko nie ma znaczenia dla pytania, ponieważ kompilacja Android SDK nie korzysta z tego mkstubs
narzędzia. (Niestety.)