应用程序安装的时候,应用程序请求的permissions通过package installer来批准获取。package installer通过检查该应用程序的签名来确定是否给予该程序索取的权限。在用户使用过程中不会检查权限,也就是说要么在安装时就批准该权限,使其按照设计可以使用该权限;要么就不批准,这样用户也就根本无法使用该feature,也不会有任何提示告知用户尝试失败。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。
例如,使用有system级别权限设定的api时,需要apk拥有system权限。比如在 android 的API中有SystemClock.setCurrentTimeMillis()函数来修改系统时间。有两个方法:
第一个方法简单点,不过需要在Android系统源码的情况下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点插入android:sharedUserId="android.uid.system"这个属性。
2. 修改Android.mk文件,插入LOCAL_CERTIFICATE := platform
3. 使用mm命令来编译,生成的apk就有修改系统时间的职权范围了。
第2个方法:
1. 同上,插入android:sharedUserId="android.uid.system"这个属性。
2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
3. 使用系统的platform密码钥匙来给apk文件重新签名。signapk platform.x509.pem platform.pk8 input.apk output.apk