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

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

一,资源获取

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中的前缀信息,使用传入的前缀)。


目录
相关文章
|
存储 缓存 JSON
Unity资源热更新知识梳理及工作流介绍
研究了大半年的热更,才做出了一套相对完善的热更架构。不得不说,这块的知识点还是多而杂的,值得专门开篇博文来记录梳理。
2628 0
|
5月前
|
XML JavaScript Java
技术经验分享:Asea——轻量级的AS3模块配置与加载管理库
技术经验分享:Asea——轻量级的AS3模块配置与加载管理库
42 0
|
3月前
|
存储 缓存 JavaScript
提升Blazor应用性能的探索之旅:深入解析关键技巧与最佳实践
【8月更文挑战第31天】在开发现代Web应用时,性能与用户体验至关重要。Blazor作为一款使用.NET构建交互式Web UI的框架,提供了诸多便利。为了充分发挥其潜力并优化体验,掌握一些性能提升技巧十分必要。本文将分享几个实用的Blazor性能优化方法,包括减少不必要的服务器端调用、使用懒加载以及优化DOM操作。通过这些技巧,可以显著提升应用性能,为用户提供更流畅的体验。以下是具体方法及示例代码。
58 0
|
4月前
|
缓存 图形学 UED
U3D开发技术深度解析:异步场景加载与资源管理优化策略
【7月更文第11天】在Unity3D(简称U3D)游戏开发中,优化场景加载与资源管理是提升用户体验的关键一环。通过实现高效的异步场景加载和智能的资源管理策略,我们能显著缩短玩家的等待时间,提升游戏流畅度。本文将详细介绍这两种技术的应用,并提供实用的代码示例。
345 0
|
6月前
|
存储 缓存 数据库
构建高效Android应用:内存优化策略深度剖析
【4月更文挑战第29天】 在移动开发领域,性能一直是衡量应用质量的关键指标之一。特别是对于Android平台,由于设备硬件配置的多样性,内存管理成为开发者面临的一大挑战。本文将深入探讨Android应用内存优化的有效策略,旨在帮助开发者提升应用性能,减少内存消耗,避免常见的内存泄漏问题。通过对Android内存管理机制的分析与实际案例的结合,我们将提供一系列实用的优化技巧,助力应用在竞争激烈的市场中脱颖而出。
|
XML 存储 前端开发
“实战经验总结:构建灵活、可维护的自定义MVC应用程序”(上)
“实战经验总结:构建灵活、可维护的自定义MVC应用程序”
46 0
|
存储 设计模式 前端开发
“实战经验总结:构建灵活、可维护的自定义MVC应用程序”(下)
“实战经验总结:构建灵活、可维护的自定义MVC应用程序”
37 0
|
传感器 存储 SQL
应用编排与管理:核心原理|学习笔记
快速学习应用编排与管理:核心原理
118 0
应用编排与管理:核心原理|学习笔记
|
安全 Android开发
【Android 插件化】插件化技术弊端 ( 恶意插件化程序的解决方向 | 常用的插件化虚拟引擎 )
【Android 插件化】插件化技术弊端 ( 恶意插件化程序的解决方向 | 常用的插件化虚拟引擎 )
227 0
|
Dubbo Java 应用服务中间件
亲测 | 如何更高效的管理原生微服务应用
阿里云分布式应用服务EDAS 最近发布了支持原生Dubbo和Spring Cloud应用功能的新版本,此功能是以非侵入方式支持的,且几乎不需要修改任何代码。在此我们体验了一下如何在EDAS上部署原生Dubbo和Spring Cloud应用。
2931 0
下一篇
无影云桌面