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

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

一,资源获取

getResource传入R.资源名称,通过资源名称可以找到对应的资源ID(通过R.java文件保证),之后AssetManager通过资源ID找到对应的资源文件名称(通过arsc文件保证)

二,资源冲突:

插件和宿主使用aapt打包资源,aapt生成R和arsc文件是根据前缀信息(在aapt逻辑中apk默认为0X71)和资源顺序来进行命名的

因此会出现同一个资源ID在插件和宿主中都有对应的资源文件系统会出错。因此我们需要修改前缀即可保证,修改哪些前缀信息呢:

解决方案概述

根据上面的原理,可知道两种解决方案:

第一种

修改aapt脚本。我在aapt创建R,arsc文件时的源头上进行拦截,aapt使用我自定义的前缀这样出来的R文件和arsc文件里面的前缀就会和宿主不一样。【默认0X71(系统会根据不同的包用不同的前缀信息),使用自定义生成的R和arsc使用我自定义的前缀】

第二种

我在aapt打包后进行修改替换R和arsc文件。需要在aapt第一步整理生成对应的R.java(对应编译类型会生成不同的R文件varint)进行拦截,捕获原始的r.java文件修改之后编译为class存储起来。

之后再javac的过程中使用我们的这个class文件,取出arsc文件修改对应的前缀。

三,方案可行性:

第一种

简单直接,只需修改aapt中使用资源前缀的逻辑增加新case就好

缺点是需要进行修改aapt文件且不同SDK版本都需要生成一个aapt文件与之对应。

第二种

只需简单修改task名字即可,不需要根据不同sdk平台生成不同的aapt。复用性强。

缺点:需要修改的地方较多:1.生成R.java时还须修改完再次手动调用javac编译为class存储2.进行javac时在用之前生成的class。对arsc文件进行修改

方案二 不修改aapt,在打包后进行资源id冲突处理。将插件资源前缀改为0X71,72等 可自定义的数字防止资源冲突:同一个资源ID对应多个资源文件

四,优化资源复用问题:

很多情况下插件和宿主中的默认文件夹里面放的都是相同的资源比如android自动生成的那些图片等,占据着很多空间很少是自己独有的。

因此可以进行优化,提炼出一份名单位于这个名单里面的资源可以进行删除,时机是在生成我们修改后的R.java文件时我们可以根据这个名单删除对应资源

该方案是基于方案二提出的(方案一也可以进行该处理,只不过方案二更顺理成章).该方案已有开源框架实现~。

(默认的aapt在决定使用前缀时会进行case判断系统,library,apk然后使用不同的前缀。

方案一是对aapt进行修改,使用aapt时新增Bundle参数携带前缀信息,在使用前缀时增加新case,取出Bundle中的前缀信息,使用传入的前缀)。


目录
相关文章
|
3天前
|
存储 缓存 数据库
构建高效Android应用:内存优化策略深度剖析
【4月更文挑战第29天】 在移动开发领域,性能一直是衡量应用质量的关键指标之一。特别是对于Android平台,由于设备硬件配置的多样性,内存管理成为开发者面临的一大挑战。本文将深入探讨Android应用内存优化的有效策略,旨在帮助开发者提升应用性能,减少内存消耗,避免常见的内存泄漏问题。通过对Android内存管理机制的分析与实际案例的结合,我们将提供一系列实用的优化技巧,助力应用在竞争激烈的市场中脱颖而出。
|
2月前
|
移动开发 测试技术 Android开发
构建高效Android应用:Kotlin实践与性能优化策略
在移动开发的世界中,Android以其开放性和广泛的用户基础持续领跑。随着Kotlin成为官方推荐语言,开发更加流畅且高效的应用变得触手可及。本文将深入探讨利用Kotlin进行Android开发的最佳实践,并聚焦于如何通过代码优化、内存管理和多线程处理等手段提升应用性能。我们将透过一系列案例和分析,揭示那些看似微不足道的编程细节,实则对应用性能有着重大影响,并提出切实可行的优化建议。
16 3
|
2月前
|
缓存 前端开发 Android开发
构建高效Android应用:从设计原则到性能优化
随着移动设备成为我们日常生活不可或缺的一部分,开发一个流畅且响应迅速的Android应用变得至关重要。本文将探讨如何通过遵循Android设计原则和实施细致的性能优化策略来构建高效的Android应用程序。我们将深入分析应用架构的选择、内存管理的要点以及UI设计的优化,旨在为开发人员提供一套实用的指导方针,帮助他们提升应用的整体性能和用户体验。
|
2月前
|
监控 Java Android开发
构建高效Android应用:从内存管理到性能优化
【2月更文挑战第30天】 在移动开发领域,打造一个流畅且响应迅速的Android应用是每个开发者追求的目标。本文将深入探讨如何通过有效的内存管理和细致的性能调优来提升应用效率。我们将从分析内存泄露的根本原因出发,讨论垃圾回收机制,并探索多种内存优化策略。接着,文中将介绍多线程编程的最佳实践和UI渲染的关键技巧。最后,我们将通过一系列实用的性能测试工具和方法,帮助开发者监控、定位并解决性能瓶颈。这些技术的综合运用,将指导读者构建出更快速、更稳定、用户体验更佳的Android应用。
|
3月前
|
消息中间件 缓存 监控
项目接口性能优化方案
项目接口性能优化方案
37 1
|
编解码 JSON Android开发
Flutter | 资源管理
Flutter | 资源管理
|
编解码 JSON 数据格式
Flutter | 一起学资源管理
Flutter安装包中会包含代码和assets (资源)两部分,其中 assets 是会打包到程序安装包中,可以运行时访问,常见的 assets 类型包括静态数据(json文件),配置文件,图标和图片等。
105 0
|
传感器 存储 SQL
应用编排与管理:核心原理|学习笔记
快速学习应用编排与管理:核心原理
86 0
应用编排与管理:核心原理|学习笔记
|
存储 缓存 JSON
重度使用Flutter研发模式下的页面性能优化实践
淘宝特价版是集团内应用Flutter技术场景比较多,且用户量一亿人以上的应用了。目前我们首页、详情、店铺、我的,看看短视频,及评价,设置等二级页面都在用Flutter技术搭建。一旦Flutter有性能瓶颈,重度使用Flutter研发的我们该如何做到性能优化?
重度使用Flutter研发模式下的页面性能优化实践