android手机各大分区详解

1. bootloader
  当我们拿到一款手机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程序这中间发生了些什么呢,我们从下面这张简化了的手机结构图开始:

 

  注意:该结构图并不反映手机的实际分区顺序和位置,只是一个逻辑结构图。

  大家可以简单的把手机的ROM存储类比为我们电脑上的硬盘,这个硬盘被分成了几个分区:bootloader分区,boot分区,system分区等等。后面我们会逐渐介绍各个分区的用途。所谓的刷机我们可以简单的理解成把软件安装在手机的某些分区中,类似于我们在电脑上安装Windows系统。

  当按下电源键手机上电启动后,首先从bootloader分区中一个固定的地址开始执行指令,如图所示,bootloader分区分成两个部分,分别叫做primary bootloader和secondary stage bootloader。Primary bootloader主要执行硬件检测,确保硬件能正常工作后将secondary stage
bootloader拷贝到内存(RAM)开始执行。Secondary stage bootloader会进行一些硬件初始化工作,获取内存大小信息等,然后根据用户的按键进入到某种启动模式。比如说大家所熟知的通过电源键和其它一些按键的组合,可以进入到recovery,fastboot或者选择启动模式的启动界面等。我们在论坛上看到的bootloader通常指的就是secondary stage bootloader。不过我们不需要关心太多的细节,可以简单的理解为bootloader就是一段启动代码,根据用户按键有选择的进入某种启动模式。

  fastboot模式:fastboot是android定义的一种简单的刷机协议,用户可以通过fastboot命令行工具来进行刷机。比如说fastboot flash boot boot.img这个命令就是把boot.img的内容刷写到boot分区中。一般的手机厂商不直接提供fastboot模式刷机,而是为了显示他们的牛B之处,总是会提供自己专有的刷机工具和刷机方法。比如说三星的Odin,摩托的RSD,华为的粉屏等等。但是其本质实际上是相同的,都是将软件直接flash到各个分区中。
    
  recovery模式:recovery是android定义的一个标准刷机协议。当进入recovery模式时,secondary stage bootloader从recovery分区开始启动,recovery分区实际上是一个简单的Linux系统,当内核启动完毕后,开始执行第一个程序init(init程序是Linux系统所有程序的老祖宗)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。通过recovery程序,用户可以执行清除数据,安装刷机包等操作。一般的手机厂商都提供一个简单的recovery刷机,而大名鼎鼎的CWM
Recovery就是一个加入了很多增强功能的recovery,要想用上CWM Recovery前提是recovery分区可以被刷写。大家在论坛上看到的解锁bootloader,通常指的就是解锁recovery或fastboot,允许刷写recovery分区,这样大家就可以用上喜爱的CWM Recovery了。

  手机除了普通的CPU芯片以外,还有MODEM处理器芯片。该芯片的功能就是实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区。

2. 正常启动

  当我们只是按下电源键开机时,会进入正常启动模式。Secondary stage bootloader会从boot分区开始启动。Boot分区的格式是固定的,首先是一个头部,然后是Linux内核,最后是用作根文件系统的ramdisk。
    
  一般针对每个机型的完整刷机包中会有一个boot.img文件,这就是boot分区镜像文件。如何编辑该镜像文件可以参照这篇文章http://android-dls.com/wiki/inde … Re-Pack_Boot_Images。
    
  当Linux内核启动完毕后,就开始执行根文件系统中的init程序,init程序会读取启动脚本文件(init.rc和init.xxxx.rc)。启动脚本文件的格式大家可以在网上找到很多参考资料,这里就不写了,而且我们在原厂ROM上移植MIUI的原则是不修改boot分区,因为有一些机型无法修改boot分区。
    
  根文件系统中有一个重要的配置文件,叫default.prop,该文件的内容一般为:
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=1
ro.allow.mock.location=1
ro.debuggable=0
persist.service.adb.enable=1。
  文件中的每一行对某个属性赋值,在后续的文章中我们还会谈到属性。这里面大家需要注意的两个属性:ro.secure和ro.debuggable。如果ro.secure=0允许我们运行adb root命令。在下一篇我们会详细介绍adb,这是我们做ROM移植的利器。通常大家说得内核ROOT指的就是ro.secure=0。ROOT权限只是的手机上有一个名为授权管理的程序(Superuser.apk)可以授予程序root用户的权限。ro.deguggable=1允许调试系统APP。
    
  init程序读取启动脚本,执行脚本中指定的动作和命令,脚本中的一部分是运行system分区的程序,下一节我们就来看看system分区的结构。

