读取/缓存/恢复/ last_log的权限

时间:2015-01-15 17:29:40

标签: android android-permissions

应用需要访问文件/ cache / recovery / last_log的哪个权限?

我的应用程序使用平台密钥签名,因此我可以提供系统权限。该应用程序将预先构建到设备中,并且该设备将是非root用户。

2 个答案:

答案 0 :(得分:0)

您只能访问应用的缓存目录

getApplicationContext().getCacheDir()

显然,您不需要任何从缓存中读取的权限。但是如果你想在缓存目录中写一些东西,你确实需要权限。

http://developer.android.com/reference/android/Manifest.permission.html#READ_LOGS关于日志的文档:

Allows an application to read the low-level system log files.
Not for use by third-party applications, because Log entries can contain the user's private information.
Constant Value: "android.permission.READ_LOGS"

恢复'是什么意思?

答案 1 :(得分:0)

我前段时间找到了解决方案,只是在此处发布以帮助其他人遇到相同的问题。

阻碍我的是SELinux。我正在发布原始问题的解决方案,但是请注意,此后在Android上发生了一些变化,包括创建A/B system,恢复和缓存分区已从Android删除。

SELinux

我了解了必须处理SELinux才能使用Android源代码的艰难方法。重要的位是:

  1. 在设备定义( device 目录下的makefile)上,将引用SELinux策略。在我使用的其中一台设备中,我有一个makefile,该文件具有:

    BOARD_SEPOLICY_DIRS + = path / to / sepolicy / dir

在目录上,所有以“ .te”结尾的文件都将用作SEPolicy。我建议为自定义策略添加一个新目录,您可以在其中使用自己的git存储库。

现在,您需要知道要编写哪些策略。我建议阅读Google的文档here

个人而言,我首先在许可模式下使用SELinux在 userdebug 构建上测试应用程序。这样,SELinux将仅记录违反策略的操作,这使开发变得相当容易。只有在知道该应用程序在SELinux关闭的情况下运行之后,我才开始收集日志并设置“强制”模式。

要收集不符合我使用的策略的SELinux操作日志:

adb logcat | grep "avc: denied"

有一个名为 audit2allow 的工具,可以读取logcat输出和设备策略,并输出缺少的策略:

adb pull /sys/fs/selinux/policy
adb logcat -b all -d | python2 audit2allow -p policy

文件的输出是可以添加到 .te 文件的策略。

我在Android 8.1上使用了这种特殊方法。

使用平台密钥签名应用

我还必须使用平台密钥对应用程序进行签名。为此,我编辑了Android.mk以添加:

LOCAL_CERTIFICATE := platform

系统UID

修复SELinux策略可能不足以支持某些设备。您可能需要使该应用程序与系统用户一起运行。

您必须避免使用这些方法,因为该用户可以访问一些非常敏感的设备文件。如果确实需要,可以通过以下方式实现:

  1. 使用平台密钥对应用进行签名;
  2. 在将要读取恢复的应用上,您必须确保AndroidManifest.xml将android:sharedUserID设置为“ android.uid.system”。
<manifest package="my.app.name"
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:sharedUserId="android.uid.system">
....
</manifest>

其他有用的文件

here中记录了其他有关诊断启动和ota问题的文件。