胡焦24

You got a dream, you gotta to protect it!

站内搜索

快速熟悉AE的CEP插件开发以及调试

发布日期:2026-02-27 |文章分类: 默认分类

插件启用

快速熟悉 AE 插件代码的业务流程,可以通过这个项目 https://github.com/hujiao24/cep-hello-world 加深理解,下载后将其放置在 AE 的插件目录下

AE 插件目录地址为 C:\Program Files (x86)\Common Files\Adobe\CEP\extensions

由于该项目是 PS 插件的逻辑,需要修改 CSXS\manifest.xml 文件的 HostList 配置如下,其中 AEFT 表示 AE 的插件

<HostList>
        <Host Name="AEFT" Version="[13.6,25.9]" />
</HostList>

修改配置后再启动 AE ,在 “窗口” -> “扩展” 菜单下显示有一个 “Hello World” 菜单项,这个菜单名称是在 manifest.xml 文件中的 Menu 项中指定的

在该配置文件还有一个 MainPathScriptPath 配置,指示了界面的入口点以及脚本,点击菜单显示界面如下

插件的功能是显示当前选中图层的名称,新建合成并添加图层后,再点击刷新也还是没有显示图层名称,这里需要调试看下是什么情况

在进行调试之前,需要先了解插件的代码结构 ,分为几个部分

1、前端的代码,也就是插件窗口的显示这些

2、桥接 evalScript,将 jsx 代码发送给 AE JSX 引擎

3、AE JSX 引擎执行 jsx 代码

所以这里需要两套调试配置,一套调试前端的代码,一套调试 JSX 的代码,从目录结构也可以看出,web目录的是前端代码,JSX目录是 AE 引擎执行的代码

前端调试

插件的根目录下,有一个 .debug 文件,指示了插件运行的时候,开启一个调试端口,但是没有 AE 的配置,修改配置为如下

<ExtensionList>
    <Extension Id="org.ytj.helloWorld.panel">
        <HostList>
            <Host Name="AEFT" Port="9999" />
        </HostList>
    </Extension>
</ExtensionList>

重启 AE 后,打开插件窗口,然后在 chrome 浏览器的地址栏输入 http://localhost:9999/ 回车,显示如下图

点击 CEP Hello World 可以显示插件的窗口如下,这里的前端代码可以在 chrome 的开发者工具中进行调试,和传统的 web 开发没什么区别

JSX调试

调试 JSX 代码需要在 vscode 中安装 ExtendScript Debugger 插件,这个插件是 Adobe 开发的,然后在项目的根目录下增加配置 .vscode/launch.json,内容如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "extendscript-debug",
            "request": "attach",
            "name": "连接到 AE 调试",
            "hostAppSpecifier": "aftereffects-18.0" 
        }
    ]
}

然后点击 “连接到 AE 调试” 按钮,接着回到 AE 插件的界面上操作,点击刷新

前端代码通过 evalScript 调用 JSX 的 api.getCurrentLayerName 代码,调试结果显示没有一个 app.documents 对象,这个是属于 PS 的对象

修改 getCurrentLayerName 方法的实现如下

function getCurrentLayerName() {
    try {
        // AE 中使用 app.project.activeItem 获取当前活动的合成 (Composition)
        var activeComp = app.project.activeItem;

        // 检查是否有打开的项目以及活动项是否为合成
        if (!activeComp || !(activeComp instanceof CompItem)) {
            return "No Active Composition";
        }

        // AE 中获取选中的图层使用 selectedLayers 数组
        var selectedLayers = activeComp.selectedLayers;
        if (selectedLayers.length > 0) {
            // 返回第一个选中图层的名称
            return selectedLayers[0].name;
        } else {
            return "No Layer Selected";
        }
    } catch (e) {
        return "Error: " + e.toString();
    }
}

重新启动 AE ,然后在插件的界面上就能正常显示图层的名称了