赞
踩
学习记录以下内容皆以我们项目为例子
getFilesDir --> /data/user/0/com.path/files
getExternalFilesDir --> /storage/emulated/0/Android/data/com.path/files
getCacheDir() --> /data/user/0/com.path/cache
getExternalCacheDir() --> /storage/emulated/0/Android/data/com.path/cache
getDataDirectory --> /data
getDownloadCacheDirectory --> /data/cache
getExternalStorageDirectory --> /storage/emulated/0
getRootDirectory --> /system
getExternalStoragePublicDirectory 参数指定为:Environment.DIRECTORY_PICTURES -->/storage/emulated/0/Pictures
下面是根目录下一些目录参数,可以附上参数获取对应的路径。Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()
public static String DIRECTORY_MUSIC = "Music";音乐保存的位置,音乐存放的标准目录。
public static String DIRECTORY_PODCASTS = "Podcasts";用于保存podcast的音频文件,系统广播存放的标准目录。
public static String DIRECTORY_RINGTONES = "Ringtones";保存铃声的位置,系统铃声存放的标准目录。
public static String DIRECTORY_ALARMS = "Alarms";警报的铃声,系统提醒铃声存放的标准目录。
public static String DIRECTORY_NOTIFICATIONS = "Notifications";通知音保存的位置,系统通知铃声存放的标准目录。
public static String DIRECTORY_PICTURES = "Pictures";下载的图片保存的位置,用于放置用户可用图片的标准目录。
public static String DIRECTORY_MOVIES = "Movies";电影保存的位置,用于放置用户可用的电影的标准目录。
public static String DIRECTORY_DOWNLOADS = "Download";下载的文件的标准目录。
public static String DIRECTORY_DCIM = "DCIM";相机拍摄的图片和视频保存的位置。
public static String DIRECTORY_DOCUMENTS = "Documents";存放用户创建的文档的标准目录。
public static String DIRECTORY_SCREENSHOTS = "Screenshots";放置用户拍摄的屏幕截图的标准目录。
public static String DIRECTORY_AUDIOBOOKS = "Audiobooks";标准目录,其中放置任何音频文件电子书。
requestPermissions(arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.MANAGE_EXTERNAL_STORAGE),
0)
private String getSDCardPath() throws Exception { StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); Class<?> storageVolumeClass = Class.forName("android.os.storage.StorageVolume"); Method getVolumeList = sm.getClass().getMethod("getVolumeList"); Method getPath = storageVolumeClass.getMethod("getPath"); Method isRemovable = storageVolumeClass.getMethod("isRemovable"); Object result = getVolumeList.invoke(sm); for(int i = 0; i < Array.getLength(result); ++i) { Object element = Array.get(result, i); boolean removable = (Boolean) isRemovable.invoke(element); if(removable) { return (String) getPath.invoke(element); } } throw new RuntimeException("no suitable SD path found"); }
以下是我们项目里四种type app的安全配置文件,对应的权限。selinux的文件比较多,一般来说添加权限我们是修改device下面的。
路径:/device/qcom/sepolicy/vendor/common
untrusted_app.te
neverallow untrusted_app diag_device:chr_file rw_file_perms;
allow untrusted_app wbc_service:service_manager find;
allow untrusted_app gba_auth_service:service_manager find;
allow system_app sysfs_socinfo:file rw_file_perms;
allow priv_app sysfs_socinfo:file rw_file_perms;
路径:/device/qcom/sepolicy/vendor/msms8953
system_app.te
allow system_app reserved_file:dir { search };
allow system_app reserved_file:file { getattr open read write };
allow system_app sysfs_info:dir { search };
allow system_app sysfs_info:file { getattr open read write };
allow system_app sysfs_subbatt:dir { search };
allow system_app sysfs_subbatt:file { getattr open read write };
platform_app.te
allow platform_app oemfs:lnk_file { read getattr };
priv_app.te
allow platform_app oemfs:lnk_file { read getattr };
SELinux有下面三种状态:
modem --> dr-xr-x— 4 system system u:object_r:firmware_file:s0 16384 1969-12-31 19:00 /vendor/firmware_mnt/
system\core\include\private\android_filesystem_config.h
system/core/libcutils/fs_config.cpp
untrusted_app如何添加权限成为platform_app?
1.第一种方法通过sign签名的方式可以直接将第三方app转为平台app
2.第二种修改Android.mk文件里的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
再通过mm命令编译apk
untrusted_app如何添加权限成为system_app?
在AndroidManifest.xml文件里添加在Android.mk文件里添加
Domain - 一个进程或一组进程的标签。也称为域类型,因为它只是指进程的类型(ps -A -Z)
Type - 一个对象(例如文件、套接字)或一组对象的标签。(ls -Z)
Class - 要访问的对象(例如文件、套接字)的类型
Permission - 要执行的操作(例如读取、写入)
修改SELinux对应的te文件可能会导致gms测试有fail项,一般来说我们修改device\xxx\sepolicy\common\下的te文件,不要去动到system/sepolicy目录下的te文件的neverallow,就不会有什么问题。如果allow和neverallow冲突了,编译是会报错的。
可在/device/qcom/sepolicy/common/untrusted_app.te文件中增加如下语句解决此问题:
allow untrusted_app sysfs_irdev : file { write };
1.第三方app可以访问哪些路径?
私有数据默认写到/Android/data/pagename/files,这里的数据会随着app删除而删除。
可以访问/data/user/0/com.mitac.cradle/cache/1.txt
2.平台app可以访问哪些路径?
私有数据默认写到/Android/data/pagename/files,这里的数据会随着app删除而删除。
可以访问/data/user/0/com.mitac.cradle/cache/1.txt
可以访问/mnt/sdcard/Android/data/com.mitac.cradle/1.txt
无法访问/mnt/sdcard
无法访问/sys/sys_info/module/touch/sensitivity/level
3.系统app可以访问哪些路径?
私有数据默认写到/Android/data/pagename/files,这里的数据会随着app删除而删除。
可以访问/sys/sys_info/module/touch/sensitivity/level
可以访问/cache
可以访问/Reserved /Reserved1/
可以访问/data/user/0/com.mitac.cradle/cache/
可以访问/mnt/sdcard/
可以访问/storage/emulated/0/
无法访问/proc/partitions
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。