Die "Stubs" sind hier der Framework-API-Stub, der beim Ausführen von javadoc tool generiert wird.
In den meisten Fällen, wenn wir über Stub-Datei in Android sprechen, meinen wir die Java-Datei, die von aidl tool generiert wird. Zum Beispiel How to generate stub in android? - Stack Overflow
Insbesondere sehen, das Android-Build-System enthält ein Makefile droiddoc.mk
genannt, die verwendet werden können, um zu generieren Dokumentation, Java API Stubs und API XML-Dateien, die tatsächlich ruft javadoc.
droiddoc.mk
ist unter build/core
. In build/core/config.mk
gibt es eine Variable mit dem Namen BUILD_DROIDDOC
, um es einfacher zu machen, die droiddoc.mk
aufzunehmen.
Blick auf die droiddoc.mk
, ruft javadoc:
javadoc \
\@$(PRIVATE_SRC_LIST_FILE) \
-J-Xmx1280m \
$(PRIVATE_PROFILING_OPTIONS) \
-quiet \
-doclet com.google.doclava.Doclava \
-docletpath $(PRIVATE_DOCLETPATH) \
-templatedir $(PRIVATE_CUSTOM_TEMPLATE_DIR) \
$(PRIVATE_DROIDDOC_HTML_DIR) \
$(addprefix -bootclasspath ,$(PRIVATE_BOOTCLASSPATH)) \
$(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
-sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \
-d $(PRIVATE_OUT_DIR) \
$(PRIVATE_CURRENT_BUILD) $(PRIVATE_CURRENT_TIME) \
$(PRIVATE_DROIDDOC_OPTIONS) \
&& touch -f [email protected]
Es gibt nichts über den Stub richtig? Keine Sorge, feststellen, dass es eine ist PRIVATE_DROIDDOC_OPTIONS
variabel und
PRIVATE_DROIDDOC_OPTIONS := $(LOCAL_DROIDDOC_OPTIONS)
Viele Android.mk Dateien in AOSP, zum Beispiel der framework/base/Android.mk
, enthält die include $(BUILD_DROIDDOC)
zu docs zu erzeugen. In framework/base/Android.mk
gibt es ein Stück Code:
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
-stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android_stubs_current_intermediates/src \
-api $(INTERNAL_PLATFORM_API_FILE) \
-nodocs
LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_DROIDDOC)
Die LOCAL_DROIDDOC_OPTIONS
enthält eine -stubs
Option. Und es wird schließlich in den Javadoc-Befehl von droiddoc.mk verwendet werden.
Allerdings können wir feststellen, dass das Javadoc keine Option wie -stubs
enthält. Der Schlüssel ist, dass Sie den Inhalt und das Format der Ausgabe des Javadoc-Tools mithilfe von Doclets anpassen können. Das Javadoc-Tool verfügt über ein standardmäßiges "integriertes" Doclet, das so genannte Standard-Doclet, das HTML-formatierte API-Dokumentation generiert. Sie können das Standard-Doclet ändern oder eine Unterklasse erstellen oder ein eigenes Doclet schreiben, um HTML, XML, MIF, RTF oder ein anderes gewünschtes Ausgabeformat zu generieren.
Wir können die Option -doclet
verwenden, um unser angepasstes Doclet anzugeben. Und der Javadoc-Befehl in droiddoc.mk verwendet die -doclet com.google.doclava.Doclava
. Dieses Doclet erhält die Option -stubs
.
Blick auf die Doclava Implementierung unter external/doclava/src/com/google/doclava/Doclava.java
else if (a[0].equals("-stubs")) {
stubsDir = a[1];
} else if (a[0].equals("-stubpackages")) {
stubPackages = new HashSet<String>();
for (String pkg : a[1].split(":")) {
stubPackages.add(pkg);
}
}
Es empfängt die -stubs Option. Und hier ist, wie es das StubsDir verarbeitet.
// Stubs
if (stubsDir != null || apiFile != null || proguardFile != null) {
Stubs.writeStubsAndApi(stubsDir, apiFile, proguardFile, stubPackages);
}
und verfolgt die Umsetzung der Stubs.writeStubsAndApi
, können Sie sehen, warum der Inhalt in den Stub-Dateien so sind.
Sie können sogar Ihre eigenen Java-Dateien schreiben und Ihre Stubs erzeugen wie die Testfälle unter build/tools/droiddoc/test
.
http://stackoverflow.com/questions/1264530/how-to-generate-stub-in-android?rq=1 kann einige Antworten haben, nicht sicher, obwohl ich nicht viel darüber weiß. –
Meine Frage ist anders. Mit Stubs meine ich speziell die .java-Dateien, die im oben genannten Verzeichnis als Teil des Build-Prozesses von Android produziert werden. –