设置存储

来源:互联网 发布:淘宝仓库怎么上架商品 编辑:程序博客网 时间:2024/06/06 02:53

Android 7.1.1 设置-存储-内部共享存储空间

字符串资源所在目录:

/frameworks/base/core/res/res/values-zh-rCN/strings.xml

<string name="storage_internal" msgid="3570990907910199483">"内部共享存储空间"</string>

Java代码路径:

/frameworks/base/core/java/android/os/storage/VolumeInfo.java

return Resource.getSystem().getString(com.android.internal.R.string.storage_internel);

设置部分代码路径:

/package/apps/Settings/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java

onCreate()中设置了布局

addPreferencesFromResource(R.xml.device_info_storage_volume);

getPreferenceScreen().setOrderingAsAdded(true);

设置-存储-内部共享存储空间-应用

设置-存储-内部共享存储空间-图片

设置-存储-内部共享存储空间-视频

设置-存储-内部共享存储空间-音频

设置-存储-内部共享存储空间-系统

设置-存储-内部共享存储空间-其他

private static final int [ ]  ITEMS_SHOW_SHARED = new int[ ] {

R.string.storage_detail_apps;

R.string.storage_detail_images;

R.string.storage_detail_videos;

R.string.storage_detail_audio;

R.string.storage_detail_system;

R.string.storage_detail_other;

 };


设置-存储-内部共享存储空间-缓存数据

addItem(screen, R.string.storage_detail_cached, null, Userhandle.USER_NULL);

设置-存储-内部共享存储空间-浏览

mExplore = buildAction(R.string.storage_menu_explore);

onPreferenceTreeClick 处理了这些id的点击事件。

想看一下这个分区界面的显示到底是针对哪个实际分区的:


调用PrivateVolumeSettings.java的地方是:



Android N 设置界面主要由由Conditions,Suggestions和Main Menu三部分组成Android 7.0 settings 新功能全面解析

Settings.java 是一个静态Class的集合(那么所有的初始化操作自然在其父类实现),里面定义了用于独立启动的设置子类,追从其继承关系

Settings extends SettingsActivityextends SettingsDrawerActivityimplements 

PreferenceManager.OnPreferenceTreeClickListener,

PreferenceFragment.OnPreferenceStartFragmentCallBack,

ButtonBarHandler,FragmentManager.OnBackStackChangedListener,

SearchView.OnQueryTextListener,SearchView.OnCloseListener,

MenuItem.OnActionExpandListener

SettingsActivity.java 的OnCreate() 看出刚开始主界面是转入DashBoardSummary.java这个Fragment的界面。进入DashBoardSummary.java,查看其onCreate(),

可以看出主的Menu Tree 上的所有列表信息,来源于getDashboardCategries()这个函数,查看这个函数的声明,发现其位于SettingsDrawerActivity.java中。

SettingsDrawerActivity.java 位于/frameworks/base/package/SettingsLib/src/com/android/settingslib/drawer/

查看getDashboardCategries()的定义,发现所有列表信息来源于TitleUtils类的getCategroies()类,从这个类的内部发现,其实所有的列表项都是从AndroidManifest.xml

文件中解析得到的,具体的解析配置涉及到如下两块:

<meta-data android:name="com.android.settings.category"

android:value="com.android.settings.category.wireless" />

<intent-filter android:priority="4">

<action android:name="com.android.settings.action.SETTINGS" />

</ intent-filter>

其中intent-filter 指定在同一组的排序,meta-data 指定属于哪一组。


设置-存储的设置子类是:

com.android.settings.Settings$StorageSettingsActivity.

先从StorageSettings.java开始,位于/package/app/Settings/src/com/android/settings/deviceinfo/

onCreate()界面加载了布局device_info_storage.xml 位于 /package/app/settings/res/xml/

内部存储设备对应资源 /package/app/settings/res/values/strings.xml 的storage_internel_title.

refresh() 用于加载各种存储设备


可以通过命令cat /proc/partitions查看目前系统有多少个分区

可以通过命令cat /proc/devices查看当前系统中所有设备的主设备号

如果想查看某些分区的别名信息,对于高通平台来说可以通过命令ls -al /dev/block/platform/soc/7824900.sdhci/by-name/

这些信息可以帮助发现每个分区到底是用来干什么的,比如/dev/block/mmcblk0p41这个分区就是用来存放/system的。

有了这些信息,就可以使用dd命令,将感兴趣的分区全部倒出来进行分析。比如,如果想将TrustZone相关的tz分区倒出到sdcard上,可以使用下面的命令dd if=/dev/block/platform/msm_sdcc.1/by-name of=/sdcard/tz.img<pre> 

