1+ <!DOCTYPE html> < html lang ="
en "
> < head > < meta http-equiv ="
content-type "
content ="
text/html; charset=utf-8 "
> < meta content ="
width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0 "
name ="
viewport "
> < meta content ="
yes "
name ="
apple-mobile-web-app-capable "
> < meta content ="
black-translucent "
name ="
apple-mobile-web-app-status-bar-style "
> < meta content ="
telephone=no "
name ="
format-detection "
> < meta name ="
description "
content ="
simple life "
> < meta name ="
theme-color "
content ="
#2d4356 "
> < meta name ="
baidu-site-verification "
content ="
pte8o83UGG "
> < title > RK3288 Android 10 系统开发[4] - 提供 app 默认权限 | LITREILY
</ title > < link rel ="
stylesheet "
type ="
text/css "
href ="
/css/style.css "
> < link rel ="
Shortcut Icon "
type ="
image/x-icon "
href ="
/favicon.png "
> < link rel ="
stylesheet "
href ="
//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css "
> < script type ="
text/javascript "
src ="
//cdn.jsdelivr.net/npm/[email protected] /dist/jquery.min.js "
> </ script > < script > var _hmt = _hmt || [ ] ; 2+ ( function ( ) {
3+ var hm = document . createElement ( "script" ) ;
4+ hm . src = "https://hm.baidu.com/hm.js?d55250b3059d32736607d30baa6e0ca2" ;
5+ var s = document . getElementsByTagName ( "script" ) [ 0 ] ;
6+ s . parentNode . insertBefore ( hm , s ) ;
7+ } ) ( ) ; </ script > < meta name ="generator " content ="Hexo 5.4.0 "> < link rel ="alternate " href ="/atom.xml " title ="LITREILY " type ="application/atom+xml ">
8+ </ head > < link rel ="stylesheet " type ="text/css " href ="/plugins/highlight/atom-one-dark.min.css "> < script type ="text/javascript " src ="/plugins/highlight/highlight.min.js "> </ script > < script > hljs . initHighlightingOnLoad ( ) ;
9+ </ script > < script type ="
text/javascript "
src ="
/js/ready.js "
async > </ script > < link rel ="
stylesheet "
href ="
//cdn.jsdelivr.net/gh/fancyapps/[email protected] /dist/jquery.fancybox.min.css "
> < body class ="
night "
> < div class ="
mobile-head "
id ="
mobile-head "
> < div class ="
navbar-icon "
> < span > </ span > < span > </ span > < span > </ span > </ div > < div class ="
navbar-title "
> < a href ="
/ "
> LITREILY
</ a > </ div > < div class ="
navbar-search "
> <!--= show a circle here--> </ div > </ div > < div class ="
h-wrapper "
id ="
menu "
> < nav class ="
h-head box "
> < div class ="
m-hdimg "
> < a class ="
hdimg img "
href ="
/ "
> < img class ="
nofancybox "
src ="
/img/profile.jpg "
width ="
128 "
height ="
128 "
> </ a > < h1 class ="
ttl "
> < a href ="
/ "
> LITREILY
</ a > </ h1 > </ div > < p class ="
m-desc "
> 心之所向,无惧无悔,
< br > 愿求仁得仁,复无怨怼!
</ p > < div class ="
m-nav "
> < ul > < li > < span class ="
dot "
> ●
</ span > < a href ="
/archives/ "
> 归档
</ a > </ li > < li > < span class ="
dot "
> ●
</ span > < a href ="
/categories/ "
> 分类
</ a > </ li > < li > < span class ="
dot "
> ●
</ span > < a href ="
/tags/ "
> 标签
</ a > </ li > < li > < span class ="
dot "
> ●
</ span > < a href ="
/about/ "
> 关于
</ a > </ li > < li > < span class ="
dot "
> ●
</ span > < a href ="
/notes/ "
> 笔记
</ a > </ li > < li > < span class ="
dot "
> ●
</ span > < a href ="
/atom.xml "
> RSS
</ a > </ li > < li class ="
m-sch "
> < form class ="
form "
id ="
j-formsch "
method ="
get "
> < input class ="
txt "
type ="
text "
id ="
local-search-input "
name ="
q "
value ="
搜索 "
onfocus ="
if(this.value=='搜索'){this.value='';} "
onblur ="
if(this.value==''){this.value='搜索';} "
> < input type ="
text "
style ="
display:none; "
> </ form > </ li > </ ul > < div id ="
local-search-result "
> </ div > </ div > </ nav > </ div > < div id ="
back2Top "
> < a class ="
fa fa-arrow-up "
title ="
Back to top "
href ="
# "
> </ a > </ div > < div class ="
box "
id ="
container "
> < div class ="
l-wrapper "
> < div class ="
l-content box "
> < div class ="
l-post l-post-art "
> < article class ="
p-art "
> < div class ="
p-header box "
> < h1 class ="
p-title "
> RK3288 Android 10 系统开发[4] - 提供 app 默认权限
</ h1 > < div class ="
p-info "
> < span class ="
p-date "
> < i class ="
fa fa-calendar "
> </ i > < a href ="
/2022/07/12/android-perm/ "
> 2022-07-12
</ a > </ span > < span class ="
p-category "
> < i class ="
fa fa-folder "
> </ i > < a href ="
/categories/Android/ "
> Android
</ a > </ span > < span class ="
p-view "
id ="
busuanzi_container_page_pv "
> < i class ="
fa fa-eye "
> </ i > < span id ="
busuanzi_value_page_pv "
> </ span > </ span > </ div > </ div > < div class ="
p-content "
> < h2 id ="
禁用旧版本SDK弹框 "
> < a href ="
#禁用旧版本SDK弹框 "
class ="
headerlink "
title ="
禁用旧版本SDK弹框 "
> </ a > 禁用旧版本SDK弹框
</ h2 > < p > 如果在Android10系统上安装旧版本的app,会提示以下信息。
</ p > 10+ < blockquote >
11+ < p > 此应用专为旧版 Android 打造,因此可能无法正常运行。请尝试检查更新或与开发者联系。</ p >
12+ </ blockquote >
13+ < p > 为了去掉这个弹框提示,需要添加以下修改, 将 < code > onStartActivity</ code > 函数中的 < code > showDeprecatedTargetDialogIfNeeded</ code > 禁用。</ p >
14+ < pre > < code class ="patch "> --- a/services/core/java/com/android/server/wm/AppWarnings.java
15+ +++ b/services/core/java/com/android/server/wm/AppWarnings.java
16+ @@ -166,7 +166,8 @@ class AppWarnings {
17+ public void onStartActivity(ActivityRecord r) {
18+ showUnsupportedCompileSdkDialogIfNeeded(r);
19+ showUnsupportedDisplaySizeDialogIfNeeded(r);
20+ - showDeprecatedTargetDialogIfNeeded(r);
21+ + //showDeprecatedTargetDialogIfNeeded(r);
22+ }
23+
24+ /**
25+ </ code > </ pre >
26+ < h2 id ="安装app默认提供权限 "> < a href ="#安装app默认提供权限 " class ="headerlink " title ="安装app默认提供权限 "> </ a > 安装app默认提供权限</ h2 > < p > 对于安装app是自动提供的权限,可以添加以下修改。 在 < code > PackageManagerService.java</ code > 文件中添加白名单.</ p >
27+ < pre > < code class ="patch "> --- a/services/core/java/com/android/server/pm/PackageManagerService.java
28+ +++ b/services/core/java/com/android/server/pm/PackageManagerService.java
29+ @@ -1872,7 +1872,8 @@ public class PackageManagerService extends IPackageManager.Stub
30+ // for legacy apps in permission review mode we clear the permission
31+ // review flag which is used to emulate runtime permissions for// legacy apps.
32+ - if (grantPermissions) {
33+ + if (grantPermissions || res.name.contains("com.customPackage") || res.name.contains("com.baidu.input")) {
34+ final int callingUid = Binder.getCallingUid();
35+ mPermissionManager.grantRequestedRuntimePermissions(
36+ res.pkg, res.newUsers, grantedPermissions, callingUid,
37+ </ code > </ pre >
38+ < h2 id ="运行时权限 "> < a href ="#运行时权限 " class ="headerlink " title ="运行时权限 "> </ a > 运行时权限</ h2 > < p > 对于运行时的权限,在Android10里目前只找到对指定app进行权限配置的方法。以百度输入法为例,添加权限如下。</ p >
39+ < pre > < code class ="patch "> --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
40+ +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
41+ @@ -744,6 +744,16 @@ public final class DefaultPermissionGrantPolicy {
42+ grantPermissionsToSystemPackage(systemCaptionsServicePackageName, userId,
43+ MICROPHONE_PERMISSIONS);
44+ }
45+ +
46+ + PackageInfo mBaiduPackageInfo = getPackageInfo("com.baidu.input");
47+ + if (mBaiduPackageInfo != null && doesPackageSupportRuntimePermissions(mBaiduPackageInfo)) {
48+ + grantPermissionsToPackage(mBaiduPackageInfo, userId, false, true, true, STORAGE_PERMISSIONS);
49+ + grantPermissionsToPackage(mBaiduPackageInfo, userId, false, true, true, ALWAYS_LOCATION_PERMISSIONS);
50+ + grantPermissionsToPackage(mBaiduPackageInfo, userId, false, true, true, PHONE_PERMISSIONS);
51+ + grantPermissionsToPackage(mBaiduPackageInfo, userId, false, true, true, CONTACTS_PERMISSIONS);
52+ + }
53+ }
54+
55+ private String getDefaultSystemHandlerActivityPackageForCategory(String category, int userId) {
56+ </ code > </ pre >
57+ < h2 id ="参考 "> < a href ="#参考 " class ="headerlink " title ="参考 "> </ a > 参考</ h2 > < ul >
58+ < li > < a target ="_blank " rel ="noopener " href ="https://blog.csdn.net/u010867436/article/details/107223787 "> 高通android10.0默认赋予第三方apk权限</ a > </ li >
59+ < li > < a target ="_blank " rel ="noopener " href ="https://blog.csdn.net/wjh8914320/article/details/104613522 "> [九鼎RK3399Pro] Android 8.1默认自动给APP普通权限</ a > </ li >
60+ < li > < a target ="_blank " rel ="noopener " href ="https://www.jianshu.com/p/9dc825ac1c58 "> 应用弹窗“此应用专为旧版Android打造,因此可能无法正常运行...”的原因</ a > </ li >
61+ </ ul >
62+ </ div > < div class ="
p-copyright "
> < blockquote > < div class ="
p-copyright-author "
> < span class ="
p-copyright-key "
> 本文作者:
</ span > < span class ="
p-copytight-value "
> < a href ="
mailto:[email protected] "
> litreily
</ a > </ span > </ div > < div class ="
p-copyright-link "
> < span class ="
p-copyright-key "
> 本文链接:
</ span > < span class ="
p-copytight-value "
> < a href ="
/2022/07/12/android-perm/ "
> https://www.litreily.top/2022/07/12/android-perm/
</ a > </ span > </ div > < div class ="
p-copyright-note "
> < span class ="
p-copyright-key "
> 版权声明:
</ span > < span class ="
p-copytight-value "
> 本博客所有文章除特殊声明外,均采用
< a rel ="
nofollow "
target ="
_blank "
href ="
https://creativecommons.org/licenses/by-nc/4.0/ "
> CC BY-NC 4.0
</ a > 许可协议。转载请注明出处
< a href ="
https://www.litreily.top "
> litreily的博客
</ a > !
</ span > </ div > </ blockquote > </ div > </ article > < div class ="
p-info box "
> < span class ="
p-tags "
> < i class ="
fa fa-tag "
> </ i > < a href ="
/tags/android/ "
> android
</ a > </ span > </ div > < aside id ="
toc "
> < div class ="
toc-title "
> 目录
</ div > < nav > < ol class ="
toc "
> < li class ="
toc-item toc-level-2 "
> < a class ="
toc-link "
href ="
#%E7%A6%81%E7%94%A8%E6%97%A7%E7%89%88%E6%9C%ACSDK%E5%BC%B9%E6%A1%86 "
> < span class ="
toc-number "
> 1.
</ span > < span class ="
toc-text "
> 禁用旧版本SDK弹框
</ span > </ a > </ li > < li class ="
toc-item toc-level-2 "
> < a class ="
toc-link "
href ="
#%E5%AE%89%E8%A3%85app%E9%BB%98%E8%AE%A4%E6%8F%90%E4%BE%9B%E6%9D%83%E9%99%90 "
> < span class ="
toc-number "
> 2.
</ span > < span class ="
toc-text "
> 安装app默认提供权限
</ span > </ a > </ li > < li class ="
toc-item toc-level-2 "
> < a class ="
toc-link "
href ="
#%E8%BF%90%E8%A1%8C%E6%97%B6%E6%9D%83%E9%99%90 "
> < span class ="
toc-number "
> 3.
</ span > < span class ="
toc-text "
> 运行时权限
</ span > </ a > </ li > < li class ="
toc-item toc-level-2 "
> < a class ="
toc-link "
href ="
#%E5%8F%82%E8%80%83 "
> < span class ="
toc-number "
> 4.
</ span > < span class ="
toc-text "
> 参考
</ span > </ a > </ li > </ ol > </ nav > </ aside > </ div > < section class ="
p-ext "
> < div class ="
l-pager l-pager-dtl box "
> < a class ="
next "
href ="
/2022/07/08/rk3288-bt/ "
> RK3288 Android 6.0 适配 RTL8821CU wifi&BT 功能 >
</ a > </ div > < div id ="
valine-comment "
> < style type ="
text/css "
> .
night .
v [
data-class = v ]
a {
color : # 0F9FB4 !important ; }
63+ .night .v [data-class = v ] a : hover { color : # 216C73 !important ; }
64+ .night .v [data-class = v ] li { list-style : inherit; }
65+ .night .v [data-class = v ] .vwrap { border : 1px solid # 223441 ; border-radius : 0 ; }
66+ .night .v [data-class = v ] .vwrap : hover { box-shadow : 0 0 6px 1px # 223441 ; }
67+ .night .v [data-class = v ] .vbtn { border-radius : 0 ; background : none; }
68+ .night .v [data-class = v ] .vlist .vcard .vh { border-bottom-color : # 293D4E ; }
69+ .night .v [data-class = v ] .vwrap .vheader .vinput { border-bottom-color : # 223441 ; }
70+ .night .v [data-class = v ] .vwrap .vheader .vinput : focus { border-bottom-color : # 339EB4 ; }
71+ .night .v [data-class = v ] code , .night .v [data-class = v ] pre , .night .v [data-class = v ] .vlist .vcard .vhead .vsys { background : # 203240 !important ; }
72+ .night .v [data-class = v ] code , .night .v [data-class = v ] pre { color : # F0F0F0 ; font-size : 95% ; }
73+ .v [data-class = v ] .vcards .vcard .vh {border-bottom-color : # 223441 ; }
74+ .night .v [data-class = v ] .vcards .vcard .vcontent .expand : before {background : linear-gradient (180deg , rgba (38 , 57 , 73 , .4 ), rgba (38 , 57 , 73 , .9 ));}
75+ .night .v [data-class = v ] .vcards .vcard .vcontent .expand : after {background : rgba (38 , 57 , 73 , .9 )}
76+ </ style > < div id ="vcomment "> </ div > < script src ="//cdn.bootcdn.net/ajax/libs/valine/1.4.14/Valine.min.js "> </ script > < script > var notify = 'false' == true ? true : false ;
77+ var verify = 'false' == true ? true : false ;
78+ var GUEST_INFO = [ 'nick' , 'mail' , 'link' ] ;
79+ var guest_info = 'nick,mail,link' . split ( ',' ) . filter ( function ( item ) {
80+ return GUEST_INFO . indexOf ( item ) > - 1
81+ } ) ;
82+ guest_info = guest_info . length == 0 ? GUEST_INFO :guest_info ;
83+ window . valine = new Valine ( {
84+ el :'#vcomment' ,
85+ notify :notify ,
86+ verify :verify ,
87+ appId :'1ecKy4yk4u1R7C4tScKbnyq9-gzGzoHsz' ,
88+ appKey :'uvA3xgqNW3q8TGR483lxXcpB' ,
89+ lang : 'zh-cn' ,
90+ placeholder :'ヾノ≧∀≦)o Come on, say something...' ,
91+ avatar :'identicon' ,
92+ guest_info :guest_info ,
93+ pageSize :'10'
94+ } ) </ script > </ div > </ section > < footer > < p > Copyright © 2016 - 2022 < a href ="/. " rel ="nofollow "> LITREILY</ a > | < strong > < a rel ="nofollow " target ="_blank " href ="https://creativecommons.org/licenses/by-nc/4.0/ "> CC BY-NC 4.0</ a > </ strong > < br > < span id ="busuanzi_container_site_uv "> < i class ="fa fa-user "> </ i > < span id ="busuanzi_value_site_uv "> </ span > </ span > < span id ="busuanzi_container_site_pv "> < i class ="fa fa-eye "> </ i > < span id ="busuanzi_value_site_pv "> </ span > </ span > | Powered by< a rel ="nofollow " target ="_blank " href ="https://hexo.io "> Hexo.</ a > Theme with< a rel ="nofollow " target ="_blank " href ="https://github.com/litreily/snark-hexo "> snark.</ a > </ p > </ footer > </ div > </ div > </ div > < script type ="text/javascript " src ="/js/search.js "> </ script > < script type ="text/javascript " src ="/js/top.js "> </ script > < script type ="text/javascript " src ="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js " async > </ script > < script > var search_path = 'search.xml' ;
95+ if ( search_path . length == 0 ) {
96+ search_path = 'search.xml' ;
97+ }
98+ var path = '/' + search_path ;
99+ searchFunc ( path , 'local-search-input' , 'local-search-result' ) ;
100+ </ script > < script type ="
text/javascript "
src ="
//cdn.jsdelivr.net/gh/fancyapps/[email protected] /dist/jquery.fancybox.min.js "
> </ script > < script type ="
text/javascript "
src ="
/js/fancybox.js?v=0.0.1 "
async > </ script > </ body > </ html >
0 commit comments