[标准]OpenDownload:软件下载/更新信息标准化工程
James Swineson
已而!已而!
众所周知,Windows(以及其它部分桌面操作系统)都存在一个巨大的问题:没有统一的软件发布、更新平台。如果要知道哪些软件有更新,要么使用软件自身(如果有也是不那么好用的)自动更新功能,要么使用第三方软件管理器(目前来看最好的还是 360 软件管家,而且有时候数据还会不准),要么去软件的官网查询版本号。累不累?后来看了 OpenSearch 以后我就想搞这么一个叫做 OpenDownload 的东西。开发者在软件官网上面放一个 xml,写明软件的版本,然后任何一个软件管理器都可以读取并且下载正确的正版软件包(甚至自动解决依赖项和下载更新补丁)。浏览器甚至可以在打开软件官网的时候做出类似 Mobile Safari 上面的 App Store 提示条,给出“下载”、“更新”、“打开”的提示。
花了点时间写个示例出来。
<?xml version="1.0" encoding="UTF-8"?>
<OpenDownloadDescription xmlns="http://what\_the\_hell\_is\_OpenDownload/DTD/opendownload/0.1">
<!--软件包定义部分-->
<FullName>My Software</Fullname>
<ShortName>MySw</ShortName>
<Description language="en-us">This software can help you to destroy your computer.</Description>
<Description language="zh-cn">此软件有益身心健康。</Description>
<Tags>Productivity, Tool</Tags>
<Contact>admin@example.com</Contact>
<Image height="64" width="64" type="image/png">http://example.com/mysw.png</Image>
<Image height="16" width="16" type="image/vnd.microsoft.icon">http://example.com/mysw.ico</Image>
<Developer>Oh My God</Developer>
<Attribution>
Copyright (c) 2013 Oh My God. All rights reserved.
</Attribution>
<AdultContent>false</AdultContent>
<Language>en-us,zh-cn,user\_defined\_language\_support</Language>
<Website>http://www.example.com</Website>
<!--软件下载信息定义部分-->
<Download>
<!--
Installer 表示这是一个完整(可独立运行)的安装文件。
-->
<Installer version="1.01" os="Windows">
<MinOsVersion>5.1.2600</MinOsVersion>
<MaxOsVersion>6.1</MaxOsVersion>
<AllowUpdate>True</AllowUpdate><!--是否允许从原有程序数据更新到新版本-->
<MinUpdateFromVersion>1.00</MinUpdateFromVersion><!--支持的最低更新前程序版本-->
<Dependency type="Runtime" required="True" needPreInstall="True" requiredVersion=">4.0" openDownloadDefinition="http://example.com/example.xml">.net Framework 4.0</Dependency>
<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
<!--
Dependency:依赖项。
参数解释:
type:类型,如 Runtime(运行时)或者 Extension(插件)。
required:是否必须。
needPreInstall:设为 True 时如果找不到依赖项,安装程序无法继续运行。设为 False 时,安装程序会自动安装依赖项。
requiredVersion:需要的版本。支持表达式。
openDownloadDefinition:依赖项的 OpenDownload 定义文件。
Installer:依赖项的安装包。在 openDownloadDefinition 不可用时自动使用这一项。
-->
</Installer>
<!--
Updater 是在线安装器或更新工具。
-->
<Updater version="1.01" os="Windows">
<MinOsVersion>5.1.2600</MinOsVersion>
<MaxOsVersion>6.1</MaxOsVersion>
<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
<SlientUpdateCommand>-q -i</SlientUpdateCommand><!--静默安装命令行参数-->
</Updater>
<!--
Patch 是补丁,需要在已经安装过主程序的情况下运行。
-->
<Patch version="1.01" os="Windows" Importance="5"><!--Importance表示重要性,1-5,5 为最高级(重大安全更新)-->
<MinOsVersion>5.1.2600</MinOsVersion>
<MaxOsVersion>6.1</MaxOsVersion>
<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
<SlientUpdateCommand>-q -i</SlientUpdateCommand>
</Patch>
<Installer version="1.01" os="Mac OS X">
<MinOsVersion>10.3</MinOsVersion>
<MaxOsVersion>10.8.4</MaxOsVersion>
<AllowUpdate>True</AllowUpdate>
<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
</Installer>
<Installer version="1.01" os="Linux" Type="deb"><!--Type 参数用来解决 Linux 发行版安装包格式不同的问题。-->
<AllowUpdate>True</AllowUpdate>
<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
</Installer>
<Installer version="1.01" os="Linux" Type="tar.gz">
<AllowUpdate>True</AllowUpdate>
<MinUpdateFromVersion>1.00</MinUpdateFromVersion>
<ConfigureScript>./configure</ConfigureScript>
<Dependency type="Package" required="True" needPreInstall="True" openDownloadDefinition="http://example.com/example.xml" packagename="nmap">nmap</Dependency>
<!--依赖的 Linux 软件包。packagename 会被代入软件包管理器的安装参数(如 apt install)中。-->
<Dependency type="Extension" required="False" needPreInstall="False" openDownloadDefinition="http://example.com/example2.xml">Kill Your Father's Computer Too</Dependency>
</Installer>
<Source os="Linux" source="deb http://mirror.nus.edu.sg/raspbian/raspbian wheezy main contrib non-free rpi"/><!--Linux 软件源定义-->
<Source os="iOS" source="https://itunes.apple.com/cn/app/example/idXXXXXXXXX?mt=8"/><!--App Store 地址-->
<Source os="Android" source="https://play.google.com/store/apps/details?id=com.ohmygod.mysw" packagename="com.ohmygod.mysw" /><!--Google Play 地址和 apk 软件包名-->
</Download>
</OpenDownloadDescription>
文章被以下专栏收录
-
各种想法
Vaporware 的沉积之处。一个缺乏行动力的人的自白。程序猿锻炼能力做项目的选材宝地。创业者寻找想法的好地方。 新来的同学请先看这篇说明:http://zhuanlan.zhihu.com/ideas/19566363 欢迎访问我的博客:https://blog.swineson.me Licensed under CC by-nc-sa 4.0 International.