com.android.internal.R,android.R,Framework-res

本文探讨了Android框架中framework-res资源的定位及其与R文件的关系。framework-res位于framework/base/core/res目录,其资源被编译成android/R.java和com/android/internal/R.java,后者虽来源不明但确认源自同一目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Framework-res在原密码的位置:framework/base/core/res

目录下的Manifest中显示的package name是android,Android.mk中显示的LOCAL_MODULE是framework-res

一般R文件的放置位置是以packagename各级创建文件夹,。而在out/target/common/obj/R文件夹下存在存在android/R.java,也存在com/android/internal/R.java。而com/android/internal/R.java不知道是怎么来的,其中的内容在framework/base/core/res下都有。所以可以推断,com/android/internal/R.java的资源是在framework/base/core/res下。

<think>我们正在处理一个关于Android Framework开发的问题。用户希望修改R.array.low_memory_killer_tracker_whitelist,这个数组位于frameworkres目录中。 在Android Framework中,资源文件通常位于frameworks/base/core/res/res/values/目录下(具体路径可能因版本略有不同)。low_memory_killer_tracker_whitelist很可能定义在一个xml文件中,比如arrays.xml。 步骤: 1. 定位资源文件:找到定义low_memory_killer_tracker_whitelist的arrays.xml文件(也可能是其他xml文件,但数组通常定义在arrays.xml中)。 2. 修改数组:在对应的xml文件中添加或修改该数组。 3. 编译并刷机:由于修改了系统资源,需要重新编译整个Android系统(或至少编译framework-res模块),并将生成的system.img刷入设备。 注意:由于这是系统级别的修改,需要拥有系统源码的编译环境,并且设备必须是可刷机的(如AOSP支持的设备或自定义ROM)。 具体操作: 1. 在源码目录中找到arrays.xml,路径可能是:frameworks/base/core/res/res/values/arrays.xml 2. 打开该文件,查找low_memory_killer_tracker_whitelist。如果存在,则修改;如果不存在,则添加。 例如: ```xml <string-array name="low_memory_killer_tracker_whitelist"> <item>com.android.systemui</item> <item>com.android.launcher3</item> <!-- 添加你需要的应用包名 --> </string-array> ``` 3. 编译framework-res模块: ```bash mmm frameworks/base/core/res ``` 或者编译整个系统: ```bash make -j8 ``` 4. 刷入编译生成的system.img(具体刷机方式取决于设备,一般使用fastboot刷写system分区)。 但是,请注意:在Android 10及更高版本中,由于分区机制的变化,可能需要刷写system分区(或者如果使用动态分区,则刷写super分区)。另外,有些设备可能需要同时刷入vendor_boot等分区,具体取决于设备。 重要:修改系统资源需要重新编译framework-res.apk,这个apk会被打包到system.img中。因此,修改后需要重新生成system.img并刷入。 另外,由于系统资源是只读的,在运行时无法修改,所以必须通过重新编译系统的方式。 风险:修改系统资源可能会导致系统不稳定,因此务必谨慎操作,并确保有备份和恢复手段。 相关问题: 1. 如何为Android系统添加一个新的资源? 2. 如何在不重新编译整个系统的情况下更新framework-res.apk? 3.Android中,如何查看当前系统资源(如数组)的值? 4. 修改系统资源后,如何验证修改是否生效? 注意:第三个问题“如何查看当前系统资源”可以通过在代码中获取资源并打印,或者使用adb shell命令来查看(例如,在设备上使用getprop或者dumpsys meminfo等命令,但具体到这个数组,可能需要通过代码读取)。但是,low_memory_killer_tracker_whitelist是系统内部使用的,可能不是公开的API,所以直接查看可能比较困难。通常,我们可以通过读取系统设置或者系统服务来获取,但这里可能需要具体看系统如何使用这个数组。 由于用户的问题非常具体,我们直接回答如何修改这个数组。</think>### 在 Android Framework 中添加/修改 R.array.low_memory_killer_tracker_whitelist 在 Android Framework 中修改资源文件需要直接操作 AOSP 源码并重新编译系统。以下是详细步骤: #### 1. **定位资源文件** - 打开 AOSP 源码目录:`frameworks/base/core/res/res/values/` - 找到定义数组的文件(通常是 `arrays.xml` 或 `config.xml`) - 搜索 `low_memory_killer_tracker_whitelist` 定义: ```xml <!-- 示例位置:frameworks/base/core/res/res/values/config.xml --> <string-array name="low_memory_killer_tracker_whitelist" translatable="false"> <item>com.android.systemui</item> <item>com.android.launcher</item> </string-array> ``` #### 2. **修改/添加数组** - **修改现有值**:直接编辑数组内容 ```xml <string-array name="low_memory_killer_tracker_whitelist" translatable="false"> <item>com.android.systemui</item> <item>com.example.newapp</item> <!-- 新增项 --> <item>com.another.app</item> <!-- 新增项 --> </string-array> ``` - **新增数组**(若不存在): ```xml <!-- 在相同文件中添加 --> <string-array name="low_memory_killer_tracker_whitelist" translatable="false"> <item>com.default.app1</item> <item>com.default.app2</item> </string-array> ``` #### 3. **编译和部署** ```bash # 在AOSP根目录执行 source build/envsetup.sh lunch <target_device>-<build_type> # 如 aosp_arm64-eng m -j$(nproc) framework-res.apk # 编译资源模块 # 部署到设备 adb root && adb remount adb push $OUT/system/framework/framework-res.apk /system/framework/ adb reboot ``` #### 4. **验证修改** ```java // 在Framework代码中调用验证 String[] whitelist = context.getResources().getStringArray( com.android.internal.R.array.low_memory_killer_tracker_whitelist); Log.d("TAG", "Whitelist: " + Arrays.toString(whitelist)); ``` ### 关键注意事项 1. **权限要求**: - 需要完整 AOSP 编译环境 - 设备必须解锁并支持 `adb remount` - 系统签名权限(修改系统资源) 2. **兼容性处理**: - 不同 Android 版本可能存放路径不同(如 Android 13 可能在 `res/values/arrays.xml`) - 修改后需同步更新资源 ID:`R.array.low_memory_killer_tracker_whitelist` 3. **替代方案建议**: ```java // 通过系统属性动态覆盖(需SEPolicy权限) SystemProperties.set("persist.sys.lmk.whitelist", "app1,app2,app3"); ``` > ⚠️ **警告**:直接修改 Framework 资源可能导致 OTA 更新失败或系统不稳定,建议优先考虑通过 `SystemProperties` 或配置覆盖机制实现动态修改[^1]。 --- ### 相关问题 1. 如何在不重新编译整个系统的情况下更新 `framework-res.apk`? 2. Android 系统资源 ID(如 `R.array.xxx`)的生成机制是怎样的? 3. 修改系统资源后出现签名验证失败(`INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES`)如何解决? 4. 如何为自定义设备厂商实现资源覆盖(Resource Overlay)机制? [^1]: 参考 AOSP 源码:`frameworks/base/core/res/res/values/config.xml` 和编译系统文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值