2013-04-18 21 views
5

Androidのビルドプロセスが生成するandroid.jar内の各クラスのためのJavaスタブ、および以下のディレクトリに格納し(?):たとえばandroid_stubs_current_intermediatesディレクトリの.javaファイルはどのように生成されますか?

./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/src/

、上記のディレクトリのサブディレクトリjava/lang/ java.lang。*クラスに対応する.javaファイルを含み、サブディレクトリ `android/app/'は、android.app。*クラスに対応する.javaファイルを含みます。これらの.javaファイルには実際のコードは含まれていませんが、ダミーボディを持つシグネチャのみです。

これらの.javaファイルは、ツールを使用して実際のソースコードから生成されたものと想定しています。私の質問は、このツールは、それはAndroidのビルドプロセスの外で使用可能ですか?

このツールを使用して、Android以外のJavaクラス用のスタブを生成したいと考えています。

+0

http://stackoverflow.com/questions/1264530/how-to-generate-stub-in-android?rq=1回答は多少あるかもしれませんが、よく分かりませんが –

+0

私の質問は異なっています。スタブでは、私は特に上記のディレクトリでAndroidのビルドプロセスの一部として生成された.javaファイルを意味します。 –

答えて

9

「スタブ」は、javadocツールを実行して生成されたフレームワークAPIスタブです。

Androidでスタブファイルについて話す場合、ほとんどの場合、aidlツールによって生成されたJavaファイルを意味します。例えば特にHow to generate stub in android? - Stack Overflow

を参照して、Androidのビルドシステムは、実際のJavadocを呼び出してドキュメントを生成するために使用することができdroiddoc.mkと呼ばれるメイクファイル、JavaのAPIスタブとAPIのxmlファイルが含まれています。
droiddoc.mkは、build/coreである。 build/core/config.mkにはdroiddoc.mkを含めるのを容易にするためにBUILD_DROIDDOCという名前の変数があります。 droiddoc.mk

見て、それは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] 

スタブ権については何もありませんか?心配しないで、たとえばframework/base/Android.mkのため、ドキュメントを生成するinclude $(BUILD_DROIDDOC)が含まれている、AOSPで

PRIVATE_DROIDDOC_OPTIONS := $(LOCAL_DROIDDOC_OPTIONS) 

多くAndroid.mkファイルをPRIVATE_DROIDDOC_OPTIONS変数があることがわかり、そして

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) 

LOCAL_DROIDDOC_OPTIONS-stubsオプションが含まれています:framework/base/Android.mkでは、コードの一部があります。そして、それは最終的にdroiddoc.mkによって使用されるjavadocコマンドに入れられます。

しかし、javadocには-stubsのようなオプションは含まれていません。キーは、ドックレットを使用してJavadocツールの出力のコンテンツと書式をカスタマイズできることです。 Javadocツールには、標準のドックレットと呼ばれるデフォルトの「ビルトイン」ドックレットがあり、HTML形式のAPIドキュメントを生成します。標準ドックレットを変更またはサブクラス化するか、または独自のドックレットを作成して、HTML、XML、MIF、RTFなどの任意の出力フォーマットを生成できます。

私たちは、カスタマイズされたドックレットを指定する-docletオプションを使用することができます。また、droiddoc.mkのjavadocコマンドは-doclet com.google.doclava.Doclavaを使用します。そのドックレットは-stubsオプションを受け取ります。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); 
    } 
    } 

下Doclava実装で

ルックそれは-stubsオプションを受け取ります。そして、スタブを処理する方法は次のとおりです。ディレクトリ。

// Stubs 
if (stubsDir != null || apiFile != null || proguardFile != null) { 
    Stubs.writeStubsAndApi(stubsDir, apiFile, proguardFile, stubPackages); 
} 

そしてStubs.writeStubsAndApiの実装をトレーススタブファイルの内容は、そのようなもので、なぜ、あなたは見ることができます。

build/tools/droiddoc/testのテストケースのように、独自のJavaファイルを作成してスタブを生成することもできます。

+0

お返事ありがとうございます! AIDLファイルには、[別の目的](http://developer.android.com/guide/components/aidl.html)があります。私はスタブがAIDLファイルから生成されるとは思わない。たとえば、上記のリストには、Activity、Service、java.lang.ObjectなどのJavaの標準ライブラリクラス(すべてがandroid.jarに表示されます)などのクラスのAIDLファイルは含まれていないことに注意してください。 –

+0

あなたは何を求めていますか?スタブ・ファイルは、XXX.jarまたはjava.lang.Object、または一般的なアクティビティ・サービス・ファイルを意味するものではありません。ほとんどの場合、Androidでのスタブファイルについては、aidlツールによって生成されたJavaファイルを意味します。あなたはandroid.jarがどのように生成されるかについて尋ねていますか? – StarPinkER

+0

はい(途中で)。 android_stubs_current_intermediates/src /ディレクトリにある.javaファイルから、android.jarがコンパイルされているようです。それらの.javaファイルがどのように生成されるかを尋ねています。 –

関連する問題