閱讀689 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android sdk 編譯--如何將源代碼加入android.jar,以及make原理 2

另外javadoc還可以指定定製的doclet(doclet是基於javadoc特定的API開發的小程序,


該程序負責實際的文檔輸出).android的編譯係統就包含了這樣一個doclet叫DroidDoc。


可以在/build/tools/DroidDoc目錄下找到該工具的全部源代碼。


正是該工具在生成HTML的同時


在/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates下


麵copy(或者說重新生成了)所有將生成到android.jar中的所有源代碼(.java文件).
該工具把所有生成document的源文件重新按Package組織生成在以上目錄下。
然後進行編譯和打包成android.jar。 
根據以上分析,其實android.jar文件是各個公布出來的 API 的源文件經過javadoc重新


組織以後再次編譯產生的。 故,android.jar的內容實際上受到javadoc的notation控製


和makefile的控製。 對於android中已存在的代碼比如wifi native,可以通過修改源代


碼中javadoc的notation的方法重新build得到新的包含wifi native接口的android.jar


(將源文件中的@hide這個notation換成別的,然後make update-api;make sdk)。而對


於新加入的代碼,則需要如上方法來修改makefile了。


下麵總結一下調查過程中涉及到的知識:
1) javadoc和doclet,簡單的看了一下工具的使用和參數,另外看了一下DriodDoc這個


doclet的源代碼,找出哪裏生成的.java源文件。
2.makefile分析,android的make showcommands命令可以和任何其他目標一起使用來察


看make過程中實際做了一些什麼事情。(這點還需要調查這個showcommands如何實現的


,因為make -d這個命令給出的信息對於找到問題幫助不大)
3.在跟蹤makefile build過程時,使用$(warning xxxxx)和$(error xxxx)可以在除規則


以外的地方打印出變量的值通過這個方法找出了實際建立要編譯的文件列表的地方。

最後更新:2017-04-02 22:16:28

  上一篇:go jQuery判斷Dom對象是否存在
  下一篇:go js中的break ,continue, return