3. system分区
  在讲system分区之前,我们先来看下面这张Android的软件系统架构图。


 

  从上到下依次为:
  核心应用层:这一层就是大家平常所接触的各种各样的系统自带应用,比如联系人,电话,音乐等。应用层往下就是开发人员所接触的。

  框架层:这一层是Android系统的核心,它提供了整个Android系统运作的机制,像窗口管理,程序安装包管理,开发人员所接触的Activity, Service, broadcast等等。

  JNI层:JNI层是Java程序和底层操作系统通信的一个机制,它使得Java代码可以调用C/C++代码来访问底层操作系统的API。

  Dalvik虚拟机:Android开发使用Java语言,应用程序的Java代码会被编译成dalvik虚拟机字节码,这些字节码由dalvik虚拟机解释执行。

  本地库:本地库一般是由C/C++语言所开发,直接编译成相应CPU的机器码,这其中包含标准C库,用以绘制图形的skia库,浏览器核心引擎webkit等。

  HAL:硬件抽象层,为了和各个厂家的不同硬件工作,Android定义了一套硬件接口,比如说为了使用相机,厂家的相机驱动必须提供的接口方法。这样使得上层的代码可以独立于不同的硬件运行。

  厂家适配层:本来Android定义的HAL层是直接和厂家提供的设备驱动打交道的,但是目前厂家不想开源HAL部分的代码,因此很多厂家都提供了一个我称之为厂家适配层的代码,这样在HAL层接口的实现只是一个简单的对厂家适配层接口函数的调用。

  内核:这一层就是大家熟悉的Linux内核,内核中包含有各种硬件驱动,这些驱动不同的手机厂商不同的手机是不一样的。Linux内核是支持驱动模块化机制的,简单的说就是允许用户动态的加载或者卸载某个硬件驱动,但是目前来看,手机厂商除了提供WIFI驱动单独加载外,其它驱动都是和内核绑定在一起的。

从这张软件结构图来看,除了内核是放在boot分区外,其它层的代码都是在system分区中。

下面结合这张图来介绍system分区的主要目录内容:
system/app: app目录下存放的是核心应用,也就是大家熟知的系统APP,这些系统自带的程序是不能简单的卸载的,要通过一些特殊的方式才能删除(大家熟悉的一种方法是用RE文件管理器)。

system/lib: lib目录下存放的是组成JNI层,Dalvik虚拟机,本地库,HAL层和厂家适配层的所有动态链接库(.so文件)。

system/framework: 该目录下存放的是框架层的JAR包,其中对MIUI移植来说有3个最重要的JAR包(framework.jar, android.policy.jar, services.jar)。后续的文章会重点介绍这3个包。

system/fonts: 该目录下存放的是系统缺省的字体文件。

system/media:该目录下存放的是系统所使用的各种媒体文件,比如说开机音乐,动画,壁纸文件等。不同的手机该目录的组织方式可能不一样。如何修改这些文件请参考网上对应机型形形色色的教程,这里不再赘叙。

system/bin: 该目录下存放的是一些可执行文件,基本上是由C/C++编写的。其中有一个重要的命令叫app_process下一节单独介绍。

system/xbin: 该目录下存放的是一些扩展的可执行文件,既该目录可以为空。大家常用的busybox就放在该目录下。Busybox所建立的各种符号链接命令都是放在该目录。

