andorid下的Public.xml 怎么使用小结

用 apktoool 反编译过 apk ,反编译后在res/values 下有一个 public.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <public type="attr" name="bg_category" id="0x7f010000" />
    <public type="attr" name="bg_details_zan" id="0x7f010001" />
    <public type="attr" name="bg_input_view" id="0x7f010002" />
    <public type="attr" name="bg_item_channel" id="0x7f010003" />
    <public type="attr" name="bg_title_bar" id="0x7f010004" />
    <public type="attr" name="btn_back" id="0x7f010005" />
    <public type="attr" name="btn_open_source" id="0x7f010006" />
    <public type="attr" name="channel_edit_divider_color" id="0x7f010007" />
    <public type="attr" name="channel_item_bg" id="0x7f010008" />
    <public type="attr" name="channel_item_text_color" id="0x7f010009" />
    <public type="attr" name="common_text_color" id="0x7f01000a" />
    <public type="attr" name="listItemBg" id="0x7f01000b" />
    <public type="attr" name="list_divider" id="0x7f01000c" />
    <public type="attr" name="main_left_more" id="0x7f01000d" />
    <public type="attr" name="main_refresh" id="0x7f01000e" />
    <public type="attr" name="main_title" id="0x7f01000f" />
    <public type="attr" name="news_list_divider" id="0x7f010010" />
    <public type="attr" name="news_list_extra" id="0x7f010011" />
    <public type="attr" name="news_list_title_text_color" id="0x7f010012" />
    <public type="attr" name="no_comment" id="0x7f010013" />
    <public type="attr" name="other_text_color" id="0x7f010014" />
    <public type="attr" name="settingItemBg" id="0x7f010015" />
    <public type="attr" name="title_bar_text_color" id="0x7f010016" />
    <public type="attr" name="tool_bar_back" id="0x7f010017" />
    <public type="attr" name="tool_bar_comment" id="0x7f010018" />
    <public type="attr" name="tool_bar_heart" id="0x7f010019" />

这个东西有什么用呢?

先从如何使用资源 ID 开始,在开发中我们通常使用 Resources.getXXX(resid) 来获取某个资源,传入的是 ID 这个 ID 定义在 R.XXX 类里面,R 类是编译器自动生成的,打开看知道

其实资源 ID 就是一个常量,对我们引用了某个ID,编译成 APK 之后,这个ID的值就固定了,

而 apktool 在重新打包 apk 的时候会对资源重新编译 (编译成 resources.arsc 你有zip打开 apk 看得到),编译资源的时候自然需要对所有资源ID进行重新编排(这是一个随机过程)试想假设原包里面 drawable/a.png id=0x7f020003 那么重新编排资源ID后就可能是 0x7f020004 又假设原包 0x7f020004 对应图片 b.png,那你重新打包后的
apk 当显示 a.png 的时候就会替换成 b.png,这还好不会出错,倘若生成的一个 id 原包不存在,那会导致程序崩溃的!

所以 public.xml 的作用就是把对象资源 ID 写死!

格式是

<public type="资源类型" name="资源名" id="0x7f080000" />

如果你细心观察就会发现,id 都是 0x7f 开头紧接着后面两位 08 是独立于每种资源类型的,再后面的编码就是从 1 开始咯

public.xml 特殊用途:

<public-padding name="my_" end="0x7f02000f" start="0x7f020001" type="drawable" />

public-padding 顾名思义,留间距,为什么要留间距,这就涉及到一个深奥的问题了,可以应用在 主题、apk动态更新 领域,这个我们以后讨论

加了这个的效果就是在 R 里多了 my_1 ~ my_15 的资源ID,这些个资源ID空的,你去引用会找不到资源,如图:

貌似还有几种用法,以前研究 apk 动态加载的时候忘了写日记记录,现在忘得差不多了,

时间: 2024-10-31 17:07:34

andorid下的Public.xml 怎么使用小结的相关文章

