在system.img和data.img,我们发现目录和文件有自己的UID/GID及相应的访问权限
但在Android的编译环境中,这些目录和文件目录并没有对此有相应的配置。
事实上,这些修改是有mkyaffs2image工具完成的。分析mkyaffs2image.c源代码,其过程如下:1. 预制条件. 当我们使用 mkyaffs2image 工具生成yaffs2文件系统时,这里有两个预制条件:
a. 使用'-f'标志
/external/yaffs2/yaffs2/utils/mkyaffs2image.c.
如果'-f',代码中fixstats标志会被设置,一些特殊操作将会根据标志来操作
if (strcmp(argv[1], "-f") == 0) {
fixstats = 1;
argc--;
argv++;
}b. 输入的文件夹的名字必须是"data"或者"system"
if (fixstats) {
int len = strlen(argv[1]);
if((len >= 4) && (!strcmp(argv[1] + len - 4, "data"))) {
source_path_len = len - 4;
} else if((len >= 7) && (!strcmp(argv[1] + len - 6, "system"))) {
source_path_len = len - 6;
} else {
fprintf(stderr,"Fixstats (-f) option requested but filesystem is not data or android!\n");
exit(1);
}
fix_stat(argv[1], &stats);
}2. 正常配置:访问权限、UID/GID.
mkyaffs2image 给所有的目录和文件uid:gid/ROOT:ROOT,使用在编译环境中得到原始的访问权限3. Android特殊的配置如果fixstats标志被设置了,mkyaffs2image 将会做一些特殊的配置用于Android操作系统 /external/yaffs2/yaffs2/utils/mkyaffs2image.c.
main() -> process_directory() -> fix_stat() -> fs_config() -> fs_config() 定义在 sysem/core/include/private/android_filesystem_config.h.
该函数根据android_dirs和android_files数据结构做Android相关的配置4. android_dirs和android_files数据结构定义在system/core/include/private/android_filesystem_config.h文件中:static struct fs_path_config android_dirs[] = {
{ 00770, AID_SYSTEM, AID_CACHE, "cache" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/app" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/app-private" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/dalvik-cache" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/data" },
{ 00771, AID_SHELL, AID_SHELL, "data/local/tmp" },
{ 00771, AID_SHELL, AID_SHELL, "data/local" },
{ 01771, AID_SYSTEM, AID_MISC, "data/misc" },
{ 00770, AID_DHCP, AID_DHCP, "data/misc/dhcp" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data" },
{ 00750, AID_ROOT, AID_SHELL, "sbin" },
{ 00755, AID_ROOT, AID_SHELL, "system/bin" },
{ 00755, AID_ROOT, AID_SHELL, "system/xbin" },
{ 00755, AID_ROOT, AID_ROOT, "system/etc/ppp" },
{ 00777, AID_ROOT, AID_ROOT, "sdcard" },
{ 00755, AID_SYSTEM, AID_SYSTEM, "system/midletbox" },
{ 00777, AID_SYSTEM, AID_SYSTEM, "system/bin/midletvm" },
{ 00755, AID_ROOT, AID_ROOT, 0 },
};
static struct fs_path_config android_files[] = {
{ 00440, AID_ROOT, AID_SHELL, "system/etc/init.goldfish.rc" },
{ 00550, AID_ROOT, AID_SHELL, "system/etc/init.goldfish.sh" },
{ 00440, AID_ROOT, AID_SHELL, "system/etc/init.trout.rc" },
{ 00550, AID_ROOT, AID_SHELL, "system/etc/init.ril" },
{ 00550, AID_ROOT, AID_SHELL, "system/etc/init.testmenu" },
{ 00550, AID_DHCP, AID_SHELL, "system/etc/dhcpcd/dhcpcd-run-hooks" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/dbus.conf" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/main.conf" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/input.conf" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/audio.conf" },
{ 00444, AID_RADIO, AID_AUDIO, "system/etc/AudioPara4.csv" },
{ 00555, AID_ROOT, AID_ROOT, "system/etc/ppp
{ 02755, AID_ROOT, AID_NET_RAW, "system/bin/ping" },
{ 02755, AID_ROOT, AID_INET, "system/bin/netcfg" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/su" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/librank" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/procrank" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/procmem" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/tcpdump" },
{ 04755, AID_ROOT, AID_ROOT, "system/bin/fota" },
{ 00755, AID_ROOT, AID_SHELL, "system/bin/*" },
{ 00755, AID_ROOT, AID_SHELL, "system/xbin/*" },
{ 00750, AID_ROOT, AID_SHELL, "sbin/*" },
{ 00755, AID_ROOT, AID_ROOT, "bin/*" },
{ 00750, AID_ROOT, AID_SHELL, "init*" },
{ 00644, AID_ROOT, AID_ROOT, 0 },
};
分享到:
相关推荐
5. **权限处理**:自动处理Android的存储权限请求,确保在需要时向用户请求访问文件系统的权限。 6. **易于集成**:简单的API接口,使得开发者能够快速将文件选择功能集成到自己的项目中。 **使用步骤:** 1. **...
5. **修改文件权限**:在Linux(包括Android)系统中,文件权限由read(读)、write(写)和execute(执行)三个基本权限组成,分别用r、w、x表示。这些权限可以针对文件所有者、同一组用户和其他用户进行设置。修改...
通过运行此程序以管理员权限启动,可以确保所有安装过程顺利完成,避免权限问题导致的错误。 2. **AVD Manager.exe**:Android Virtual Device(AVD)管理器,用于创建、管理和配置模拟器实例。开发者可以通过AVD...
1. **frida-server**:这是实际的二进制文件,需要安装到Android设备上,并通过ADB(Android Debug Bridge)或其他方式启动。启动后,它可以监听来自Frida客户端(如`frida`命令行工具或Frida GUI)的连接,执行传入...
【Android Doc Picker】是一个专为Android开发者设计的开源文档选择器库,它的主要目标是提供一个简洁、用户友好的界面,使用户能够方便地从他们的设备中选取各种类型的文档,包括PDF、PPT、文本文件、Word文档以及...
- 添加可执行权限给解压后的`bin/studio.sh`文件,通过命令`chmod +x /opt/android-studio/bin/studio.sh`。 - 创建桌面快捷方式,方便启动。在终端输入以下命令,根据个人需求修改路径和图标: ``` nano ~/....
v4库提供了Intent、FileProvider等类,可以帮助构建更新流程,例如创建下载任务、管理文件权限,以及启动安装过程。通过将`android-support-v4.jar`导入到Unity的Android插件目录(通常为Android/libs),可以调用...
### 赋予ANDROID模拟器Root权限详解 在Android开发过程中,有时我们需要对模拟器进行更深层次的操作,比如安装特定的应用、修改系统设置等。这时就需要获取模拟器的root权限。本文将详细介绍如何通过ADB(Android ...
为了接收Beacon信号,你需要在`AndroidManifest.xml`文件中添加必要的权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission....
1. **Android 7.0 文件访问权限** 在Android 6.0(API级别23)引入运行时权限后,Android 7.0进一步加强了对存储空间的访问控制。应用不再能直接访问外部存储(SD卡)上的所有文件,而是需要使用`FileProvider`来...
- **资源加载**: Android系统会加载应用的资源文件,包括图片、布局等,优化资源文件的大小和格式可以有效缩短启动时间。 - **初始化组件**: Activity、Service、BroadcastReceiver等组件的初始化会消耗时间,合理...
在Android系统中,传统的文件存储方式通常需要应用获取相应的文件读写权限,以便在外部存储(如SD卡)上保存和访问数据。然而,随着Android系统的更新,特别是自Android 6.0(Marshmallow)引入运行时权限管理以来,...
Android-PWA-Wrapper 是一个开源项目,其主要目标是帮助开发者将支持离线功能的渐进式Web应用程序(PWA)转化为原生的Android应用程序。这个工具为开发者提供了一个便捷的方式,让他们能够利用已有的PWA,通过简单的...
1. **运行时权限**:Android 6.0引入了运行时权限模型,用户可以在安装应用后对权限进行控制,而不是在安装时一次性授权所有权限。这对用户隐私保护和应用安全有重大意义。 2. **Doze模式**:为了提高电池续航,...
使用`Intent.ACTION_GET_CONTENT`启动文件选择器,然后使用`ContentResolver`读取选定文件的内容。 4. **上传逻辑**: 文件上传的流程通常包括以下步骤: - 读取文件内容到内存或临时文件。 - 创建RequestBody...
"android-29.rar"这个压缩包文件,正如其名所示,包含了针对Android SDK版本29的相关资源,对应的是Android 10.0系统。Android 10.0是Google于2019年发布的操作系统版本,它带来了许多新特性和改进,旨在提高用户...
在Android 6.0(API级别23)及以上版本,系统引入了运行时权限管理机制,这使得开发者需要在应用运行时向用户请求敏感权限,而不是像以前那样在安装时一次性获取所有权限。为了简化这一过程,我们可以创建一个名为...
9. **Android权限**:如果涉及读写本地文件,需要正确声明和处理相关权限。 10. **开源许可**:理解并遵守项目的开源许可协议,确保合法使用和分发代码。 总的来说,“android-auto-scroll-view-pager-master”项目...
7. **权限管理**:考虑到安全因素,BootManager需要获得相应的系统权限才能管理其他应用的启动项,比如读取应用信息、修改系统设置等。 8. **数据备份与恢复**:为了防止误操作或在新设备上快速设置,BootManager...