关于Android的app权限申请问题

恢弘志士之气,不宜妄自菲薄。这篇文章主要讲述关于Android的app权限申请问题相关的知识,希望能为你提供帮助。
关于android8.1的app权限申请问题例如如何让普通app可以写/sdcard/Android/ 目录
/ # cat /data/system/packages.xml | grep bluetooth
< package name=" com.mediatek.bluetooth.dtt" codePath=" /system/app/BtTool" nativeLibraryPath=" /system/app/BtTool/lib" publicFlags=" 940097093" privateFlags=" 0" pkgFlagsEx=" 0" ft=" 16a1f147ac8" it=" 16a1f147ac8" ut=" 16a1f147ac8" version=" 27" sharedUserId=" 1000" isOrphaned=" true" >
有的应用会显示userId=" 10024" 之类的,而不是sharedUserId
/ #
/ # cat /data/system/packages.list | grep bluetooth
com.mediatek.bluetooth.dtt 1000 0 /data/user/0/com.mediatek.bluetooth.dtt platform:targetSdkVersion=27 3002,1023,1015,3003,3001
其中1000是userId,后面的3002,1023,1015,3003,3001是groups,静态的组
/ #
/ #
/ # ps -A | grep -i bluetooth
system1928423 107394055904 SyS_epoll_wait b331bb40 S com.mediatek.bluetooth.dtt
/ # cd /proc/1928
/proc/1928 # ls
attrclear_refs coredump_filter environ fdinfo loginuidmapsmountsnsoom_score_adj rootsessionid statsyscallwchan
auxvcmdlinecpusetexeiomake-it-fail memmountstats oom_adjpagemapschedsmapsstatmtask
cgroup commcwdfdlimits map_filesmountinfo netoom_score personalityschedstat stackstatus timerslack_ns
/proc/1928 # cat status
Name:k.bluetooth.dtt
State:S (sleeping)
Tgid:1928
Ngid:0
Pid:1928
PPid:423
TracerPid:0
Uid:1000100010001000
Gid:1000100010001000
FDSize: 256
Groups:1000 1015 1023 3001 3002 3003 9997 9997
VmPeak:1074776 kB
VmSize:1073940 kB
VmLck:0 kB
VmPin:0 kB
VmHWM:56452 kB
VmRSS:55904 kB
VmData:118120 kB
VmStk:8192 kB
VmExe:20 kB
VmLib:96592 kB
VmPTE:248 kB
VmPMD:0 kB
VmSwap:0 kB
Threads:11
SigQ:4/5694
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000001204
SigIgn: 0000000000000000
SigCgt: 00000006400084f8
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000000000000000
CapAmb: 0000000000000000
Seccomp:0
Cpus_allowed:f
Cpus_allowed_list:0-3
Mems_allowed:1
Mems_allowed_list:0
voluntary_ctxt_switches:60
nonvoluntary_ctxt_switches: 22
其中,Groups:1000 1015 1023 3001 3002 3003 9997 9997是进程动态真实的属于的组。
实现代码在kernel/fs/proc/base.cONE(" status" ,S_IRUGO, proc_pid_status),
system/core/include/private/android_filesystem_config.h
其中定义了user和group id号。
#define AID_SDCARD_RW 1015/ external storage write access /
frameworks/base/data/etc/platform.xml 中定义,需要加入group gid,那么一般应用才能访问
< permission name=" android.permission.WRITE_EXTERNAL_STORAGE" />
< group gid=" media_rw" />
< group gid=" sdcard_rw" />
< /permission>
【关于Android的app权限申请问题】编译后,在/system/etc/permissions/platform.xml中。
可以adb pull后进行修改并试验。
这样修改后,一般app就可以修改内置sdcard了。
例如/sdcard/Android目录下创建新目录。
因为一般应用可以在AndroidManifest.xml中申请android.permission.WRITE_EXTERNAL_STORAGE,但是android.permission.WRITE_MEDIA_STORAGE却是私有的系统app才能申请的。
另外文件frameworks/base/data/etc/privapp-permissions-platform.xml 有系统app权限的特定定义。
另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

    推荐阅读