应用需要访问文件/ cache / recovery / last_log的哪个权限?
我的应用程序使用平台密钥签名,因此我可以提供系统权限。该应用程序将预先构建到设备中,并且该设备将是非root用户。
答案 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才能使用Android源代码的艰难方法。重要的位是:
在设备定义( 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
修复SELinux策略可能不足以支持某些设备。您可能需要使该应用程序与系统用户一起运行。
您必须避免使用这些方法,因为该用户可以访问一些非常敏感的设备文件。如果确实需要,可以通过以下方式实现:
<manifest package="my.app.name"
xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">
....
</manifest>
here中记录了其他有关诊断启动和ota问题的文件。