Android 添加framework资源包
为Android系统添加一个新的资源包
概述
传统的Android系统只有一个framework-res.apk资源包,第三方厂商在进行rom定制时会直接修改framework res资源,达到适配目的。但是这种方式跟原生资源的耦合度过高,在系统迁移或者framework ui移植时需要进行人工merge,工作量巨大。通过为Android添加一个新的独立的资源包,可以将厂商定制资源独立出来,可移植、可维护性非常好。
实现
具体做法可以分为以下几个步骤:
1)修改build/core/clear_var.mk
,添加一项:
1 |
LOCAL_USE_XOS_FRAMEWORK_RES:= true |
2)修改build/core/package.mk
以下脚本可以加在$(R_file_stamp): $(framework_res_package_export_deps)
之前,然后修改$(R_file_stamp): $(framework_res_package_export_deps)
和$(LOCAL_INTERMEDIATE_TARGETS):
PRIVATE_AAPT_INCLUDES := $(framework_res_package_export)
1 |
ifeq ($(LOCAL_USE_XOS_FRAMEWORK_RES),true) |
1 |
$(R_file_stamp): $(framework_res_package_export_deps) $(xos_framework_res_package_export_deps) |
3)修改build/target/product/core.mk
在PRODUCT_PACKAGES
增加xos-framework-res
4)添加一个新的资源包项目,这里在framework/base/core/res同级目录下建立一个新的文件夹xos_res用来存放我们的资源。把res目录下的AndroidManifest.xml和Android.mk拷贝过来,进行修改。
记得设置 LOCAL_USE_MY_FRAMEWORK_RES
为false。
Android.mk
1 |
LOCAL_PATH:= $(call my-dir) |
AndroidManifest.xml
1 |
<?xml version="1.0" encoding="utf-8"?> |
资源的放置跟res下的类似,记得values目录下创建public.xml,public.xml对id的类型区分比较严格,attr必须是0x0x010000开头,drawable必须是0x0x020000开头,其他类型好像就没有限制,直接依次0x0x030000、0x0x040000开始即可。否则,编译过程中会出现segmentation fault错误。
1 |
<resources> |
5)以上只是解决了资源的编译环境问题,资源的查找过程也需要进行修改,修改 AssetManager.java
,在init()
后添加代码addAssetPath("/system/framework/xos-framework-res.apk");
1 |
public () { |
6)最后就是资源应用问题。应用程序在xml文件中引用xos-framework-res.apk
中的资源时可以使用与原生资源类似的访问方式,首先声明xos xmlns :
xmlns:xos="http://schemas.android.com/apk/res/systems.xos.car.xsdk"
然后像@android:drawable @android:dimen这种引用方式改成@xos:drawable @xos:dimen即可。
1 |
<?xml version="1.0" encoding="utf-8"?> |
XSDK 使用xos-res资源方式
Android.mk中引用资源路径:
1 |
framework_res_source_path := APPS/xos-framework-res_intermediates/src |
实际代码中使用:
1 |
import systems.xos.car.xsdk.R; . |
跟在普通的Android项目中使用资源一样调用。
Android 添加framework资源包的更多相关文章
- python中添加requests资源包
1.进入资源网址下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 2.按下CTRL+F进行页面查找“requests” 3.点击requests-2.22. ...
- Android 添加第三方jar包
1,拷贝jar包到项目的\app\libs文件夹下. 2,打开项目下的build.gradle(Module:app)文件,在“dependencies {}”中添加“compile files('l ...
- Android Studio引用自定义的framework.jar包
1.在app/libs/目录下添加framework.jar包. 2.打开build->Edit Libraries and Dependencies,把libs/framework.jar放到 ...
- iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用
iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用 前言 开发中经常使用三方库去实现某特定功能,而这些三方库通常又分为开源库和闭源库.开源库可以直接拿到源码,和自 ...
- 关于如何正确地在android项目中添加第三方jar包
在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception.error inflati ...
- 在Android Studio添加本地aar包引用
1.如何在Android Studio添加本地aar包引用 https://jingyan.baidu.com/article/2a13832890d08f074a134ff0.html 2.完成上述 ...
- Android源码分析(二)-----如何编译修改后的framework资源文件
一 : 编译framework资源文件 如果修改android framework资源文件,需要先编译资源文件,然后再编译framework才可以正常引用, 进入项目目录 cd work/source ...
- Android应用程序资源的查找过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8806798 我们知道,在Android系统中, ...
- 如何制作Jar包并在android中调用jar包
android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmani ...
随机推荐
- AtCoder Beginner Contest 126
因为本人rating太低,这场比赛还要记rating就来划水了,果然垫底了. 6题都很水,于是头一次在网赛中AK,不过由于网卡+手速太慢还是成功垫底. ABE 签到.不贴代码了,因为A考察字符串读入和 ...
- 领域建模-模型验证与面向资源的API设计
使用 UMLet 建模 1. 使用类图,分别对 Asg_RH 文档中 Make Reservation 用例以及 Payment 用例开展领域建模.然后,根据上述模型,给出建议的数据表以及主要字段,特 ...
- MVP简要示例
MVP即Model-View-Presenter,是从经典的MVC演变而来的,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理.Model提供数据.View负责显 ...
- 吴裕雄--天生自然python Google深度学习框架:TensorFlow实现神经网络
http://playground.tensorflow.org/
- Super Mario HDU - 4417 (主席树询问区间比k小的个数)
Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory ...
- day13-面向对象
#解决同一类问题,使用面向对象的思想.类是制造对象的模具,类是抽象的,我们能知道它有哪些属性(name,age,saraly),但不知道具体的属性值. #看下面代码:类Penson制造了实例化对象re ...
- 金山wps的面试经历
故事从两个月前开始说起吧. 前段时间突然想跳槽,原因也没啥,就是想折腾下,看看外面的世界?有一部分原因是想离家近一些稳定下来,博主上份工作坐标厦门,风景好的简直随便拍照就是大片. 不废话了,机缘巧合, ...
- php获取mysql大小
查看指定数据库大小: SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH) FROM information_schema.TABLES where TABL ...
- SPACESNIFFER查看文件大小
- 吴裕雄--天生自然 HADOOP大数据分布式处理:修改CenterOS 7 IP设置