Skip to content

permission

Android 权限配置工具函数,用于管理 AndroidManifest.xml 中的权限声明。

前置依赖

依赖参数

参数名类型说明
deps.existsSyncFileSystem['existsSync']检查文件是否存在
deps.readFileSyncFileSystem['readFileSync']同步读取文件内容
deps.readFileFileSystem['promises']['readFile']异步读取文件内容
deps.writeFileSyncFileSystem['writeFileSync']写入文件内容
deps.xmlParserXMLParserConstructorXML 解析器构造函数
deps.xmlSerializerXMLSerializerConstructorXML 序列化器构造函数
deps.xpathXPathXPath 查询库

环境要求

  • 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
}

参数

参数名类型必填说明
manifestPathstringAndroidManifest.xml 文件路径
permissionsstring[]是(configureManifestPermissions)权限名称数组(如 ['android.permission.CAMERA']
permissionstring是(removeManifestPermission/hasPermission)单个权限名称
depsPermissionDeps依赖注入对象

返回值

函数类型说明
configureManifestPermissionsPromise<ModificationResult>修改结果对象
removeManifestPermissionPromise<ModificationResult>修改结果对象
hasPermissionPromise<boolean>权限是否存在

工作原理

configureManifestPermissions(配置权限)

  1. 遍历权限列表,为每个权限创建 ManifestModification 对象
  2. 使用 XPath //manifest 定位到 manifest 根元素
  3. 使用 addElement 操作添加 <uses-permission> 元素
  4. 设置元素属性 android:name 为权限名称
  5. 调用 modifyManifest 函数批量应用修改
  6. 返回修改结果

removeManifestPermission(移除权限)

  1. 创建 XPath 选择器://uses-permission[@android:name="权限名"]
  2. 使用 removeElement 操作删除匹配的元素
  3. 调用 modifyManifest 函数应用修改
  4. 返回修改结果

hasPermission(检查权限)

  1. 读取 AndroidManifest.xml 文件内容
  2. 使用 XML 解析器解析文件
  3. 使用 XPath 查询权限元素://uses-permission[@android:name="权限名"]
  4. 返回是否找到匹配的元素

所有函数内部调用 modifyManifest,通过 XPath 和 XML DOM 操作实现权限管理。