小沐Andorid下面的MD5详细实现思路小结

安卓开发中时常需要些一些demo 现在就MD5加密算法进行一些抽取 看看都是怎么实现的 首先我们要明白为什么要加密? 1 对数据进行安全性处理 2 防止数据被盗 3 有效的避免恶意攻击 4 保证文件完整性 5 优化搜索 作为文件(数据)索引存在等 以上是主要的加密技术的目的 2 目前在安卓中使用的加密技术都有哪些? 这个是网站上找到的一些资料 主要是2中算法 一个是SHA1算法 一个就是MD5加密  其他的还有TEA对称型加密算法 效率比较高 TEA(Tiny Encryption Algori

Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

在 <Cordova webapp实战开发:(4)Android环境搭建>中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个Andorid下的cordova插件. 本次练习你能学到的 学习如何实现自动更新功能 学习插件类的编写 学习插件的配置 学习插件的调用 主要内容 打开APP后检查版本更新,如果有更新则弹出更新对话框 APP中[检查更新]显示当前版本号,并可以点击进行版本检查更新 如何实现自动更新功能 你可以自己写代码,也可以网上找

android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

1.下载工具 xstream 下载最新版本地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/ 下载完成后 把jar包导入到自己的android项目中 2.asset 文件夹 下的 aa.xml 文件 <?xml version="1.0" encoding="UTF-8"?><product>    <name>

window7下 cocos2dx android交叉编译环境部署小结

上周被android交叉编译搞惨了,还好最后弄好了,写个小结以后备用吧. 步骤,1.下载cygwin的devel和shells模块 2. 2.设置环境变量 a.设置NDK_ROOT b.设置Path 编辑Path,在后面追加4个环境变量,以;号隔开(别忘了给前面的加上;),4个分别是android的sdk的platform-tools,android的sdk的tools,   cygwin的bin,上面添加的NDK_ROOT C:\Work\adt-bundle-windows-x86_64-2

hadoop/etc/hadoop 下没有mapred-site.xml,只有mapred.xml.template

默认情况下,/usr/local/hadoop/etc/hadoop/文件夹下有mapred.xml.template文件,我们要复制该文件,并命名为mapred.xml,该文件用于指定MapReduce使用的框架. 复制并重命名 cp mapred-site.xml.template mapred-site.xml 编辑器打开此新建文件 sudo gedit mapred-site.xml然后编辑mapred-site.xml

[jbdj]SpringMVC框架(2)加载自定义目录下的springmvc.xml配置文件

自己定义文件目录,文件名称无疑是件快乐的事情! 如果springmvc.xml配置文件放在src目录下,web.xml代码如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/200

nodejs 剪切图像在上传,并保存到指定路径下(./public/img/&#39; + req.session.token + &#39;.jpg‘)

前jQuery端接收数据 function upAvatar(img){ console.log(img); // data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMD…/7vA+eq/xZAlzs/wBYlP8AtlpRRXcc9h++B/8AVyJRs30UVRkM2e9M8s+tFFSBE6UUUUGp/9k= $.ajax({ url:'/user/upload', type:'PUT',

转:Java eclipse下 Ant build.xml实例详解

在有eclipse集成环境下ant其实不是很重要,但有些项目需要用到,另外通过eclipse来学习和理解ant是个很好的途径,所以写他demo总结下要点,希望能够帮到大家. 一.本人测试环境eclipse3.6已自动集成了ant环境, 所以就不用单独下载配置ant环境了. 如果没有eclipse集成环境可以自己下载ant http://www.apache.org/ 下载最新的版本解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:ANT_HOME:D:\

读取xml格式的字符串和上下文中的xml数据

1.读取xml格式的字符串 假设有一段下面的xml格式的字符串: <xml>     <return_code><![CDATA[SUCCESS]]></return_code>     <return_msg><![CDATA[OK]]></return_msg> </xml> 定义类ClientResponseHandler.cs public class ClientResponseHandler { p