ASDoc是Adobe官方免費並且 open source的工具,目的是用來替 source code生成 class reference doc,官方自己的 livedocs也都是用 ASDoc生成的。不過由於ASDoc是一個command line工具,也就是說它沒有GUI介面,所以搭配 FlashDevelop內建的GUI工具來輸出文件會方便許多。
取得 FlashDevelop
原來我一直在用的FD在 FlashDevelop 3.0.0 beta8 以上的版本開始,就內建一個支援ASDoc的簡易GUI工具叫做Actionscript Documentation Generator,它可以把每次編譯的class路徑、編譯參數、輸出位置等等資訊存成一個*.docproj檔,隨時可以叫出來修改。
取得 ASDoc
從Flex SDK 2.0以後,ASDoc就預設附加在bin資料夾裡面了,所以如果已經安裝 Flex SDK或 Flex Builder的話就只需要在FlashDevelop只要設置路徑就可以了。需要者可以在此 下載 Flex SDK,基本上一定還是要有整包SDK,因為ASDoc需要SDK裡的其他工具作編譯和錯誤檢查。
開始使用ASDoc
上述的工具就照預設的方式安裝就可以了,然後找到 FD -> Tools -> Flash Tools-> Documentation Generator 。首先開啟setting標籤設定你的ASDoc路徑,像我這樣指到ASDoc location,也就是Flex sdk的bin資料夾。
接著回到project標籤。Page title填入整份文件的名稱。exclude classes可以用來排除你不想編入文件的單一class,例如:填入 "com.ClassA com.ClassB" 排除com package下的ClassA和ClassB兩個class,中間用空格區別,但不能用"com.*"同時排除底下的兩個class。Output directory 是你想輸出Doc的位置。
在來就是卡了我很久的地方xd,Classpaths 要填入你所使用到的第三方package,這個欄位的設定與 project 的classpath設定是沒有直接關聯的,ASDoc編譯的時候,他還是會再去呼叫sdk的編譯器,再重新檢查一次你的code有沒有錯誤,如果有錯誤輸出就失敗,並且在Output標籤裡面列出錯誤訊息,所以你有使用到任何第三方的package的話,這邊就要再填一次。
Extra option 可以選擇性的填入編譯的參數,-source-path 是source code的位置,-doc-classes 是要編譯的單一Class,請在裡面填入標準的package路徑,例如"com.myname.ClassA com.myname.ClassB",同樣用空格作區隔,如果想要編的class是某路徑的全部class可以填"-doc-sources .",除了ASDoc專用的參數外,也可以傳遞as3編譯器用的參數進去,例如"-strict=false"。Compiler請選ASDOC(AS3)。更多的編譯參數可以參考官方文件 Using ASDoc 。
然後你就得到一個漂漂亮亮的class參考文件了。
排除Package
再來是卡住我很久的第二個地方,如果不想把第三方的package一起編進reference(不想編進去的需求應該是比較大的),比如我不想把非自行開發的Tweener也編進去,那就加入另一個參數"-exclude-dependencies=true",並且把設定好的Classpaths全部移除掉,否則會發生錯誤。
以上的方法我用在輸出用到沒很複雜的第三方的lib時都沒有問題,但因為asdoc還會去檢查code有沒有錯誤,就算用了strict=false,還是會被寫得不夠嚴謹的code給擋住,比如函式的回傳型別不能沒寫,但竟然as3corelib裡面有很多這種狀況,不太可能遇到一個改一個;再來比如把script用外部連接的方式嵌到mxml裡也會被視為是bug。所以還是有狀況導致我還沒有能夠真正替我的code成功輸出文件,要怎麼辦還要再研究研究。
大致上就是以上這樣,以上除了介面的操作,其他應該都跟直接使用command line模式是一樣的。問題都搞定的話再來就是要了解怎麼去替程式作註解了。
文件的註解方式請參考官方的文件:Creating ASDoc comments
特別謝謝Ticore大的幫忙。
訂閱:
張貼意見 (Atom)
Here is the blog of Mediakid (alias). You will find a mix of code, Flash Platform, Qt and other daily random thoughs I may have.




