Android 资源覆盖机制
来源:互联网 发布:oracle创建本地数据库 编辑:程序博客网 时间:2024/05/21 18:34
- Configurations (string, bool, bool-array)
- Localization (string, string-array)
- UI Appearance (color, drawable, layout, style, theme,animation)
- Raw resources (audio, video, xml)
For detailed introduction on Android applicationresources, please refer to:
1 Add Overlay Directoriesfor Product
1.1 Product Overlays vsDevice Overlays
There are two types of overaly directories thataffect a product:
- PRODUCT_PACKAGE_OVERLAYS: used by a particularproduct
- DEVICE_PACKAGE_OVERLAYS: used several products that share acommon device model
The PRODUCT_PACKAGE_OVERLAYS will override theDEVICE_PACKAGE_OVERLAYS if they contain same resources, thebehavior is defined by:
build/core/package.mk (Line: 93)
LOCAL_RESOURCE_DIR := \ $(wildcard $(foreach dir, $(PRODUCT_PACKAGE_OVERLAYS), \ $(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))) \ $(wildcard $(foreach dir, $(DEVICE_PACKAGE_OVERLAYS), \ $(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))) \ $(LOCAL_RESOURCE_DIR)
1.2 Change the makefile to add overlays
To add an overlay directory to a product, changethe product configuration makefile (for example:
PRODUCT_PACKAGE_OVERLAYS :=
Or:
DEVICE_PACKAGE_OVERLAYS :=
If multiple overlay directories are required to beadded, separate them with blank charactors. The directories definedfirst in the line will override the following directories if theycontain the same set of resources.
1.3 Create resources underthe overlay directory
To overlay the resources in a base package, thesubdirectory containing the overlay resources under the overlaydirectory, must has the same path as the base package resourcedirectory relative to the Android project root.
For example, if we want to overlay the resourcesunder the base package directory:
packages/apps/Settings/res/
we need to create the directory:
/packages/apps/Settings/res/
and in the directory, put the overlay resources inthe files with the same path and file names as where they aredefined in the base package.
Note that:
- For color, bool, string, array, style/theme types, theresource values are identifed by their keys, so for these types,there is no need to put the resources in a file with the same nameas in the original base package.
- For layout, animation, picture drawables and raw types, theresources are indentifed by their file name, and overlay for theseresources should keep the file name same as in the basepackages.
2 Check the resource inAPK
After changed the overlay resources and built thetarget packages, sometimes we need to check if the overlaydirectory took effects and the values are changed in the finallygenerated apks.
2.2 Using AAPT
Usage: aapt l[ist] [-v] [-a] file.{zip,jar,apk} List contents of Zip-compatible archive. aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]] badging Print the label and icon for the app declared in APK. permissions Print the permissions from the APK. resources Print the resource table from the APK. configurations Print the configurations in the APK. xmltree Print the compiled xmls in the given assets. xmlstrings Print the strings of the given compiled xml assets.
Forexample:
1. To dumpstring, bool values:
aapt dump resources Settings.apk
2. To dumpa raw xml file:
aapt dump xmltree Settings.apk res/xml/appwidget_info.xml
3. To dump the current configurations/localizations:
aapt dump configurations Settings.apk
2.2 Usingapktools
Reference:
Apktool v1.5.0.5a056e3 - a tool for reengineering Android apk filesCopyright 2010 Ryszard Wi??niewski with smali v1.3.4-ibot8, and baksmali v1.3.4-ibot8Updated by iBotPeaches Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) Usage: apktool [-q|--quiet OR -v|--verbose] COMMAND [...] COMMANDs are: d[ecode] [OPTS] [ Decode to OPTS: -s, --no-src Do not decode sources. -r, --no-res Do not decode resources. -d, --debug Decode in debug mode. Check project page for more info. -f, --force Force delete destination directory. -t , --frame-tag Try to use framework files tagged by . --keep-broken-res Use if there was an error and some resources were dropped, e.g.: "Invalid config flags detected. Dropping resources", but you want to decode them anyway, even with errors. You will have to fix them manually before building. b[uild] [OPTS] [] [] Build an apk from already decoded application located in . It will automatically detect, whether files was changed and perform needed steps only. If you omit then current directory will be used. If you omit then /dist/ will be used. OPTS: -f, --force-all Skip changes detection and build all files. -d, --debug Build in debug mode. Check project page for more info. if|install-framework [] Install framework file to your system. For additional info, see: https://github.com/iBotPeaches/brut.apktoolFor smali/baksmali info, see: http://code.google.com/p/smali/
2.3 Usingdumpres
3 More on AAPT andOverlay
3.1 How overlayworks
Whilebuilding the package APKs, the overlay directories are passed toaapt command lines using -S
PRODUCT_PACKAGE_OVERLAYS
DEVICE_PACKAGE_OVERLAYS
.
Forexample, while building the Settings
out/host/linux-x86/bin/aapt package -u -z \ -M packages/apps/Settings/AndroidManifest.xml \ -S device/vendor-name/device-name/product-name/overlay/packages/apps/Settings/res \ -S vendor/vendor-name/media/common/overlay/packages/apps/Settings/res -S packages/apps/Settings/res \ -I out/target/common/obj/APPS/framework-res_intermediates/package-export.apk \ --min-sdk-version 16 --target-sdk-version 16 --product default \ --version-code 16 --version-name 4.1.2-eng.xxxx.20121121.152327 \ -F out/target/product/product-name/obj/APPS/Settings_intermediates/package.apk
Note: some overlay directories that don't contain theSettings resources will be filtered first, and do not appear in theabove command line.
3.2 Add extra resources inOverlay
Though not recommanded, we can add new resources in overlaydirectory, for example, if base package Settings
no_such_key
, wecan add it in the overlay file bool.xml
true
Ifthe add-resource
aapt
device/vendor-name/device-name/product-name/overlay/packages/apps/Settings/res/values/bools.xml:30:error: Resource at no_such_key appears in overlay but\
not in the base package; use toadd.
Another way to avoid the complaint is torun aapt
--auto-add-overlay Automatically add resources that are only in overlays.
- Android 资源覆盖机制
- Android资源加载机制
- android资源访问机制
- Android资源访问机制
- 自定义Android资源覆盖rro方案
- 自定义Android资源覆盖rro方案
- Android 资源替换机制学习
- Android之资源访问机制
- Android资源图片读取机制
- Android资源图片读取机制
- Android 资源加载机制详解
- Android资源图片读取机制
- Android ListView控件的资源回收机制
- Android源码分析-资源加载机制
- Android源码分析-资源加载机制
- Android源码分析-资源加载机制
- Android源码分析-资源加载机制
- Android ListView控件的资源回收机制
- Linux--mail 命令
- 【Bootstrap3.0建站笔记二】按钮可下拉弹出层
- Server.MapPath()
- <mvc:annotation-driven />
- 设置UIButton文字对齐方式
- Android 资源覆盖机制
- 黄奕计划下周初起诉离婚
- 第十六题(树的层序遍历)
- RadGridView多列排序(Multiple Column Sorting)
- 点特征检测
- Qt模态对话框与事件循环
- .net的控件调用后台与前台方法不同的地方
- IOS绘图详解
- [leetcode] First Missing Positive