每当您访问 Google 的 Play 商店并安装应用程序时,都会显示所有必要访问权限的列表,并且需要确认才能继续安装。
假设我想安装愤怒的小鸟:
- 应用内购买
- 身份
- 照片/媒体/文件
- Wifi 连接信息
- 设备 ID 和通话信息
Play Store 究竟是如何附带此列表的?
- 他们的算法是否真的分析了代码以得出该列表?
- 供应商是否负责列出所需的访问权限?
- 不一样的方式?
每当您访问 Google 的 Play 商店并安装应用程序时,都会显示所有必要访问权限的列表,并且需要确认才能继续安装。
假设我想安装愤怒的小鸟:
- 应用内购买
- 身份
- 照片/媒体/文件
- Wifi 连接信息
- 设备 ID 和通话信息
Play Store 究竟是如何附带此列表的?
每个权限都需要在 AndriodManifest.xml 中声明,然后应用才能使用它们。例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.app.myapp" >
<uses-permission android:name="android.permission.RECEIVE_SMS" />
...
</manifest>
能够接收短信。
此清单还将用于列出您在商店中下载应用程序时显示的权限。
Android 的安全模型是所有受保护的资源(身份、联系人、相机、GPS 等,[您可以在此处请求的完整权限列表])在操作系统 API 内受到保护。这意味着应用程序无法直接访问硬件,而是必须要求操作系统与硬件进行对话。这样,操作系统就有机会检查应用程序的权限并拒绝提供数据。
一个例子:
假设我编写了一个想要访问 GPS 位置的应用程序,我必须做两件事:
在安装时,在清单文件中请求适当的权限manifest.xml:
<manifest ... >
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...
</manifest>
在运行时,让操作系统给我 GPS 位置:
String locationProvider = LocationManager.GPS_PROVIDER;
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
在调用.getLastKnownLocation(...)操作系统期间将检查我的应用程序是否具有ACCESS_FINE_LOCATION权限。如果是,那么它将把位置数据还给我,如果不是,它会抛出一个java.lang.SecurityException并拒绝给我任何数据。