Android14 init.environ.rc详解
Android14 init.environ.rc详解_com.android.art-CSDN博客
android 系统的环境变量应该是在init.environ.rc文件里面进行设置


源码地址在这里
system/core/rootdir/init.environ.rc.in
可以在这里给系统配置PATH(系统开机后可使用bin)
# set up the global environment
on early-initexport PATH /product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin:/system/sbinexport ANDROID_BOOTLOGO 1export ANDROID_ROOT /systemexport ANDROID_ASSETS /system/appexport ANDROID_DATA /dataexport ANDROID_STORAGE /storageexport ANDROID_ART_ROOT /apex/com.android.artexport ANDROID_I18N_ROOT /apex/com.android.i18nexport ANDROID_TZDATA_ROOT /apex/com.android.tzdataexport EXTERNAL_STORAGE /sdcardexport ASEC_MOUNTPOINT /mnt/asecexport TMPDIR /data/local/tmpexport BOOTCLASSPATH %BOOTCLASSPATH%export DEX2OATBOOTCLASSPATH %DEX2OATBOOTCLASSPATH%export SYSTEMSERVERCLASSPATH %SYSTEMSERVERCLASSPATH%%EXPORT_GLOBAL_ASAN_OPTIONS%%EXPORT_GLOBAL_GCOV_OPTIONS%%EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%%EXPORT_GLOBAL_HWASAN_OPTIONS%
查看当前 PATH 值
要查看 PATH 变量的当前值,可以使用 echo 命令:
echo $PATH
临时设置 PATH
若想临时为当前终端会话添加新的搜索路径(例如 /home/user/myprogram),可以使用以下命令
export PATH=$PATH:/home/user/myprogram
init.environ.rc中主要是在on early-init阶段执行由export指令设置全局环境变量,为后续系统服务、zygote、应用程序运行提供路径和配置基础。
它定义了:
系统分区位置(/system, /system/app, /data)
APEX 模块路径(ART(Android Runtime)、i18n(国际化模块,包括ICU字符库)、tzdata--市区数据)
存储抽象路径(/storage, /sdcard)
调试工具选项(ASan、GCOV 等)
# set up the global environment
on early-initexport ANDROID_BOOTLOGO 1export ANDROID_ROOT /systemexport ANDROID_ASSETS /system/appexport ANDROID_DATA /dataexport ANDROID_STORAGE /storageexport ANDROID_ART_ROOT /apex/com.android.artexport ANDROID_I18N_ROOT /apex/com.android.i18nexport ANDROID_TZDATA_ROOT /apex/com.android.tzdataexport EXTERNAL_STORAGE /sdcardexport ASEC_MOUNTPOINT /mnt/asec%EXPORT_GLOBAL_ASAN_OPTIONS%%EXPORT_GLOBAL_GCOV_OPTIONS%%EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%%EXPORT_GLOBAL_HWASAN_OPTIONS%
详细解释如下:
1. export ANDROID_BOOTLOGO 1
控制是否显示 Android 开机动画(boot logo)
1 = 显示开机动画,0 = 不显示
后续 surfaceflinger 或 bootanimation 服务会读取这个变量
实际是否显示还受 ro.bootanim 属性影响。
2. export ANDROID_ROOT /system
定义 Android 系统分区的根目录
大多数系统二进制文件、库、配置都在 /system 下
例如:/system/bin, /system/lib, /system/etc
3. export ANDROID_ASSETS /system/app
指定系统应用资源文件路径
主要用于某些原生代码需要访问 /system/app 下的资源(如 resources.arsc)
实际应用安装路径是 /system/app 和 /system/priv-app
4. export ANDROID_DATA /data
用户数据分区路径
存放:用户 App 数据(/data/data/<package>),Dalvik/ART 缓存(/data/dalvik-cache),系统数据库(/data/system)
/data分区通常在init后期才挂载,这里只是提前设置路径。
5. export ANDROID_STORAGE /storage
存储抽象路径
Android 使用 /storage 作为挂载点,例如:
/storage/emulated/0 → 内部存储(用户 0)
/storage/1234-5678 → SD 卡
6. export ANDROID_ART_ROOT /apex/com.android.art
指向 ART(Android Runtime) 的 APEX 模块路径
APEX (Android Pony Express)是 Android 10+ 引入的系统级模块化组件格式,用于打包和更新核心系统组件,类似系统级别的APK,但面向的是底层服务和库。
/apex/com.android.art 包含:
dex2oat 编译器
dalvikvm 虚拟机
libart.so 等运行时库
✅APEX 的主要用途
用途 示例
更新底层系统服务 更新 com.android.media(多媒体服务)
更新运行时 更新 ART(com.android.art)
更新硬件抽象层 更新 com.android.hardware.graphics.mapper
更新安全组件 更新 com.android.tzdata(时区数据)
✅ 常见的 APEX 模块(Android 13+)
APEX 名称 功能
com.android.art Android Runtime(ART)
com.android.tzdata 时区数据
com.android.i18n 国际化(ICU 库)
com.android.conscrypt 安全通信(OpenSSL 替代)
com.android.media 多媒体服务
com.android.os.statsd 统计服务
7. export ANDROID_I18N_ROOT /apex/com.android.i18n
国际化(i18n)模块路径
包含:
ICU(International Components for Unicode)库
时区数据(部分)
文字处理规则
8. export ANDROID_TZDATA_ROOT /apex/com.android.tzdata
时区数据模块路径
包含 tzdata 数据库(由 IANA 维护)
用于 java.util.TimeZone、android.icu 等
以前在 /system/usr/share/zoneinfo,现在通过 APEX 更新。
9. export EXTERNAL_STORAGE /sdcard
外部存储的符号链接路径
/sdcard 通常是 /storage/emulated/0 的软链接
兼容老应用使用 /sdcard 路径
实际路径由 vold 或 storaged 服务管理。
10. export ASEC_MOUNTPOINT /mnt/asec
ASEC(Android Secure External Code)挂载点
用于安装 .apk 到 SD 卡的老机制(已废弃)
现代 Android 使用 Adoptable Storage 或 SAF(Storage Access Framework)
⚠️ 这个变量现在基本不用了,保留是为了兼容性。
11. %EXPORT_GLOBAL_XXX_OPTIONS%
这些是宏占位符,在编译时会被替换成实际的环境变量设置。
