这篇文章将会说到有关android权限,android签名,所以会分为几篇写。
最近有个项目遇到一个问题,我把客户的apk预置到了system/priv-app下,怎么预置的?
在android.mk下加入一句LOCAL_PRIVILEGED_MODULE := true就行了。
然后就出现了一个问题,因为将usb屏蔽了所以客户使用adb install 来安装他们的apk,发现了一个问题,预置在里面的apk版本1.0,他们在adb install完后的apk版本是1.1,但是——重启之后版本又变回了1.0,想来想去极有可能是因为我把apk预置到了system/priv-app下了,于是就查阅了一些相关资料,了解了一些相关东西(虽然后面发现其实是客户自己写的apk版本写的有问题,具体可以参考https://developer.android.com/studio/publish/versioning)。
先说明有关android权限的一些东西,android有4种权限:
normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认;
dangerous:高风险权限,安装时需要用户的确认才可使用;
signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。
这些权限都在frameworks/base/core/res/AndroidManifest.xml里面定义:
<permission android:name="com.android.alarm.permission.SET_ALARM"
android:label="@string/permlab_setAlarm"
android:description="@string/permdesc_setAlarm"
android:protectionLevel="normal" />
<permission android:name="android.permission.READ_CONTACTS"
android:permissionGroup="android.permission-group.CONTACTS"
android:label="@string/permlab_readContacts"
android:description="@string/permdesc_readContacts"
android:protectionLevel="dangerous" />
<permission android:name="android.permission.ACCESS_IMS_CALL_SERVICE"
android:permissionGroup="android.permission-group.PHONE"
android:label="@string/permlab_accessImsCallService"
android:description="@string/permdesc_accessImsCallService"
android:protectionLevel="signature|system" />
<permission android:name="android.permission.RECEIVE_EMERGENCY_BROADCAST"
android:protectionLevel="signature|privileged" />
对于做应用开发的程序员来说,normal和dangerous级别的权限是他们需要关心的,但是对于做framework的程序员来说四种级别的权限都需要关注,因为预置apk这个事情做android平台二次开发的程序员怕是都没少做。