manifest 文件是什么?
manifest 这个词在开发里出现频率极高,但指的是完全不同的东西。有人问"manifest 文件是什么",答案得看他是在哪个目录下看到的。下面按四种最常见的场景说。
一、Android 的 AndroidManifest.xml
每个安卓应用都必须有,位置在 app/src/main/AndroidManifest.xml。它是应用向系统"申报"自己的清单,内容包括:
- 包名 package,应用的唯一身份
- 应用组件:activity、service、receiver、provider,每个都要在这里注册,不写就启动不了
- 权限声明:uses-permission,比如相机、定位、读写存储
- 最低和目标 SDK 版本
- 启动入口 intent-filter
装 APK 时系统第一件事就是读这个文件,权限弹窗里的内容也来自这里。改包名、加权限、注册新页面,都绕不开它。
二、Windows 程序的 manifest
Windows 上的 manifest 是一个 XML,编译进 exe 或者以 .manifest 文件放在程序旁边,主要作用是:
- 声明需要的 Visual C++ 运行库版本,避免"应用程序配置不正确"的经典报错
- 声明 UAC 权限级别,requireAdministrator 就是它让程序弹出"是否允许此应用更改设备"
- 声明 DPI 感知,不写的话高分屏上程序界面会糊成一片
- 声明 Windows 版本兼容性
用 mt.exe 或者 Visual Studio 的清单工具可以查看和修改。很多老程序在高分屏下字体发虚,就是 manifest 里没开 dpiAware。
三、Web 应用的 manifest.json
PWA(渐进式网页应用)用的,放在网站根目录,用 <link rel="manifest" href="/manifest.json"> 引入。作用是让网页能"安装"到桌面:
{
"name": "我的应用",
"short_name": "应用",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#1890ff",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" }
]
}
Chrome 扩展的 manifest.json 也是同一类东西,只不过字段换成 manifest_version、permissions、background、content_scripts。
四、Git、Docker、构建产物里的 manifest
- Git:.git 目录里有 MANIFEST 相关文件,记录对象索引,一般不用管。
- Docker:docker manifest 描述多架构镜像,docker manifest inspect 可以查看某个镜像支持哪些平台。
- Java JAR:META-INF/MANIFEST.MF 记录 Main-Class、版本、签名信息,java -jar 就是靠它找入口类。
- npm/yarn 缓存:node_modules/.package-lock.json 有时被叫作 manifest,记录依赖树。
五、怎么快速判断你看到的是哪一种
- 看文件名:AndroidManifest.xml、manifest.json、MANIFEST.MF、*.manifest,后缀基本能定位。
- 看位置:在 apk 或安卓工程里就是 Android 的;在网站根目录就是 PWA 的;在 JAR 包里就是 Java 的。
- 看内容:以 <manifest> 开头的是 Windows 或 Android,以 { 开头的是 JSON。
弄不清是哪种就问自己一句:这个文件是谁在解析?系统、浏览器、还是构建工具?答案自然就出来了。