system/build.prop: build.prop和上节说得根文件系统中的default.prop文件格式一样,都称为属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属性值有一些命名规范:
  ro开头的表示只读属性,即这些属性的值代码是无法修改的。
  persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。
  其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之后不会保留。
  很多ROM制作者都会修改一下build.prop信息,里面的一些以ro.build开头的属性就是你在手机设置中的关于手机里看到的。可以通过修改build.prop文件来将这个ROM打上自己的印记(XXX所修改)。我见过一个只是删了system/app的一些程序,然后修改build.prop中的ro.build.display.id和ro.build.version.incremental中的两个属性值打上自己的大名的ROM。

system/etc: 该目录存放一些配置文件,和属性配置文件不一样,这下面的配置文件可能稍微没那么的有规律。一般来说,一些脚本程序,还有大家所熟悉GPS配置文件(gps.conf)和APN配置文件(apns-conf.xml)放在这个目录。像HTC将相机特效所使用的一些文件也放在这个目录下。

4. Zygote(app_process)
  上一节提到init会执行一个重要的命令程序叫app_process,一般大家称之为Zygote。(Zygote是卵的意思,所有的Android进程都是由它生出来的)。Zygote首先会加载dalvik虚拟机,然后产生一个叫做system_server的进程。system_server顾名思义被称作Android的系统服务程序,它主要管理整个android系统。system_server启动完成后开始寻找一个叫做启动器的程序,找到之后由zygote开始启动执行启动器,这就是我们常见到的桌面程序。

上面描述的是一个相当简化的启动过程,了解这些对于适配MIUI基本上就够了,如果大家对这些想进一步了解的话,请关注市面上各种Android内幕书籍。

5. data和cache分区
  这一节简单的介绍一下data和cache分区。当我们开机进入桌面程序后,一般来说我们都会下载安装一些APP,这些APP都安装在data/app目录下。所有的Android程序生成的数据基本上都保存在data/data目录下。wipe data实质上就是格式化data分区,这样我们安装的所有APP和程序数据就都丢失了。
    
  cache分区从名字上来看是用来缓存一些文件的,比如说一些音乐下载的临时文件,或者下载管理下载的内容基本上放在这个分区。

6. 小结
  本章主要是介绍了一下Android手机的硬软件结构以及主要分区的内容,并简要的介绍了一些开机启动过程。了解这些内容有助于我们从整体上理解ROM移植。


  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
