首先是這個(gè)問(wèn)題如何修改。
在/frameworks/base/Android.mk中,找到如下行:
packages_to_document :=
在該變量的賦值語(yǔ)句最后添加
xxxxx (這里是你的包的名稱(chēng),比如com/sina/ui,其實(shí)這里就是你的源代碼在/frameworks/base/<你的模塊>/java/下面的一部分路徑,只要能夠唯一的匹配到你的代碼即可)
即可。
該添加的含義是使MAKE系統在制作OFF-LINE DOCUMENT時(shí)包含我們的package.
以此類(lèi)推,添加其他新的package也可以這樣做。
下面簡(jiǎn)單把android make sdk的過(guò)程寫(xiě)一下來(lái)說(shuō)明為什么做這樣的修改。調查時(shí)是反過(guò)來(lái)調查的。說(shuō)明還是按照MAKEFILE的生成的順序來(lái)說(shuō)明吧。
首先在/frameworks/base/Android.mk中定義了進(jìn)行sdk building的基本目標對象。
包括對哪些.java文件需要生成API文檔,以及這些文檔的路徑。
然后在/build/core/droiddoc.mk中定義了最終進(jìn)行build的規則和語(yǔ)句。
Android使用javadoc這個(gè)工具來(lái)生成所有API文檔。
Javadoc這個(gè)工具可以帶一個(gè)參數指定一個(gè)文件,該文件包含了所有要生成文檔的源文件的名字(全路徑)。
該文件的內容就是通過(guò)在/framework/base/android.mk里的變量生成的。當然在droiddoc.mk中還添加了build過(guò)程中生成的intermediates目錄下的文件。
另外javadoc還可以指定定制的doclet(doclet是基于javadoc特定的API開(kāi)發(fā)的小程序,該程序負責實(shí)際的文檔輸出).android的編譯系統就包含了這樣一個(gè)doclet叫DroidDoc??梢栽?build/tools/DroidDoc目錄下找到該工具的全部源代碼。
正是該工具在生成HTML的同時(shí)在/out/target/common/obj/JAVA_LIBRARIES /android_stubs_current_intermediates下面copy(或者說(shuō)重新生成了)所有將生成到android.jar中的所有源代碼(.java文件).
該工具把所有生成document的源文件重新按Package組織生成在以上目錄下。
然后進(jìn)行編譯和打包成android.jar。
根據以上分析,其實(shí)android.jar文件是各個(gè)公布出來(lái)的 API 的源文件經(jīng)過(guò)javadoc重新組織以后再次編譯產(chǎn)生的。 故,android.jar的內容實(shí)際上受到j(luò )avadoc的notation控制和makefile的控制。 對于android中已存在的代碼比如wifi native,可以通過(guò)修改源代碼中javadoc的notation的方法重新build得到新的包含wifi native接口的android.jar(將源文件中的@hide這個(gè)notation換成別的,然后make update-api;make sdk)。而對于新加入的代碼,則需要如上方法來(lái)修改makefile了。
下面總結一下調查過(guò)程中涉及到的知識:
1) javadoc和doclet,簡(jiǎn)單的看了一下工具的使用和參數,另外看了一下DriodDoc這個(gè)doclet的源代碼,找出哪里生成的.java源文件。
2.makefile 分析,android的make showcommands命令可以和任何其他目標一起使用來(lái)察看make過(guò)程中實(shí)際做了一些什么事情。(這點(diǎn)還需要調查這個(gè)showcommands如何實(shí)現的,因為make -d這個(gè)命令給出的信息對于找到問(wèn)題幫助不大)
3.在跟蹤makefile build過(guò)程時(shí),使用$(warning xxxxx)和$(error xxxx)可以在除規則以外的地方打印出變量的值通過(guò)這個(gè)方法找出了實(shí)際建立要編譯的文件列表的地方。
Andriod源碼正確的編譯方式
適用范圍:針對Linux的環(huán)境
針對版本:Android源碼Version1.5及以上
前提條件:1、編譯源碼的各種工具已經(jīng)安裝完畢;
2、進(jìn)入Android源碼的根目錄,如:/work/android2.1/
編譯命令:make update-api; make PRODUCT-sdk-sdk;
命令說(shuō)明:1、make update-api #如果你在A(yíng)ndroid源碼中添加了自定義的包、類(lèi)、方法或者你修改了Android源碼中標識為@hide的方法、類(lèi),你需要這些內容對 Application可見(jiàn)并且需要編譯進(jìn)SDK的Document中的話(huà),這個(gè)命令是必須的(其實(shí)還有另外一種手工修改的方式替代這個(gè)命令的,呵呵);
2、make PRODUCT-sdk-sdk #編譯源碼并且聲稱(chēng)SDK,這個(gè)方法解決了之前使用make sdk命令編譯SDK的一個(gè)bug,就是R文件不能自動(dòng)生成,需要手動(dòng)更新一個(gè)jar文件才可以,這個(gè)文章本博客中也有涉及。
異?,F象:如果在源碼中添加了一些style、theme、drawable、package、class、method,編譯時(shí)會(huì )出現有out/目錄中的一些異?,F象,一般不是特別嚴重的,主要是針對有些文件找不到,此時(shí)你可以在執行以下命令:
make clean
再執行:make update-api;make PRODUCT-sdk-sdk
最近使用源碼比較多,修修改改縫縫補補難免有編譯的問(wèn)題出現,這里就做以上總結。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。