• android public.xml 用法


    一、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'

  • 相关阅读:
    怎样判断数组类型
    VS2017不能生成Database Unit Test项目
    Windows Server 远程桌面报错:No Remote Desktop License Servers Available
    TFS2018 获取所有Build变量及变量值
    C# 读写bat文件
    【PowerShell 学习系列】-- 删除Win10自带应用
    Win10
    【TFS】TFS2015链接TFS出现TF31002/TF400324问题解决方案
    【SQL Server 学习系列】-- 获取字符串中出现某字符的次数及字符某次出现的下标
    【.Net 学习系列】-- 利用Aspose转换Excel为PDF文件
  • 原文地址:https://www.cnblogs.com/linghu-java/p/9548039.html
Copyright © 2020-2023  润新知