在没有 Eclipse 插件的情况下以编程方式上传 Roku 频道

Programmatically Upload Roku Channel without Eclipse Plugin

我想知道是否可以使用终端将频道的 zip 文件上传到 roku 设备。看起来应该是可行的,因为有一个可用于 Eclipse 的插件,但我的目标是尽可能不使用 Eclipse。任何帮助,将不胜感激。

如果您的机器和 Roku 在同一个无线网络上,您当然可以使用终端。

  1. 在您的 Roku 上启用开发者模式,按:Home 3 次,Up 2,Right,Left,Right,Left,Right。这将打开一个开发人员屏幕,您可以在其中查看您的 IP 地址并可以设置密码。
  2. 在您的 ENV 路径(.bash_profile 或其他)中,创建一个 ROKU_DEV_TARGET 和 USERPASS 变量。将 Roku 的 IP 地址设置为 ROKU_DEV_TARGET,将密码设置为 USERPASS。确保重新加载终端 window 以便这些环境变量可用。通过键入 ECHO $ROKU_DEV_TARGET 进行测试,您应该会在那里看到您的 IP 地址。
  3. 接下来,您需要一个 makefile。您可以使用 Roku 提供的那个。下载 Roku SDK 并查看 examples/source/app.mk。你可以看到它使用了我们上面设置的变量。
  4. 将 app.mk 文件复制到您的存储库中,然后在您的终端中浏览到该目录。 运行 make install 它应该能够安装到您的 roku。

注意:您可能需要在 app.mk 中弄乱 DISTREL、COMMONREL、SOURCEREL 路径,具体取决于您的存储库设置。

有用的提示:在另一个终端 window 中,键入 telnet $ROKU_DEV_TARGET 8085 以查看来自 roku 的控制台日志记录。

祝你好运!

为什么,是的 - 构建和部署到 Roku 设备既快速又简单,因此即使是 makefile 也感觉有点过头了。这是我用于 Mac OSX:

的脚本
#!/bin/bash
#ROKU_DEV_TARGET=192.168.1.25   # Roku 2XS
ROKU_DEV_TARGET=192.168.1.28   # put YOUR roku IP here

# wake up/interrupt Roku - workaround for fw5.4 crash
curl -sS -d '' http://$ROKU_DEV_TARGET:8060/keypress/Home
curl -sS -d '' http://$ROKU_DEV_TARGET:8060/keypress/Home

# build. zip _must_ change for Roku to accept re-deploy (grr!)
cd -- "$(dirname "[=10=]")"
touch timestamp
zip -FS -9 -r bundle * -x run extras

# deploy
curl -f -sS --user rokudev:nuisance --anyauth -F "mysubmit=Install" -F "archive=@bundle.zip" -F "passwd=" http://$ROKU_DEV_TARGET/plugin_install  \
| python -c 'import sys, re; print "\n".join(re.findall("<font color=\"red\">(.*?)</font>", sys.stdin.read(), re.DOTALL))'

我将其存储为名为 run 的脚本文件(使用 chmod +x run 标记为可执行文件;有关更多信息,请参阅 ,例如 "why not .sh",这是我的初始倾斜),这样也可以通过从 Finder 中双击来启动它。或者从 TextWrangler 使用 cmd-R,就像我的情况一样。

PS。我什至没有将相同的 run 文件复制到每个项目,而是 link 复制到它 - 但我忘记了它是 soft-link 还是 hard-link 一起工作较新的 TextWrangler。

Roku 可能更改了授权并现在使用 Digest Auth。 您需要通过各种授权 headers 才能成功运行。 您需要添加 Digest UsernameRealmnounceuriqopnccnounceresponse.

将 zip 文件上传到 Roku 的脚本 -

curl -i -H 'Authorization:Digest username="...", realm="...", nonce="...", uri="/plugin_install", qop=auth, nc=, cnonce="", response="..."' --form archive=@example.zip --form "mysubmit=Install" "http://IP/plugin_install"