我需要从minSdkVersion =“ 19”升级旧的Android应用程序,因此我需要处理所有权限。
在清单中,它需要一些危险的权限。 例如:
<uses-permission android:name="android.permission.BLUETOOTH" /> <!-- normal -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- normal -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- normal -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- dangerous -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- ??? -->
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- normal -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- normal -->
<uses-permission android:name="android.permission.VIBRATE" /> <!-- normal -->
<uses-permission android:name="android.permission.CAMERA" /> <!-- dangerous -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- dangerous -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- dangerous -->
<android:uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- dangerous -->
<android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <!-- dangerous -->
如何在代码中找到需要这些危险权限的地方?是否有取决于每个权限的功能列表?
关于MOUNT_UNMOUNT_FILESYSTEMS
-在哪里可以发现它是危险还是正常?
答案 0 :(得分:1)
在回答具体问题之前,我要说的是,如果普通用户要使用您的应用程序(即从Google Play或其他商店下载该应用程序),那么列出这么多权限可能会吓跑用户。 从这个问题看来,您好像继承了别人的代码,甚至不需要其中的某些权限。
这里要注意的另一重要事项是第三方应用程序(例如,您从Google Play商店下载的应用程序)和电话制造商的应用程序(购买时安装在手机上的大多数应用程序)之间的区别。
制造商应用程序可以使用第三方不能使用的权限。
对您的问题:
我不记得有每个功能都需要获得许可的完整列表。也许其他人可以在这里启发我们两个人:)
面向Android M及更高版本的代码应使用ContextCompat.checkSelfPermission(Context, String)
之类的函数包装所有“危险”行为,并检查是否已授予权限,以避免运行时SecurityException
的出现。
但是在旧代码中发现“危险”行为几乎是不可能的,主要是因为Android OS与开发人员的协议是“您只需要在清单中请求这些权限,并且我将确保不会引发任何运行时安全异常”。
恐怕这里需要手动搜索。
这是来自Android官方文档的所有可用权限的完整列表-
https://developer.android.com/reference/android/Manifest.permission
请注意,第三方应用程序会忽略MOUNT_UNMOUNT_FILESYSTEM权限,因此(除非您为Samsung或Xiaomi工作),您可以从清单中安全删除此权限。