一、android的pulibc.xml文件

如果你用 apktoool 反编译过 apk 就知道,反编译后res/values 下有一个 public.xml 文件,内容如图

 

这个东西有什么用呢?

先从如何使用资源 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空的,你去引用会找不到资源,如图:
 

二、在gradle plugin高于1.3.0 的版本上启用 public.xml 特性

但 android gradle plugin 从1.3.0开始就直接忽略了public.xml ,如何启动看下面:

Enable 'public.xml' feature on gradle plugin version is higher than 1.3.0, 2.0.0 or later is available for testing.

在gradle plugin 高于1.3.0的版本上启用public.xml特性,2.0.0以上版本已测试可用

AndroidPublicXmlCompat

  1. Copy the public-xml.gradle App module to the next directory.

    复制public-xml.gradle到App模块目录下

  2. Add this line into your App module's build.gradle:

    在App模块的build.gradle 中增加:

    apply from: 'public-xml.gradle'

android public.xml 用法的更多相关文章

  1. android studio 汉化 svn插件汉化。布局文件 属性 汉化 public.xml

    android studio 汉化 SvnBundle.properties D:\Android Studio\plugins\svn4idea\lib resources_en.jar\org\j ...

  2. Android之Adapter用法总结-(转)

    Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...

  3. Android之Adapter用法总结(转)

    Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...

  4. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  5. Android之Adapter用法总结

    http://blog.csdn.net/fznpcy/article/details/8658155 Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器 ...

  6. xamarin android viewpager的用法

    1.什么是ViewPager 通过手势滑动可以完成view的切换,一般是用来app的引导页或则实现图片轮播,类似网页上的banner轮播. Adnroid 3.0后引入的一个UI控件,在xamarin ...

  7. Android开发PreferenceActivity 用法的代码

    将开发过程中常用的一些内容做个收藏,下面资料是关于Android开发PreferenceActivity 用法的内容,希望对大伙有一些用处.public class Setting extends P ...

  8. Android ContentProvider基本用法

    转自:https://www.jianshu.com/p/601086916c8f 一.基本概念 ContentProvider是Android系统中提供的专门用户不同应用间进行数据共享的组件,提供了 ...

  9. Android通过XML来定义Menu

    直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足.比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的ID等.为此,Android提供了一种更好的方式,就是把men ...

随机推荐

  1. delphi实现映射和断开网络驱动器

    type TNetDiskMapper=class private FNetResource: TNetResource; FUserName,FPassWord:PWideChar; public ...

  2. struts2的异常配置

    1:当我们出现异常我们浏览器会直接暴露我们的技术结构,会给我们的项目带来一些安全隐患.2:当这种错误出现,给用户感觉是非常不友好.3:怎么解决 1:如果处理找不到action方法的错误呢? 在Stru ...

  3. PR数量回写重复

  4. JSP页面与JSP页面之间传输参数出现中文乱码的解决方案

    在学习编程初期JSP与JSP页面之间传输参数大多数都是使用这样的方式 index.jsp?id=*&name=* 这样的传输方式实质上是一种GET传输方式, 那如果出现了中文乱码, 解决方法其 ...

  5. 前端知识--------HTML内容

    HTML介绍 1.web服务本质 import socket sk = socket.socket() sk.bind(('127.o.o.1',8080)) sk.listen() while 1: ...

  6. 50. Pow(x, n) (INT; Divide-and-Conquer)

    Implement pow(x, n). 思路:二分法,将每次相乘,转化成平方. class Solution { public: double myPow(double x, int n) { ) ...

  7. windows下 Memcache cpu占用过高

    分析应该是memcache的内存大小还是默认配置,已经满足不了当前的大数据量的需要了,大量的新缓存需要进入,同时大量的旧缓存又需要被淘汰出来,一进一出导致CPU占用过多. 进入注册表,找到:HKEY_ ...

  8. Android可以子线程更新UI?

    初了解Android的时候,就知道Android是不能在子线程更新UI的,不然程序会直接抛出异常,告诉你,别给我在自线程搞事情! 但是,这个是针对普通的view做的限制,而TextureView,Su ...

  9. windows常用运行命令总结

    开始→运行→命令集锦 winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程序 ...

  10. js验证开头不为零的正整数

    WST.zhengZhengShuIn = function (className){ var rex = /^[1-9]{1}[0-9]*$/;//正整数 $("."+class ...