android笔记.doc android笔记.pdf 1 系统配置... ..1 1.1 建立SDK开发环境... ...2 1.2 Android源码的编译 ... .6 1.3 编译在G1 上运行的android 2.1(eclair)代码 ... ..9 1.4 编译在G1 上运行的android 2.2(froyo)代码_旧方法... ..12 1.5 编译在G1 上运行的android 2.2(froyo)代码_新方法... ..15 1.6 编译在N1 上运行的android 2.3(GingerBread)代码... .18 1.7 系统结构... ..21 1.8 模拟器调试与真机调试... ..22 1.9 安装和卸载应用程序(apk包) ... ...23 1.10 系统升级... ..26 1.11 android系统支持app2sd(修改boot.img) ... ..27 2 基本概念... ...30 2.1 Android组件 ... ..31 2.1.1 基本组件... .31 2.1.2 组件间的通讯... ..32 2.1.3 intent使用方法... .33 2.2 界面开发... ..35 2.2.1 界面元素... .35 2.2.2 布局的实现... ...36 2.2.3 事件响应... .37 2.2.4 应用软件代码结构... ...38 2.2.5 国际化的支持(多语言) ... ...39 2.2.6 常见问题及解决方法... ..40 2.2.7 android是重要的包... ...41 2.3 界面元素分析... ...42 2.4 修改公共控件... ...43 2.5 源码中常用于参考的代码 ... .44 3 程序开发... ...45 3.1 相关工具介绍... ...46 3.1.1 从c++到java(一) ... ..46 3.1.2 从c++到java(二) ... ..47 3.2 常用技术... ..49 3.2.1 如何新建和使用控件... ..49 3.2.2 使用定时器Timer及消息处理 ... ...51 3.2.3 操作调试数据库与ContentProvider详解... ..53 3.2.4 电源管理... .56 3.2.5 开发桌面小程序AppWidget ... ...58 3.2.6 代码中运行二进制程序或脚本 ... .60 3.2.7 Android自带的md5 校验 ... ..61 3.2.8 将数据打进apk包 ... ..63 3.2.9 如何改变窗口的标题栏的布局 ... .66 3.2.10 动态改变控件大小... ...67 3.2.11 缩放drawable ... ...68 2 3.2.12 解析apk包内容 ... ...69 3.3 Java对C库的调用 ... ...70 3.3.1 android中使用JNI... ..70 3.3.2 安装使用NDK ... .72 3.3.3 在源码中将库打进apk ... ...73 3.3.4 简单的C库调试方法 ... ...75 3.4 典型应用... ..76 3.4.1 语音合成... .76 3.4.2 语音识别简介... ..79 3.4.3 语音识别方法一:使用intent调用语音识别程序 ... ..80 3.4.4 语音识别方法二:应用程序自己调用语音识别库 ... ..82 3.4.5 语音识别方法三:使用Service调用语音识别程序 ... ..84 3.4.6 人脸识别... .87 3.4.7 图像识别... .89 3.4.8 文字识别... .90 3.4.9 卫星定位... .91 3.4.10 多媒体播放... ...95 3.4.11 访问网络... .97 3.4.12 博客客户端的实现... ...99 3.5 调试技术... ...102 3.5.1 JDWP调试 ... ..102 3.5.2 运行dalvik测试程序... ..103 3.5.3 测试小程序... .104 3.5.4 dalvik提供的调试工具集 ... ...107 3.5.5 c++程序的调试 ... ... 110 3.5.6 测试工具CTS ... ... 113 3.5.7 解决eclipse无法识别API的问题 ... ... 115 3.5.8 调试方法补充... ... 116 3.6 换肤(theme) ... . 118 3.6.1 当前的换肤方法(theme) ... . 118 3.6.2 制作换肤包... .120 4 android架构层分析 ... ..122 4.1 启动过程... ...123 4.1.1 开机流程... ..123 4.1.2 开机动画... ..125 4.1.3 android应用的启动过程... ..127 4.2 服务的原理与使用... ..128 4.3 键盘事件处理... .130 4.4 包管理... .131 4.5 传感器... .132 4.6 浅析dalvik虚拟机JIT技术的实现... ...133 4.7 应用程序的签名(Signature) ... ...135 4.8 应用的权限... ..138 4.9 屏幕密度Density ... ..140 3 4.10 Prelink实现的源码分析 ... ...142 4.11 适配硬件平台... .145 4.12 其他介绍... ...147 4.12.1 手机保护Keyguard ... .147 4.12.2 空中升级Fota... .148 4.12.3 Flash分区 ... .149
android文件架构详解 cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。 红色标记的两个文件是debug模式下产生的 data : 存放用户安装的软件以及各种数据。 default.prop : 默认配置文件 dev : 设备节点文件的存放地 etc : 指向 /system/etc ,配置文件存放目录 init : 系统启动到文件系统的时候第一个运行的程序。 init.goldfish.rc : 初始化文件 init.rc : 初始化文件 proc : /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。 root : 为空 。 sbin: 只放了一个用於调试的adbd程序 sdcard: 是SD卡中的FAT32文件系统挂载的目录 sqlite_stmt_journals: 一个根目录下的tmpfs文件系统,用於存放临时文件数据。 sys : 用於挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值 system :系统中的大部分东西都在这各目录下,很重要的一个目录文件 system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下,我看来是一个真正的rootfs。他在Android手机中存放在nandflash的 mtd3中,是一个yaffs2文件系统,在启动时被挂载在root的/system目录下,其中包含有: # ls -a -l /system drwxr-xr-x root 208 1970-01-01 08:00 xbin drwxr-xr-x root root 1970-01-01 08:00 modules drwxr-xr-x root root 2010-06-23 09:39 framework drwxr-xr-x root root 2010-06-23 09:39 fonts drwxr-xr-x root root 2010-06-23 09:39 etc -rw-r--r-- root root 2197 2010-06-23 09:39 build.prop drwxr-xr-x root root 2010-06-23 09:39 media drwxr-xr-x root shell 2010-06-23 09:39 bin drwxr-xr-x root root 2010-06-23 09:39 usr drwxr-xr-x root root 2010-06-23 09:39 app drwxr-xr-x root root 2010-06-23 09:39 lost+found drwxr-xr-x root root 2010-06-23 09:39 lib drwxr-xr-x root root 2010-06-23 09:39 sd -rw-r--r-- root root 1452010-06-23 09:39 init.rc # xbin :下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当於标准Linux文件系统中的 /sbin。 modules:使用来存放内核模块(主要是fs和net)和模块配置文件的地方。 framework: 是JAVA平台的一些核心文件,属於JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。 备注:什么是odex文件? odex是被优化过的JAVA程序文件,体积通常是.jar的4倍左右。执行效率比.jar高。 fonts :字体库文件的存放目录。 etc :这里存放了系统中几乎所有的配置文件,根目录下的/etc就链结於此。 build.prop :是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件。 media :里面主要是存放了系统的铃声的,分为 notifications(通知)、ui(界面)、alarms(警告)和ringtones(铃声),里面都是.ogg音频文件。 bin :是存放用户常用的工具程序的,其中大部分是到toolbox的链接(类似嵌入式Linux中的busybox)。toolbox应该是 google简化版的busybox。 usr :用户的配置文件,如键盘布局、共享、时区文件等等。您可以cat 来看看。 app :存放的是Android系统自带的JAVA应用程序。 lost+found :yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。 lib :存放几乎所有的共享库(.so)文件。 sd :SD卡中的EXT2分区的挂载目录 init.rc :一个初始化脚本,用於将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏
原创2010年android文档的整理打包的pdf档(含目录) 文档内容不能复制, 介意者请慎下. 大部分内容可在http://blog.csdn.net/xieyan0811上看到 文档目录如下 1 系统配置 1 1.1 建立SDK开发环境 2 1.2 Android源码的编译 6 1.3 编译在G1上运行的android 2.1(eclair)代码 9 1.4 编译在G1上运行的android 2.2(froyo)代码_旧方法 12 1.5 编译在G1上运行的android 2.2(froyo)代码_新方法 15 1.6 编译在N1上运行的android 2.3(GingerBread)代码 18 1.7 系统结构 21 1.8 模拟器调试与真机调试 22 1.9 安装和卸载应用程序(apk包) 23 1.10 系统升级 26 1.11 android系统支持app2sd(修改boot.img) 27 2 基本概念 30 2.1 Android组件 31 2.1.1 基本组件 31 2.1.2 组件间的通讯 32 2.1.3 intent使用方法 33 2.2 界面开发 35 2.2.1 界面元素 35 2.2.2 布局的实现 36 2.2.3 事件响应 37 2.2.4 应用软件代码结构 38 2.2.5 国际化的支持(多语言) 39 2.2.6 常见问题及解决方法 40 2.2.7 android是重要的包 41 2.3 界面元素分析 42 2.4 修改公共控件 43 2.5 源码中常用于参考的代码 44 3 程序开发 45 3.1 相关工具介绍 46 3.1.1 从c++到java(一) 46 3.1.2 从c++到java(二) 47 3.2 常用技术 49 3.2.1 如何新建和使用控件 49 3.2.2 使用定时器Timer及消息处理 51 3.2.3 操作调试数据库与ContentProvider详解 53 3.2.4 电源管理 56 3.2.5 开发桌面小程序AppWidget 58 3.2.6 代码中运行二进制程序或脚本 60 3.2.7 Android自带的md5校验 61 3.2.8 将数据打进apk包 63 3.2.9 如何改变窗口的标题栏的布局 66 3.2.10 动态改变控件大小 67 3.2.11 缩放drawable 68 3.2.12 解析apk包内容 69 3.3 Java对C库的调用 70 3.3.1 android中使用JNI 70 3.3.2 安装使用NDK 72 3.3.3 在源码中将库打进apk 73 3.3.4 简单的C库调试方法 75 3.4 典型应用 76 3.4.1 语音合成 76 3.4.2 语音识别简介 79 3.4.3 语音识别方法一:使用intent调用语音识别程序 80 3.4.4 语音识别方法二:应用程序自己调用语音识别库 82 3.4.5 语音识别方法三:使用Service调用语音识别程序 84 3.4.6 人脸识别 87 3.4.7 图像识别 89 3.4.8 文字识别 90 3.4.9 卫星定位 91 3.4.10 多媒体播放 95 3.4.11 访问网络 97 3.4.12 博客客户端的实现 99 3.5 调试技术 102 3.5.1 JDWP调试 102 3.5.2 运行dalvik测试程序 103 3.5.3 测试小程序 104 3.5.4 dalvik提供的调试工具集 107 3.5.5 c++程序的调试 110 3.5.6 测试工具CTS 113 3.5.7 解决eclipse无法识别API的问题 115 3.5.8 调试方法补充 116 3.6 换肤(theme) 118 3.6.1 当前的换肤方法(theme) 118 3.6.2 制作换肤包 120 4 android架构层分析 122 4.1 启动过程 123 4.1.1 开机流程 123 4.1.2 开机动画 125 4.1.3 android应用的启动过程 127 4.2 服务的原理与使用 128 4.3 键盘事件处理 130 4.4 包管理 131 4.5 传感器 132 4.6 浅析dalvik虚拟机JIT技术的实现 133 4.7 应用程序的签名(Signature) 135 4.8 应用的权限 138 4.9 屏幕密度Density 140 4.10 Prelink实现的源码分析 142 4.11 适配硬件平台 145 4.12 其他介绍 147 4.12.1 手机保护Keyguard 147 4.12.2 空中升级Fota 148 4.12.3 Flash分区 149
Android动态分区是一种在存储设备上为应用程序和数据进行分区管理的技术。它允许用户将存储设备的空间灵活地划分为多个分区,并将不同的应用程序和数据存储在不同的分区中。 首先,Android动态分区可以提供更灵活的存储管理。通常情况下,存储设备被划分为内部存储和外部存储。内部存储用于安装应用程序和存储数据,而外部存储则用于存储媒体文件等。通过动态分区,用户可以根据自己的需求,自由地划分存储设备的空间,使得内部存储和外部存储可以互相调整大小,从而更好地满足用户的存储需求。 其次,动态分区可以提供更好的隔离保护。每个应用程序和数据都被存储在独立的分区中,这样可以避免不同应用程序之间的干扰和冲突。当一个应用程序出现问题时,只需要清除或重置相关的分区,而不会影响其他应用程序的正常运行。这种隔离性可以增加系统的稳定性和安全性。 另外,Android动态分区还可以优化存储空间的使用。系统会将一些常用的应用程序和数据放置在内部存储的快速区域,这样可以提高应用程序和数据的访问速度。同时,一些很少使用的应用程序和数据可以被移动到外部存储的缓慢区域,从而释放内部存储空间,让更常用的应用程序和数据能够更好地运行。 总的来说,Android动态分区是一种可以提供灵活存储管理、更好的隔离保护和优化存储空间使用的技术。它可以为用户提供更好的使用体验,并提高系统的稳定性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值