一、背景介紹


二、開發環境
Adobe官方基於eclipse推出了一個用於開發Adobe Html5 Extension的IDE。因此,我們按如下流程先來配置下開發環境:
- 下載 Eclipse,最好是3.6或更高版本,以及Extension Builder
- 安裝Adobe Premiere Pro CC 2014/2015.
- 配置elicpse的“target application”和"Service Manager"
- 打開調試模式:在注冊表中添加 'PlayerDebugMode'字段
配置結束,到這里可以利用eclipse生成extension的模板工程了。生成的模板工程非常簡單,面板里面只有一個默認的按鈕:
三、工程配置
manifest.xml文件
Adobe Html5 Extension的開發,最重要的一個文件就是manifest.xml。這個文件描述了這個extension的基本信息,以便Adobe宿主程序能夠正常識別加載。其大體內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <ExtensionManifest ExtensionBundleId="com.example.helloworld" ExtensionBundleName="Hello world" ExtensionBundleVersion="1.0" Version="4.0"> <ExtensionList> <Extension Id="com.example.helloworld.extension" Version="1.0"/> </ExtensionList> <ExecutionEnvironment> <HostList> <Host Name="PHXS" Version="[14.0,14.9]"/> </HostList> <LocaleList> <Locale Code="All"/> </LocaleList> <RequiredRuntimeList> <RequiredRuntime Name="CSXS" Version="4.0"/> </RequiredRuntimeList> </ExecutionEnvironment> <DispatchInfoList> <Extension Id="com.example.helloworld.extension"> <DispatchInfo> <Resources> <MainPath>./index.html</MainPath> </Resources> <UI> <Type>Panel</Type> <Menu>Hello world</Menu> <Geometry> <Size> <Height>400</Height> <Width>400</Width> </Size> </Geometry> </UI> </DispatchInfo> </Extension> </DispatchInfoList> </ExtensionManifest>
其中,BundleName, BundleId, BundleVersion由開發者來定,一般就是按照正常的版本迭代來確定。最重要的是HostList和RequiredRuntimeList這兩個標簽的內容。HostList里面確定了這個extension支持哪些宿主程序(如PremierePro, After Effects等等)。下面的代碼指明了多個宿主程序都可以加載:
<HostList> <Host Name="PPRO" Version="[7.0, 10.0]" /> <Host Name="PHSP" Version="[14.0, 16.0]" /> <Host Name="PHXS" Version="[14.0, 14.9]" /> </HostList>
這里只支持Photoshop Extended,其Host ID對應為PHXS,其他宿主程序的Host ID及版本如下:
注意到Version使用了一個方括號的形式[14.0, 14.9],這表明這個extension支持版本14.0-14.9的Photoshop Extended ,高於這個版本或者低於這個版本的Photoshop Extended是不會加載這個extension的。但是,如果要指定某版本以上的所有版本都支持該如何指定?比如要支持2014以上的PremierePro CC,如何指定這個Version呢?只寫上最低版本號即可:
<HostList> <Host Name="PPRO" Version="7.0" /> <Host Name="PHSP" Version="14.0" /> <Host Name="PHXS" Version="14.0" /> <Host Name="IDSN" Version="9.0"/> <Host Name="ILST" Version="17.0" /> </HostList>
另外,就是RequiredRuntimeList這個標簽了。這個標簽指定了運行時的CEP版本。所謂的CEP是Common Extensibility Platform的簡稱,它提供了一個核心服務集,便於開發者執行Extendscript代碼、探查宿主程序的環境變量、處理extension與host之間發送的事件。在之前這個服務集叫做 Creative Suite Extensible Services,簡稱CSXS。因此,在一些配置文件中仍然可以看到CSXS這個縮寫。CEP最初版本為4.x,發展至今已經有5個大版本了,最新的版本為8.x,支持最新的Adobe CC 2018宿主程序。
如上圖,如果我們要支持初代CC版本的宿主程序的話,RequiredRuntime的Version就要設置為4.0。否則是無法正常加載extension的。此外,如果想在擴展中訪問文件系統的話,還得指定額外一些參數:
<CEFCommandLine> <Parameter>--allow-file-access</Parameter> <Parameter>--allow-file-access-from-files</Parameter> <Parameter>--enable-nodejs</Parameter> </CEFCommandLine>
禁用簽名驗證
我們在開發的時候,需要隨時調整extension的代碼。而Adobe宿主程序對於那些沒有簽名的extension,是置之不理不會加載的。因此,我們需要把調試模式打開,這樣開發的時候就不必對擴展進行簽名了:
- 在mac上,打開~/Library/Preferences/com.adobe.CSXS.6.plist這個文件並增加一行,鍵名為PlayerDebugMode,類型為 "String",值設置為"1".
- 在Windows上, 打開注冊表項:HKEY_CURRENT_USER/Software/Adobe/CSXS.6,增加一項名為PlayerDebugMode, 類型為 "String", 值為 "1"的鍵值對.
注意:如果宿主程序的版本不同,對應的文件可能也不同。比如CC2017,就要把上面對應部分改成 "CSXS.7"
chrome調試
chrome調試工具有助於觀察extension的輸出、探查extension的DOM結構,對於調試起着非常大的幫助。啟用chrome調試工具也很簡單,在extension文件夾的根目錄創建一個名為.debug的文件,寫入下述內容:
<?xml version="1.0" encoding="UTF-8"?> <ExtensionList> <Extension Id="com.pond5.marketplace"> <HostList> <Host Name="PHXS" Port="8000"/> <Host Name="IDSN" Port="8001"/> <Host Name="AICY" Port="8002"/> <Host Name="ILST" Port="8003"/> <Host Name="PPRO" Port="8004"/> <Host Name="PRLD" Port="8005"/> <Host Name="FLPR" Port="8006"/> <Host Name="AUDT" Port="8007"/> </HostList> </Extension> </ExtensionList>
這個列表說明了調試不同的宿主程序時用的端口不一樣。以Pond5為例,其.debug文件內容如下:
<?xml version="1.0" encoding="UTF-8"?> <ExtensionList> <Extension Id="com.pond5.ppro"> <HostList> <!-- Premiere --> <Host Name="PPRO" Port="8089" /> </HostList> </Extension> </ExtensionList>
指定調試Premiere的extension時,端口為8089。如下圖所示:
CEP緩存清理
開發的時候,有可能需要禁止CEF對web內容緩存,可以直接手動刪除掉如下位置中extension對應的文件夾:
- Windows: C:\Users\USERNAME\AppData\Local\Temp\cep_cache\
- Mac: /Users/USERNAME/Library/Logs/CSXS/cep_cache
Extension文件夾
- On Mac,: /Library/Application Support/Adobe/CEP/extensions
- On Windows: C:\Program Files (x86)\Common Files\Adobe\CEP\extensions
這樣,當前系統的所有用戶都可以加載這個Extension了。也可以僅僅安裝給當前用戶使用,其位置如下:
- On Mac: ~/Library/Application Support/Adobe/CEP/extensions
- On Windows: C:\\AppData\Roaming\Adobe\CEP\extensions
簽名打包
發布Extension的時候,需要對整個包進行簽名。這里需要用到ZXPSignCmd這個工具,在官方網站上可以下載。首先,要進行簽名我們需要一個數字證書。這個證書我們可以從第三方證書簽發機構購買,這需要一定的經費。也可以做一個自簽名的證書,對extension進行簽名。我們就按照后面一種方式來走個流程:
./ZXPSignCmd -selfSignedCert <countryCode> <stateOrProvince> <organization> <commonName> <password> <outputPath.p12> ./ZXPSignCmd -selfSignedCert US Washington myOrganization "John Smith" myPassword myCertificate.p12
這樣會在當前目錄下生成一個自簽名證書,然后我們可以用這個證書簽名打包了:
./ZXPSignCmd -sign <inputDirectory> <outputZxp> <p12> <p12Password> ./ZXPSignCmd -sign HelloWorld/ HelloWorld.zxp myCertificate.p12 myPassword
ZXPSignCmd工具簽名時會在extension目錄下生成一個META-INF文件,里面存放這次簽名的信息。然后,工具會將整個目錄打包壓縮成一個*.zxp文件。這就是我們最終需要發布的擴展文件了。^_^
Pond5和Shutterstock的套路分析

四、參考鏈接
- http://labs.adobe.com/technologies/extensionbuilder3/
- http://davidderaedt.github.io/CC-Extension-Builder-for-Brackets/
- https://www.adobe.com/exchange/em_download/
- https://github.com/Adobe-CEP/Samples
- https://forums.adobe.com/thread/2010424
- https://forums.adobe.com/message/8133214#8133214
- https://blogs.adobe.com/cssdk/2014/06/adobe-extension-builder-and-creative-cloud-2014.html
- http://www.adobe.com/devnet/creativesuite/samples.html
- http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/cs-extension-builder/pdfs/CC_Extension_SDK.pdf
- http://www.adobe.com/devnet/creativesuite/articles/a-short-guide-to-HTML5-extensions.html
- http://www.adobe.com/devnet/creativesuite/articles/hybrid-extensions.html
- http://labs.adobe.com/downloads/extensionbuilder3.html