添加资源到android源码中-修改framework层

本文介绍如何在Android框架层增加png图片、string、layout、style和color等资源,并更新资源ID,以便编译带有这些资源的jar包。

编译带有资源的jar包,需要更改frameworks层,方法如下:

 一.增加png类型的图片资源

    1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/res/res/drawable-mdpi里。但是要确保没有与原生的没有重名文件。

2.在framework/base/core/res/res/values/public.xml文件里增加对这些图片的声明。(例: <public type="drawable"name="upg_btn_default_small_normal" id="0x010800b4" />,此id要保证唯一,以drawable类型的最后一个id为基数增加)

3.framework/base/core/res/res/ 下mm编译

4. \Honeycomb下 make update-api

 二.增加string资源

    1.将appupdate模块定义的string.xml里面的所以string拷贝到framework/base/core/res/res/values/string.xml里。但是确保没有重名的。

2.在framework/base/core/res/res/values/public.xml文件里增加对这些string的声明。(例:<publictype="string" name="upg_app_name" id="0x01040017"/>此id要保证唯一,以string类型的最后一个id为基数增加)

3.framework/base/core/res/res/ 下mm编译

4. \Honeycomb下 make update-api

 三.增加layout资源

    1.将appupdate模块的layout文件里定义的5个xml文件拷贝到在framework/base/core/res/res/layout里。但是要确保没有重名文件被覆盖。

2.在framework/base/core/res/res/values/public.xml文件里增加对这些layout的声明。(例:<publictype="layout" name="appupg_checkspace"id="0x01090018" />此id要保证唯一,以layout类型的最后一个id为基数增加)

3.framework/base/core/res/res/ 下mm编译

4. \Honeycomb下 make update-api

说明:若layout中包含xml,直接把xml拷贝到framework相应目录下。例如(1)button的selector。将appupdate模块的drawable/common_btn_selector.xml文件拷贝到framework/base/core/res/res/drawable里,确保没有重名文件。

(2)将appupdate模块的anim/loading.xml文件拷贝到framework/base/core/res/res/anim里,确保没有重名文件。

 四.增加style资源

    1.将appupdate模块的style文件里定义的所有style拷贝到framework/base/core/res/res/values/style.xml里。确保没有覆盖原生的style.

    2.在framework/base/core/res/res/values/public.xml文件里增加对这些style的声明。

3.framework/base/core/res/res/ 下mm编译

4. \Honeycomb下 make update-api

五.增加color资源

 1.将appupdate模块的style文件里定义的所有style拷贝到framework/base/core/res/res/values/color.xml里。确保没有覆盖原生的color.

    2.在framework/base/core/res/res/values/public.xml文件里增加对这些color的声明。

3.framework/base/core/res/res/ 下mm编译

4. \Honeycomb下 make update-api

六.增加资源id

 1.在framework/base/core/res/res/values/ids.xml里定义你jar中所用的id(R.id)*)。确保没有覆盖原生的.

    2.在framework/base/core/res/res/values/public.xml文件里增加对这些id的声明。

3.framework/base/core/res/res/ 下mm编译

4. \Honeycomb下 make update-api

最后,eclipse源码中要修改以下:

1.  把R.*.*全部替换成android.R.*.*例如R.layout.appupg_tip_dialog 要更换为android.R.layout.appupg_tip_dialog

2.      资源文件中对资源的调用需要添加android:如<TextView android:text="@ string/upg_tip"要改成<TextViewandroid:text="@android:string/upg_tip"

3.      Import *.*.*.R删除。

linux下jar包路径

Honeycomb\out\target\common\obj\JAVA_LIBRARIES\hisenseAppUpgrade_sdk_intermediates

另,要想在eclipse环境下编译修改后的应用自升级jar。

1,  从编译的源码中拷贝framework.jar及framework-res.apk两个文件,解压缩后。从framework.jar中拷贝出android文件夹,从framework-res.apk拷贝出res文件夹,然后添加到android.jar包中。替换自升级工程的android.jar。然后把res文件夹下出现X的文件删除即可。

应用自升级修改方法

资源修改要通过frameworks层,修改后要在源码中编译。

在使用 Android Studio 开发过程中,如果遇到 `framework-res` 资源找不到的问题,通常与模块依赖配置、资源路径设置或 framework 源码未正确导入有关。以下是解决此类问题的几种方法: ### 1. 确保 framework-res.apk 已正确导入并配置为依赖项 如果项目依赖了自定义的 `framework.jar` 和 `framework-res.apk`,需要确认是否已将 `framework-res.apk` 作为依赖资源引入到模块中。可以尝试以下步骤: - 将 `framework-res.apk` 放入 `app/libs/` 目录下。 - 在 `build.gradle` 文件中添加如下依赖配置,确保其仅在编译时使用而不打包进最终 APK: ```gradle dependencies { compileOnly files('libs/framework-res.apk') } ``` ### 2. 正确导入 Framework 源码并配置资源路径 如果项目需要引用 AOSP 的 `framework` 源码,需确保已正确导入完整的 Framework 文件夹,并配置相关资源路径。操作如下: - 打开 Android Studio,依次点击 `File => Project Structure`。 - 在左侧选择 `Modules`,然后点击右侧的 `Add Content Root`。 - 选择 AOSP 的 `Framework` 文件夹作为内容根目录,导入后确保资源路径被正确识别[^1]。 ### 3. 修改模块配置文件权限以确保资源可访问 有时模块配置文件(如 `.iml` 和 `.ipr`)的权限限制可能导致资源无法识别。可以尝试修改这些文件的访问权限: - 使用终端执行以下命令修改文件权限: ```bash sudo chmod 777 android.iml sudo chmod 777 android.ipr ``` 该操作可确保 Android Studio 能够正常读取和写入模块配置信息,从而避免资源加载失败的问题[^3]。 ### 4. 检查模块间的资源冲突或引用问题 如果当前模块依赖了其他模块,并且资源名称存在冲突或未正确引用,也可能导致 `Res` 资源找不到的问题。例如: - 模块 A 中定义了 `<string name="name">name</string>`。 - 模块 B 中定义了 `<string name="icon">icon</string>`。 此时需确保模块间的资源引用方式正确,避免因资源名称重复或依赖顺序错误导致编译异常。可以通过以下方式排查: - 在 XML 中引用资源时使用完整的包名格式,例如:`@包名:资源类型/资源名称`。 - 确保模块依赖顺序正确,在 `build.gradle` 中按需设置 `implementation` 或 `api` 依赖[^4]。 ### 5. 使用反射作为替代方案(适用于隐藏资源) 对于某些隐藏的 framework 资源或方法,若无法直接引入依赖,可以考虑使用反射机制进行访问: ```java try { Class<?> clazz = Class.forName("android.R$attr"); Field field = clazz.getField("someHiddenAttr"); int resId = field.getInt(null); // 使用 resId 访问资源 } catch (Exception e) { e.printStackTrace(); } ``` 该方法适用于无法直接引用的隐藏资源,但需注意反射调用的性能和稳定性影响[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值