permission
Android 权限配置工具函数,用于管理 AndroidManifest.xml 中的权限声明。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.existsSync | FileSystem['existsSync'] | 检查文件是否存在 |
deps.readFileSync | FileSystem['readFileSync'] | 同步读取文件内容 |
deps.readFile | FileSystem['promises']['readFile'] | 异步读取文件内容 |
deps.writeFileSync | FileSystem['writeFileSync'] | 写入文件内容 |
deps.xmlParser | XMLParserConstructor | XML 解析器构造函数 |
deps.xmlSerializer | XMLSerializerConstructor | XML 序列化器构造函数 |
deps.xpath | XPath | XPath 查询库 |
环境要求
- fs: Node.js 文件系统模块
- xpath: XML 路径查询库
- @xmldom/xmldom: XML DOM 解析库
bash
npm install xpath @xmldom/xmldom函数签名
typescript
// 配置权限
function configureManifestPermissions(
manifestPath: string,
permissions: string[],
deps: PermissionDeps
): Promise<ModificationResult>
// 移除权限
function removeManifestPermission(
manifestPath: string,
permission: string,
deps: PermissionDeps
): Promise<ModificationResult>
// 检查权限
function hasPermission(
manifestPath: string,
permission: string,
deps: PermissionDeps
): Promise<boolean>
interface PermissionDeps {
existsSync: FileSystem['existsSync']
readFileSync: FileSystem['readFileSync']
readFile: FileSystem['promises']['readFile']
writeFileSync: FileSystem['writeFileSync']
xmlParser: XMLParserConstructor
xmlSerializer: XMLSerializerConstructor
xpath: XPath
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
manifestPath | string | 是 | AndroidManifest.xml 文件路径 |
permissions | string[] | 是(configureManifestPermissions) | 权限名称数组(如 ['android.permission.CAMERA']) |
permission | string | 是(removeManifestPermission/hasPermission) | 单个权限名称 |
deps | PermissionDeps | 是 | 依赖注入对象 |
返回值
| 函数 | 类型 | 说明 |
|---|---|---|
configureManifestPermissions | Promise<ModificationResult> | 修改结果对象 |
removeManifestPermission | Promise<ModificationResult> | 修改结果对象 |
hasPermission | Promise<boolean> | 权限是否存在 |
工作原理
configureManifestPermissions(配置权限)
- 遍历权限列表,为每个权限创建 ManifestModification 对象
- 使用 XPath
//manifest定位到 manifest 根元素 - 使用
addElement操作添加<uses-permission>元素 - 设置元素属性
android:name为权限名称 - 调用
modifyManifest函数批量应用修改 - 返回修改结果
removeManifestPermission(移除权限)
- 创建 XPath 选择器:
//uses-permission[@android:name="权限名"] - 使用
removeElement操作删除匹配的元素 - 调用
modifyManifest函数应用修改 - 返回修改结果
hasPermission(检查权限)
- 读取 AndroidManifest.xml 文件内容
- 使用 XML 解析器解析文件
- 使用 XPath 查询权限元素:
//uses-permission[@android:name="权限名"] - 返回是否找到匹配的元素
所有函数内部调用 modifyManifest,通过 XPath 和 XML DOM 操作实现权限管理。