首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android的打包过程与资源分配

而从官网中,我们也能知道完整的资源名包含三个部分,而ID对应的也是这三部分: Package:App或者插件Apk的包名 Type:Dimen、Style、Attr、String、Anim等等 Name...AAPT打包机制 在AAPT打包的过程中会将res中除了raw和assets之外的资源(如layout、string、drawable等等)打成二进制文件,并且生成R.java以及resources.arsc...,类型错误的话,则无法找到资源,会返回id为0。...按不同插件的包名进行区分,因为AAPT默认会从0x7f开始进行分配 解决方案有多种: 修改aapt,为插件分配不同的pakcageId,然后将引用R.id的地方修改为常量 修改aapt过后的R.java...在插件的Activity中使用资源的时候需要小心: 保证getResource中的Resource是已经添加过插件资源路径的 保证资源调用时,Package与Id能够匹配上

1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 大型工程 App Bundle 模块化实践

    资源编译错误 Android 的资源编译会经历资源收集、分配资源id、编译链接几个重要流程: ? 资源编译流程 资源编译错误主要集中编译链接 (Link) 过程: ?...交叉引用报 NPE 编译时不可访问的资源在运行时是可访问的,id 不一致导致错误。 资源 id 错乱容易理解,举例说明交叉引用报 NPE。...修改 aapt2 统一 R.id 仅针对 id、attr 这类不需要覆写关系的资源类型,在 aapt2 生成索引表和 R.java 时进行全局统一。id 类型值是随机的、无实体资源含义。...attr 按设计规范和避免样式属性定义冲突,统一也是极有利的。...} ... aapt2 修改兼容性 开源库 aosp-android-9.0.0-r59-aapt2[7] 官方已经提供了一个较佳的 hack 点: FeatureSplitSymbolTableDelegate

    5K31

    从构建工具看 Android APK 编译打包流程

    比如 1)、在以前的AAPT版本,Android 清单文件中出现错误的节点元素只会被忽略或警告,而AAPT2开始会对这些节点进行报错,比如: 属性指明资源类型了,需要单独使用type属性: attr/my_attr">@color/pink // 修改为 attr" name="my_attr">@color/pink 3)、ForegroundLinearLayout(前景色相关)属性限制严格 foregroundInsidePadding...属性,不属于android命名空间,所以AAPT2的改进就是对于这个属性使用更加严格了,原来使用android:foregroundInsidePadding的时候会被忽略,现在会报错,需要改为foregroundInsidePadding...4)、@ 资源引用符号使用严格 对于遗漏或者错误引用@(资源引用符号)时候,AAPT2会报错。

    4.1K30

    .NET 8 中 Android 资源生成的改进和变化

    SetContentView (2131492864); 作为 aapt2 构建过程的一部分,将生成文件 R.txt,其中包含从资源的“string”名称到 Id 的映射。...所以上面的调用实际上看起来像这样: SetContentView (Resource.Layout.Main); Resource.Id.Main 将映射到 aapt2 生成的 Id。...重新启用旧系统需要手动将此属性更改为 false。 新系统依赖于解析 aapt2 在构建过程中生成的 R.txt 文件。在运行 C# 编译器之前,将解析 R.txt 文件并生成新的程序集。...这是为了保持与旧的Resource.designer.cs文件在应用程序项目中的工作方式的向后兼容性 。 测试表明我们可以将启动时间缩短约 8%。整体封装尺寸大约减少 2%-4%。...新系统与 Classic Pre .NET Xamarin.Android 以及 .NET 6/7 Android 软件包不兼容。

    25110

    aapt与aapt2--资源id固定和PUBLIC标记

    资源 Android 天生为兼容各种各样不同的设备做了相当多的工作,比如屏幕大小、国际化、键盘、像素密度等等,我们能为各种各样特定的场景下使用特定的资源做兼容而不用改动一行代码,假设我们为各种各样不同的场景适配了不同的资源...如需将所有资源隐式设为私有,您必须至少将一个特定属性定义为公开。资源包括您项目的 res/ 目录中的所有文件,例如图像。...通过将属性隐式设为私有,您不仅可以防止库的用户从内部库资源获得代码补全建议,还可以重命名或移除私有资源,而不会破坏库的客户端。...aapt2进行id的固定 在aapt2编译(将资源文件编译为二进制格式)后,发现merge的资源都已经经过了预编译,产生了flat文件,这时候将public.xml文件拷贝至该目录就会产生编译错误。...它适合与 --stable-ids 搭配使用。

    1.4K50

    aapt与aapt2--资源id固定和PUBLIC标记

    资源 Android 天生为兼容各种各样不同的设备做了相当多的工作,比如屏幕大小、国际化、键盘、像素密度等等,我们能为各种各样特定的场景下使用特定的资源做兼容而不用改动一行代码,假设我们为各种各样不同的场景适配了不同的资源...如需将所有资源隐式设为私有,您必须至少将一个特定属性定义为公开。资源包括您项目的 res/ 目录中的所有文件,例如图像。...通过将属性隐式设为私有,您不仅可以防止库的用户从内部库资源获得代码补全建议,还可以重命名或移除私有资源,而不会破坏库的客户端。...aapt2进行id的固定 在aapt2编译(将资源文件编译为二进制格式)后,发现merge的资源都已经经过了预编译,产生了flat文件,这时候将public.xml文件拷贝至该目录就会产生编译错误。...它适合与 --stable-ids 搭配使用。

    2.4K20

    01-老马jQuery教程-jQuery入口函数及选择器

    如果不考虑兼容低版本的浏览器可以使用2.x,一般不要用,直接要么用3.x版本,兼容低版本浏览器就用1.x就行了。.../code/lib/jquery.js"> 忘记引包或者引包在入口函数的后面 ?...用法 说明 $("p[attr]") 选取所有该p标签且具有attr属性的节点 $("p[attr=a_value]") 选取所有p标签且具有attr属性并满足属性值为a_value的节点 $("p[...attr^=a_value_head]") 选取所有p标签且attr属性的属性值是以a_value_head开头的 $("p[attr$=a_value_end]") 选取所有p标签且attr属性的属性值是以...a_value_end结尾的 $("p[attr*=a_value") 选取所有p标签且attr属性的属性值中包含a_value 3.8 筛选方法 语法 用法 说明 parent() $("#first

    2.6K100

    Freeline--Android平台上的秒级编译方案

    的type类型是“id”,若生成ids.xml及public.xml时候,不排除这些枚举id,最终的结果就是aapt给每个资源分配id时候,发生数组越界,aapt程序coredump掉,无法构建出资源包...” 2.兼容mPaas架构Base Package id 问题 3.根据ids.xml及public.xml生成保持id值与前一次构建结果里面的id值相同,若该任务有前置的资源任务(上面例子为common...资源层面,我们为了尽可能降低增量包的体积及构建成本,在aapt的基础上,拓展了一个叫IncrementAapt的工具,并把其编译成linux,mac,windows三个不同平台以做平台兼容,该工具会根据修改的资源文件...这个这么看来,通过R.java反向生成id文件的办法是行不通的,但还好,aapt程序也在我们手里,只要让aapt针对这种情况进行兼容,那上面的方案就是行得通,最后,我们拓展aapt寻找资源的策略,发现找不到资源时候...generate all bag attr:为“bag”类型分配资源id。

    1.2K80

    学习笔记:插件化资源解决

    ) 二,资源冲突: 插件和宿主使用aapt打包资源,aapt生成R和arsc文件是根据前缀信息(在aapt逻辑中apk默认为0X71)和资源顺序来进行命名的 因此会出现同一个资源ID在插件和宿主中都有对应的资源文件系统会出错...【默认0X71(系统会根据不同的包用不同的前缀信息),使用自定义生成的R和arsc使用我自定义的前缀】 第二种 我在aapt打包后进行修改替换R和arsc文件。...三,方案可行性: 第一种 简单直接,只需修改aapt中使用资源前缀的逻辑增加新case就好 缺点是需要进行修改aapt文件且不同SDK版本都需要生成一个aapt文件与之对应。...对arsc文件进行修改 方案二 不修改aapt,在打包后进行资源id冲突处理。...(默认的aapt在决定使用前缀时会进行case判断系统,library,apk然后使用不同的前缀。

    35220

    01-老马jQuery教程-jQuery入口函数及选择器

    /code/lib/jquery.js"> 忘记引包或者引包在入口函数的后面 2.3 jQuery对于页面加载完成入口函数的封装 jQuery内部帮我们做好了页面加载完成的封装...用法 说明 $("p[attr]") 选取所有该p标签且具有attr属性的节点 $("p[attr=a_value]") 选取所有p标签且具有attr属性并满足属性值为a_value的节点 $("p[...attr^=a_value_head]") 选取所有p标签且attr属性的属性值是以a_value_head开头的 $("p[attr$=a_value_end]") 选取所有p标签且attr属性的属性值是以...a_value_end结尾的 $("p[attr*=a_value") 选取所有p标签且attr属性的属性值中包含a_value 3.8 筛选方法 语法 用法 说明 parent() $("#first...$('.pl20'); 搜索具有colspan属性的th标签 $('th[colspan]'); 搜索id=md的标签 $('#md'); 搜索.finance-form下面的所有的td标签 $(

    2.4K00
    领券