android framework中新增自定義許可權
在android的framework原始碼中新增自定義的permission以便限制應用程式呼叫自定義的系統介面,
在frameworks/base/core/res/AndroidManifest.xml 中新增:
<permission android:name="android.permission.ENTERPRISE_SETTINGS"
android:label="@string/permlab_invoke_ivt_method"
android:description="@string/permdesc_invoke_ivt_method"
android:protectionLevel="dangerous" />
在frameworks/base/core/res/values/string.xml中新增
permlab_invoke_ivt_method 、permdesc_invoke_ivt_method的字串資源
在被呼叫的介面處新增許可權檢驗
public String getDeviceInfo() throws RemoteException
{
。。。。。。
mContext.enforceCallingOrSelfPermission("android.permission.ENTERPRISE_SETTINGS", null);
。。。。。。
}
在呼叫該介面的應用程式的AndroidManifest.xml中需要新增該許可權才可以正常呼叫該介面:
<uses-permission android:name="android.permission.ENTERPRISE_SETTINGS"/>
其中的許可權保護級別如下:
protectionLevel分為四級:
"normal"
The default value. A lower-risk permission that gives requesting applications access to isolated application-level features, with minimal risk to other applications, the system, or the user. The system automatically grants this type of permission to a
requesting application at installation, without asking for the user's explicit approval (though the user always has the option to review these permissions before installing).
"dangerous"
A higher-risk permission that would give a requesting application access to private user data or control over the device that can negatively impact the user. Because this type of permission introduces potential risk, the system may not automatically grant
it to the requesting application. For example, any dangerous permissions requested by an application may be displayed to the user and require confirmation before proceeding, or some other approach may be taken to avoid the user automatically allowing the use
of such facilities.
"signature"
A permission that the system grants only if the requesting application is signed with the same certificate as the application that declared the permission. If the certificates match, the system automatically grants the permission without notifying the
user or asking for the user's explicit approval.
"signatureOrSystem"
A permission that the system grants only to applications that are in the Android system image or that are signed with the same certificates as those in the system image. Please avoid using this option, as the signature protection level should be sufficient
for most needs and works regardless of exactly where applications are installed. The "signatureOrSystem" permission is used for certain special situations where multiple vendors have applications built into a system image and need to share specific features
explicitly because they are being built together.
前面幾個很好理解
現在重點記憶下最後一個signatureOrSystem 顧名思義就是在擁有許可權的同時還必須滿足signature一致或System級別APK才擁有!
現在做了如下嘗試
Test Result:
TestCustomPermission是我自定義了一個Activity的訪問許可權的APK
TestPermission 去訪問TestCustomPermission的Activity
EclipseSignature 中兩個都用eclipse的簽名
OtherSignature 中兩個都用相同的另一種簽名
DifferentSignature 中兩個簽名不想同
以下是測試結果:
APP級別
許可權設定為signatureOrSystem
1. EclipseSignature 成功訪問 ! 可以加入許可權!
2. OtherSignature 成功訪問 ! 可以加入許可權!
3. DifferentSignature 訪問失敗!
許可權設定為normal
1. DifferentSignature 成功訪問 ! 可以加入許可權!
System 級別
許可權設定為signatureOrSystem
1. EclipseSignature 成功訪問 ! 可以加入許可權!
2. OtherSignature 成功訪問 ! 可以加入許可權!
3. DifferentSignature 成功訪問 ! 可以加入許可權!
TestCustomPermission再 system TestPermission 在APP
1.DifferentSignature 失敗
2.簽名相同成功!
最後一個實驗
在TestCustomPermission中註冊 signatureOrSystem!APP層訪問 在framework API中驗證!
相關文章
- 【framework】framework中為systemserver新增許可權FrameworkServer
- android動態許可權到自定義許可權框架Android框架
- android自定義訪問許可權permissionAndroid訪問許可權
- 自定義許可權物件物件
- hadoop自定義許可權Hadoop
- SAP自定義許可權物件物件
- android - 解決“應用自定義許可權重名”Android
- 自定義Android應用的訪問許可權Android訪問許可權
- DRF內建許可權元件之自定義許可權管理類元件
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- Android property屬性許可權新增Android
- SpringSecurity:hasAuthority與自定義許可權校驗SpringGse
- Oracle中定義者許可權和呼叫者許可權案例分析Oracle
- Android系統許可權和root許可權Android
- Android 中的危險許可權Android
- Django REST framework API 指南(14):許可權DjangoRESTFrameworkAPI
- [WCF許可權控制]利用WCF自定義授權模式提供當前Principal模式
- MongoDB4.0建立自定義許可權(只有查詢,插入和更新的許可權)的角色步驟MongoDB
- android許可權大全Android
- Android permission許可權Android
- Vue | 自定義指令和動態路由實現許可權控制Vue路由
- 分享!! 如何自定義許可權校驗的註解並用AOP攔截實現許可權校驗
- 利用django-suit模板在管理後臺新增自定義的選單和自定義的頁面、設定訪問許可權DjangoUI訪問許可權
- Django REST framework中認證和許可權的使用方法DjangoRESTFramework
- 對定義者許可權和呼叫者許可權的理解
- Android許可權管理之Permission許可權機制及使用Android
- android 許可權庫EasyPermissionsAndroid
- Android許可權適配Android
- Android安全—許可權模型Android模型
- Android系統許可權Android
- android 許可權問題Android
- 07.Django中的自定義認證方式和許可權的設計與使用Django
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- 基於VUE自定義指令實現按鈕級許可權控制Vue
- Vue2-利用自定義指令實現按鈕許可權控制Vue
- Ubuntu-給新增使用者新增root許可權Ubuntu
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- [WCF許可權控制]利用WCF自定義授權模式提供當前Principal[原理篇]模式