android 7.1.1 无sd卡插入时,点击设置-存储直接进入“内部共享存储空间”,有SD卡插入时,进入设备列表界面,再分别点击才能进入各自详情统计页面。

内部存储设备 internal storage:就是将文件保存在设备内部存储器中。

android 7.1.1 插入sd卡后,会进入SD卡的设置流程:

1.用作便携式存储设备

用于在设备之间移动照片和其他媒体文件

2.用作内部存储设备

仅用于存储这台设备上的内容,包括应用和照片。为了防止此存储设备在其

他设备上使用,你需要先对其进行格式化。

选择2后,点击下一步,

格式化为内部存储设备

SanDisk SD 卡必须进行格式化,以确保安全。

格式化之后,此SanDisk SD卡将只能在这台设备上使用。

格式化操作会清空当前存储在SanDisk SD卡上的所有数据。为避免数据丢失,建议您先将数据备份。

点击清空并格式化,进入格式化流程

正在格式化SanDisk SD卡……

格式化进度条

请勿在格式化过程中移除该SanDisk SD卡

完成之后,就将SD 设置成了内部存储卡。

高通分区配置表所在位置:/Non-HLOS/MSM8953.LA.2.0/common/config/pa726.xml

android partition 分析:

android的存储分为两种:

1.RAM,如emmc标准的ddr3/4,容量比较小。

2.ROM,容量比较大,如8G,16G,32G,64G,128G。

我们给手机刷机,是把system.img,recovery.img,userdata.img等按照分区表,烧写在对应地址的ROM上,这部分叫系统部分,如15G的手机,开机后只有11G可用,其中5G就是被系统占用了。

在bootloader阶段会从boot/recovery分区中读取kernel/ramdisk到ram上,然后引导kenel,加载虚拟文件系统ramdisk,启动init,然后读取rom中的文件系统内容。

在boot.img, recovery.img的内容下,bootloader会从boot header得到kernel/ramdisk/second/device的大小和要加载到ram上的地址,读取aboot/recovery分区的内容到ram上。

recovery.img和boot.img的构成是一样的,只是里面的文件的大小和信息不同,文件名是一样的。

MTK分区表存放位置:device/mediatek/build/build/tools/ptgen/xxx/xxx.xls

ptgen.pl文件会把xls文件解析成xxxAndroid_scatter.txt放在out/target/product/xxx/中

mtk的flashtool工具会读取这个文件把相关的镜像烧写到rom中

高通分区表存放位置:不同项目位置不同,用find搜索partition.xml

$find. -name "*partition*.xml"

最后会生成rawprogram0.xml文件,高通的刷机工具会根据这个文件把相关的镜像烧写到rom中。

lable:分区名字

size_in_kb:分区大小

type:分区类型

bootable:是否可以引导

readonly:是否为只读

filename:分区对应的镜像名字

sparse:烧录的镜像是否是展开的


该文件是system分区的配置文件,主要作用包括:

WRITE_PROTECT_BOUNDARY_IN_KB =65536 写保护区域的基准大小为64M,保证同一读写属性的分区64M对齐

GROW_LAST_PARTITION_TO_FILL_DISK=true 最后一个分区的大小会自动扩充到最大

<partitionlabel="system" 指定分区的名字为system

size_in_kb="819200" 指定分区大小为800M

type="EBD0A0A2-B9E5-4433-87C0-68B6B72699C7"分区类型为数据分区

bootable="false" 设置该分区为不可引导分区

readonly="true" 读写属性为只读

filename="system.img" 分区对应的镜像名字

sparse="true" 烧录镜像是展开的镜像文件


分区镜像配置文件Boardconfig.mk

device/qcom/msmxx/Boardconfig.mk作用:

1.指定对应分区镜像文件格式化的大小

2.分区镜像文件的文件系统类型

如图3可知system被配置为400M,文件系统类型为ext4格式

注:该值必须小于或等于partition.xml配置的大小partition.xml配置才是真正意义上的物理分区大小,越界将会导致分区加载失败。

当编译的时候makefile就会从Boardconfig.mk获取system分区的大小和文件系统类型并用调用make_ext4fs out/target/product/msm8610/system的文件制作成大小为400Mext4格式的system.img分区压缩文件

注:编译生成的system.img里面包含了对应分区的文件系统类型,以及挂载分区的大小,所以改变分区时一定要更新对应分区镜像文件。

android 下手动挂载分区

mkdir mysystem

mount -t ext4 /dev/block/mmcblk0p20 /mysystem/(挂载某分区)

mount -t vfat /dev/block/sdb1 /mysystem(挂载U盘)













原创粉丝点击