知识点总结:SystemApi,Permission

1. @SystemApi 只允许system app 调用或者用反射方法调用, 反射方法例:

 NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);

 try {
      Method method = nfcAdapter.getClass().getMethod("enable");
      method.invoke(nfcAdapter);
 } catch (IllegalAccessException e) {
       e.printStackTrace();
 } catch (Exception e) {
       e.printStackTrace();
 }

需要注意的是非 system app 用反射方法调用SystemApi,即使编译通过, 实际运行是还会遇到permission check. 例如上面的NfcAdapter.enable() 要求 WRITE_SECURE_SETTINGS.这是一个signature permission, 也就是app 必须有系统签名才行, 第三方app 还是不能调用的。

2. permission. install permission 是否被granted, 是在install package时决定的, 相关函数 PermissionManagerService.grantPermissions()。  例如对于signature permission, 调用PermissionManagerService.grantSignaturePermission()处理。

 关于permission check, 调用流程:

  1. ContextImpl.checkPermission(String permission, int pid, int uid) -->
  2. ActivityManagerService.checkPermission(String permission, int pid, int uid) -->
  3. ActivityManagerService.checkComponentPermission(String permission, int pid, int uid, int owningUid(-1), boolean exported(true)) --> 如果是系统进程, 那么所有permission 都是允许的
  4. ActivityManager.checkComponentPermission(permission, uid, owningUid, exported)
  •                             系统ROOT UID, 允许                                                                                

  •                             Uid 本身是该permission Owner, 允许   

  •                             否则-->

  1. AppGlobals.getPackageManager().checkUidPermission(permission, uid) -->
  2. PackageManagerService.checkUidPermission() -->
  3. PermissionManagerService.checkUidPermission()

 

3. CATEGORY_DEFAULT for implicite intent. 如果不指定, implicite intent 不能找到该activity.

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cmake错误:系统错误:权限被拒绝。 这个错误通常是由于缺少文件或目录的读写权限引起的。您需要检查您的系统权限设置,并确保您有足够的权限来执行所需的操作。您还可以尝试以管理员身份运行CMake,以获得更高的权限级别。 ### 回答2: 这个错误是由于系统权限不足所引起的。当我们在使用CMake来构建我们的项目时,如果没有足够的权限来执行某些操作,就会出现这个错误。这种情况通常出现在开发人员没有足够的权限来访问某些文件或目录,或者在执行某些命令时需要管理员权限。 解决这个问题的方法有几种: 首先,我们可以尝试以管理员身份运行CMake。这可以通过右键单击CMake应用程序图标然后选择“以管理员身份运行”来实现。这将提高我们的权限,使我们可以执行需要管理员权限的操作。 如果尝试以管理员身份运行仍然无法解决问题,我们可以检查文件或目录的权限是否正确。我们需要确保我们有足够的权限访问需要访问的文件或目录。这可以通过右键单击文件或目录,然后选择“属性”来实现。在属性对话框中,我们可以设置访问权限。如果我们没有权限修改这些权限,我们需要与管理员或拥有权限的人员联系。 另外,有时候防病毒软件或其他安全软件可能会干扰我们的操作。我们需要检查我们的防病毒软件或其他安全软件是否阻止了我们的操作。如果我们发现这是问题的原因,我们可以暂时禁用这些软件,然后再尝试执行操作。 总之,这个错误通常是由于系统权限不足所引起的。我们可以通过以管理员身份运行CMake,检查文件或目录的权限或暂时禁用防病毒软件等方法来解决这个问题。 ### 回答3: 这个错误信息指示了在使用 CMake 时出现的问题,因为系统权限出现了问题,因此 CMake 无法完成所需的操作。 CMake 是一种开源的构建工具,为软件开发人员提供了一种自动化构建过程的方法。它使用类似于Makefile的构建脚本,用于自动生成编译和链接所需的文件。 然而,当系统权限出现问题时,CMake就无法完成其任务。这可能是由于文件或目录的权限设置不正确,或正在使用的文件或目录已被另一个进程占用,无法进行修改。 修复 CMake 错误:system error: permission denied 的方法包括: 1.检查文件或目录的权限设置,确保用户具有正确的访问权限。 2.确认是否存在其他进程正在使用这些文件或目录。尝试结束占用它们的进程,或等待该进程结束后再尝试操作。 3.在使用 CMake 时,确保使用管理员权限或 sudo 命令。 4.检查防火墙设置,确保它们不会影响所需的访问。 总之,CMake 错误:system error: permission denied 可能非常烦人,但是进行适当的检查和修复既可以解决问题,也可以使 CMake 继续工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值