mitch
08/12/4 上午1:17
好東西
感謝白大分享
之後應該會用得到
ㄎㄎ
mediakid
08/12/9 下午6:06
一起研究研究~^_^
mediakid
08/12/25 下午7:56
發現 Erin大有寫一篇用Flex來輸出API文件的教學 [AS3] ASDoc 快速上手 ,原來Flex builder3也有類似的工具,值得參考~
Taphy
09/1/20 下午5:59
請問一下 如果是用Flash + FlashDevelop 開發 有些元件是放在fla的元件庫裡面 執行ASDoc 會找不到Type 有辦法解決嗎?
mediakid
09/1/20 下午6:38
Hi Taphy~ 您的意思是說您元件的Class是讓IDE自動產生、然後在AS3裡面實例化,所以ASDoc不會輸出的意思嗎? 可是不太曉得"會找不到Type" 是什麼意思,不曉得您輸出doc的結果是什麼呢?
Taphy
09/1/20 下午7:00
感覺上 ASDoc是抓src下面的.as 的檔案
但是我有些元件放在fla的元件庫裡面
當執行ASDoc的時候 他抓不到fla元件庫裡的檔案 就會說找不到Type
ps.我的專案是用Flash + FlashDevelop 開發的 所以有.fla 也有.as的檔案
麻煩你了 謝謝
mediakid
09/1/21 上午10:30
我昨天有實驗一下,我試過如果只是單純是找不到fla內的class,得到的錯誤訊息是「Error: 呼叫可能未定義的方法 XXX」,所以,會出現"找不到Type",應該是有其他的問題,不知道您doc輸出的完整錯誤訊息是什麼呢?方便提供檔案嗎?
如果是我們說的那個問題,那可以自己手動產生fla內元件的class,而非讓flash IDE自動產生,這是可以讓ASDoc編譯過的一種方法,手動的class如:
package
{
import flash.display.Sprite;
public class XXX extends Sprite
{
public function XXX():void
{
}
}
}
mediakid
09/1/21 上午10:38
http://mediakidlab.googlepages.com/TestASDoc.zip 這個是我實驗的檔案
Taphy
09/1/21 下午2:49
我後來有想到這個用騙的方式(這個應該算騙ASDoc><) 真的不行 我就只有一個一個建了...
建到天昏地暗 QQ
mediakid
09/1/21 下午3:28
也可以找反編譯swf的程式,把自己的swf反編譯,就得到一整票的class了~
Flex Builder可以設定 "-compiler.keep-generated-actionscript" 留下編譯成as3的檔案,FlashCS就不知道有沒有這種方法了。
Taphy
09/1/21 下午6:19
我們的專案還滿亂的=.=||| 有反解譯flash的程式 但應該解譯不出來吧...
沒關係我再一個一個加就好了...
還有一個問題.....
ASDoc應該是拿Flex的SDK去compiler,如果我有用到Flash的組件 會出現"Error: 找不到 Type,或它不是編譯時期常數:ScrollPane。"
如果在classpaths加
C:\Program Files\Adobe\Adobe Flash CS3\zh_tw\Configuration\Component Source\ActionScript 3.0\User Interface
會錯更多(說找不到更多其他的組件),有得救嗎?-_-.......(麻煩您了)
mediakid
09/1/22 上午10:31
理論上不管怎麼亂法應該還是反編譯得出來,如果是為了更容易整理的話,我有想到也是可以把library裡面會自動產生class的物件通通複製到另一個fla,然後用最簡單的方式使用那些元件,再去de-compile那個新的fla的swf,這樣就蠻方便的了。
mediakid
09/1/22 上午11:31
我試了加入component source的方法,output以後我只會有Warning,所以還是可以連組件都一起順利編譯出doc耶~
我也試過如果不想要連組件的文件一起編譯出來,使用-exclude-dependencies=true也可以正確排除耶
Taphy
09/1/22 下午2:22
加入component source 的意思是說把 Flash F1下面的資料夾通通複製到Flex的
...sdks\3.2.0\frameworks\projects\framework\src
下面嗎? 有點聽不太懂ㄟ..@ @
mediakid
09/1/22 下午3:16
就是你說的"如果在classpaths加
C:\Program Files\Adobe\Adobe Flash CS3\zh_tw\Configuration\Component Source\ActionScript 3.0\User Interface"
的方法阿
Taphy
09/1/22 下午5:11
奇怪 我的加...\User Interface 還會會出現Error: 找不到定義 fl.controls.listClasses:ICellRenderer 之類的Error
我的http://www.badongo.com/file/13009459
能不能給借我看一下 你的設定檔 跟我的有什麼不一樣嗎?
mediakid
09/1/28 上午10:00
挖咧~抱歉,現在才看到你的訊息@@ 不過因為放假的關係我沒把有這些環境的PC帶在身邊,要下週才能看看你的檔案了喔~
mediakid
09/2/5 上午11:07
嗨~Taphy:
不知道你問題有解決了嗎?還需要我的檔案嗎?
Taphy
09/2/5 下午4:27
還沒解決= =||| 可以麻煩你給我你的檔案參考看看嗎 感謝~
mediakid
09/2/6 上午9:08
嗨~你是要什麼檔案呢? 給我你的email? 我寄給你吧~
Taphy
09/2/6 上午10:13
可以麻煩你給我,你加入Flash組件成功compiler成 .ASDoc的檔案嗎? 謝謝
mediakid
09/2/6 上午10:48
跟之前完全一模一樣,只是多了classpaths而已。我這邊用的是cs4的路徑,cs3我也有試過,結果都是正常的。
classPaths = C:\Program Files\Adobe\Adobe Flash CS4\Common\Configuration\Component Source\ActionScript 3.0\User Interface
其他因為不能貼標籤所以沒辦法貼上來