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

Android插件化——资源加载

前言 资源,是APK包体积过大的病因之一。插件化技术将模块解耦,通过插件的形式加载。插件化技术中,每个插件都能够作为单独的APK独立运行。宿主启动插件的类,难免要涉及插件类中的资源问题。...那么,如何加载插件资源,就成为一个待解决的问题。...原理 参考APK打包流程:Android插件化基础-APK打包流程 Android工程在打包成apk时,会使用aapt将工程中的资源名与id在R.java中一一映射起来。...我们可以通过反射的方式,获取R.java中的id: /** * 加载apk获得内部资源id * * @param context 宿主上下文 * @param...总结 明确思路,通过获取插件的Resources和resId来加载资源 通过仿APK解析过程,获取插件Resources 通过对插件的R.java的反射,获取resId 完成加载

1.4K40

Android 拦截WebView加载URL,控制其加载CSS、JS资源

端想让客服端根据需求来缓存网页,也就是说web端在设置了http响应头,我根据这个头来拦截WebView加载网页,去执行网络加载还是本地缓存加载。...这个需求之前一直没听说过,在网上搜了一下,发现有拦截WebView加载网页这个方法,研究了一下,最终实现了,今天小编分享给大家这个开发经验: WebView缓存机制 1.缓存模式 Android的WebView...这块小编想了好久,因为小编没怎么写过文件读取这一块,最后想到把这两个参数一起存到html文件开始的几个字节,每次加载先读取这两个参数就OK了,不过这样读写比较麻烦,也比较费时,但是却给后台减少了不小的压力...,第一个是已经废弃了的,SDK 20以下的会执行1,SDK20以上的会执行2,那么问题又来了,因为我们在获取http请求的时候要判断是post()请求还是get()请求,如果是post请求我们就网络加载...,更稳定,屏蔽安卓不同版本的webview的兼容性问题 生命就在于折腾,小编就喜欢折腾,将Android折腾到底O(∩_∩)O~~

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

    Android资源动态加载以及相关原理分析

    思考 一般情况下,我们在设计一个插件化框架的时候,要解决的无非是下面几个问题: 四大组件的动态注册 组件相关的类的加载 资源的动态加载 实际上从目前的主流插件化框架来看,都是满足了以上的特点,当然因为...动态加载资源例子 下面我们首先通过一个例子来说说,很简单的例子,就是动态加载图片,文本和布局,首先新建一个application的Model, 我们在string.xml加入一个文本,比如: <TextView android:id="@+id/text" android:text="动态加载布局" android:layout_width...动态加载资源原理分析 上面我们看了如何以插件的形式加载外部的资源,实际上无论是加载外部资源,还是加载宿主本身的资源,它们的原理都是相同的,只要我们弄懂了宿主自身的资源是如何加载的,那么对于上面的过程自然也就理解了...在Android中,当我们需要加载一个资源时,一般都会先通过getResources()方法,得到一个Resources对象,再通过它提供的getXXX方法获取到对应的资源,下面将分析一下具体的调用逻辑

    1.6K80

    求知 | Android资源加载的那些事-小试牛刀

    引言 聊到到 Android 的 资源加载 ,每一个开发同学都会非常熟悉,毕竟 getText() 等, 我们实在用了太多。 那如果此时问你,你知道 它们到底是怎么被加载的,内部会有什么处理吗?...介于此,本篇将由浅入深,从源头理清 Resource.getx() 的那些事,从而为理解 Android资源加载 迈出第一步。故此名: 小试牛刀。...Resource,在 Android 中,指的是我们开发中使用到的资源,例如 drawable、String、anim、color 等。...() 获取颜色资源,如果该资源在缓存中存在,则直接取出并返回新的实例,否则根据当前要加载的类型,如果是 “#xxx” ,则直接初始化并添加到缓存,否则判断 TypedValue 中保存的资源信息 后缀...关于我 我是 Petterp ,一个 Android工程师 ,如果本文对你有所帮助,欢迎点赞支持,你的支持是我持续创作的最大鼓励!

    59750

    求知 | Android资源加载的那些事 - 小试牛刀

    引言 聊到到 Android 的 资源加载 ,每一个开发同学都会非常熟悉,毕竟 getText() 等, 我们实在用了太多。 那如果此时问你,你知道 它们到底是怎么被加载的,内部会有什么处理吗?...介于此,本篇将由浅入深,从源头理清 Resource.getx() 的那些事,从而为理解 Android资源加载 迈出第一步。故此名: 小试牛刀。...Resource,在 Android 中,指的是我们开发中使用到的资源,例如 drawable、String、anim、color 等。...() 获取颜色资源,如果该资源在缓存中存在,则直接取出并返回新的实例,否则根据当前要加载的类型,如果是 “#xxx” ,则直接初始化并添加到缓存,否则判断 TypedValue 中保存的资源信息 后缀...至此,关于 Android-Resource 的求知篇正式开始,下一篇我将同大家分析 Resource 的初始化时机以及与 Resource.system() 的区别。

    58120

    关于加载状态的思考和尝试

    在web项目开发中我们离不开网络加载,特别是移动设备网络未知情况很多。为了避免网络加载出现的白屏或者数据未展示完全的情况,我们常用loading或者骨架屏来进行体验上的优化。...骨架屏相对于loading提供了更好的视觉效果和用户体验,但两者其根本上都不外乎是对加载状态的管理,当项目越来越大设计一个合适的且优雅的loading则需要考虑到更多的因素。...下面内容主要围绕移动端 以react为例,最简单的loading大概是这样的,定义state状态,通过切换state状态来改变加载UI。...Suspense可以让组件在渲染之前等待,即解决了组件和加载状态本身的抽离。...或许最终的解决方案并不适合你的项目,但希望通过这些内容,能让你从中对这不起眼的加载状态引发新的思考,如有不同的想法评论区互相交流。总之针对自身业务选择最适合的方式即是最好的。

    51930

    Android Glide加载图片、网络监听、设置资源监听

    Glide加载图片、加载进度监听 前言 正文 一、项目配置 二、显示网络图片 三、添加设置资源监听 四、添加设置资源监听 五、添加加载进度条 六、封装工具类 七、源码 总结 ---- 前言   在日常开发中使用...三、添加设置资源监听 但如果你的图片很大,网络又不是很好的情况下,就会让用户有一种不好的体验,比如,当你在地铁站里浏览资讯时,此时网络环境很差,你加载图片没有反应,而用户也无法感知,此时就会认为你的软件有问题...这里你就要多重考虑一下了,因为加载网络图片实际上是分为两步的,第一步请求网络资源,第二步缓存资源显示出来,刚才把网络关闭了,那么我们就应该对网络请求增加监听才对。...现在你回头看这个Glide的加载,如果要同时满足网络加载和图片资源设置的监听,代码量就会比较多,如果我一个页面有多个地方要加载网络图片呢?我总不能写这么多重复的代码吧。...它可以让你选择不同的图片资源类型,根据需求选择。 ? 当然这只是普通的显示,如果我在知道网络请求的情况呢?

    5.7K20

    Android so的热升级尝试

    作者:张志伟 团长:腾讯移动品质中心TMQ 一、So的热升级尝试 在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。...但和Android的许多特性一样,只提供了加载,而没有卸载和更换等功能。 为了研究能否实现卸载和升级等功能,首先要了解清楚JNI so加载的流程。...二、卸载及重新加载 如果想要提供热升级的能力,首先要做的是关闭已打开的so文件。但Android虚拟机没有提供unloadLibrary这样的接口,因此需要我们自己自己实现。...卸载之后如果我们先尝试调用原来的JNI函数,会发生什么事呢?显而易见会出现crash。...内存和资源泄漏 native代码中可能存在各种分配内存和资源的行为,使用以上方法更新so前,如果没有仔细处理这些资源,就会丢失原指针,造成内存泄漏。

    1.7K00

    求知 | 聊聊Android资源加载那些事 - Resource的初始化

    Hi,你好 引言 在上一篇,求知 | 聊聊Android资源加载的那些事 - 小试牛刀 中,我们通过探讨 Resource.getx() ,从而解释了相关方法的背后实现, 明白了那些我们日常调用方法的背后实现...介于此,本篇将与你一同探讨关于 Resources 初始化的那些事,从而建立起应用层资源加载的整体脉络。...所以我们自然也无法用它去加载我们 Apk 内部的资源文件。 小问题 在了解了上述流程后,如果你存在以下问题(就是这么倔强),那么不妨鼓励鼓励自己,[你没掉队]!...原来 Resource.getSystem() 无法加载应用资源的原因只是因为 AssetManager 对应的资源路径是 formeWrok 。...关于我 我是 Petterp ,一个 Android工程师 ,如果本文对你有所帮助,欢迎点赞支持,你的支持是我持续创作的最大鼓励!

    43210

    android加载dex方法,android Dex文件的加载

    大家好,又见面了,我是你们的朋友全栈君。 上篇文章讲到了apk的分包,通过multidex构建出包含多个dex文件的apk,从而解决65536的方法数限制问题《Android Dex分包》。...所以一般PathDexClassLoader只能加载已安装的apk的dex,而DexClassLoader则可以加载指定路径的apk、dex和jar,也可以从sd卡中进行加载。...,是则直接返回该class,如果未加载过,则调用父加载器的loadClass方法, 这里采用了java的双亲委派模型,即当一个加载器被请求加载某个类时,它首先委托自己的父加载器去加载,一直向上查找,若顶级加载器...这种方式的优点就是能够保证类的加载按照一定的规则次序进行,越是基础的类,越是被上层的类加载器进行加载,从而保证程序的安全性。...android平台上所有ClassLoader的parent,其loadClass也是先调用findLoadedClass, 这里未加载过直接返回null,根加载器已经是顶级加载器,所以这里直接调用了findClass

    1.9K20

    【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )

    】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) ---- 文章目录 Android 插件化系列文章目录 一、创建核心依赖库 二、创建类加载器 三、加载资源...中的字节码类对象 ; DexClassLoader 和 PathClassLoader 主要作用是加载 Android 和 引入的第三方库 中的字节码类对象 ; 三、加载资源 ---- 加载资源时需要使用到...: 通过上述加载插件资源后的 AssetManager 对象来创建 Resources 资源对象 ; // 获取资源 mResources = new Resources( assetManager

    1.4K10

    C++对于大型图片的加载缩放尝试

    Qt对于图片的操作主要集中在这几个类 QImage ,QImageReader ,QPixmap 其中QImage这个类对图片的缩放有几个很不错的技巧,不过对于大图片却并不好使,当我们去看QImage的实现代码时...,会发现其中读取QImageReader来加载图片,当我们去看QImageReader的实现的时候,我们会发现QImageReader的加载模式是unbuffer-->无缓冲加载模式,而且加载速度也是相当的快...但是QImage也是有一些独特的优势,在内存数据或者不是超大数据图片时,进行平缓缩放(特别是两步缩放的时候,时间效率和图片质量都还是相当不错的) 下面逐一说明,对于QImage如何进行平滑缩放 1 /...,在缩放到我们需要缩放的 10 *大小(时间效果很快,图片质量比较好) 11 *需要结合快速减半法一起使用. 12 */ 13 QImage m_res = m_image.scaled...(比如jpeg由于是8*8block的模式,支持一行一行读取,所以可以节省较大的内存空间),而对于其他不支持的格式,当面临较大的尺寸时,会出现因为内存太大,而无法加载的情况...

    1.8K70

    资源文件的动态加载

    页面加载 首先,浏览器发起直接对目标html的请求,然后分析其中用到的资源并下载,浏览器有自己的规则来判断什么样的资源可以被并行下载,什么样的不可以,浏览器对加载顺序有着特殊的喜好:   JS的出现会延迟后续...而且,一旦资源文件超过了浏览器支持的最大并发数量,那么必定有资源要被延迟下载。...比如加载某网页需要下载13个资源文件(包含原始的html)、全都是CSS不会产生JS延迟、每次请求耗时100ms,那么浏览器第一次连接用于请求html,第二到第七次连接并发请求2-7号资源,第八到第十三次连接并发请求...各种方式各有优缺点,比如能否跨域、是否会阻塞其它资源的下载(能否并行下载)、能否管理控制执行顺序、耗费的资源、是否兼容各大浏览器等(部分方法的特性可参考这儿)。...Script DOM Element 这是最常用的方式,它的优点很多:可以跨域、可以加载任何格式的外部 js(不需要对外部 js 进行重构)、不会阻塞其它资源的下载、实现简单。

    2.3K90

    Android中的资源

    学习内容 Android中的各种资源 国际化及资源自适应 能力目标 了解Android中资源的种类 掌握Dimension资源、Assets资源的使用 掌握样式和主题资源的使用 熟练掌握国际化和屏幕适配...可通过R资源清单文件访问的资源,保存在res目录下。 Android要求在res目录下用不同的子目录来保存不同的应用资源。表8-1-1列举了Android不同资源在res目录下的存储方式。...8.3 使用系统资源 Android系统提供了大量的系统资源,这些资源都放在sdk根目录下的/platforms/android-版本号/data/res目录中,引用这些资源的R文件可以在android.jar...在Java代码中引用系统资源的格式为:android.R.资源的种类.资源的ID。 在XML布局文件中引用系统资源的格式:@android: 资源的种类/资源的ID。 ​...Android中采用资源文件的形式来管理资源提高了程序的执行效率 B.

    11510

    【Android 插件化】Hook 插件化框架 ( 加载插件包资源 )

    】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 ) 【Android 插件化】Hook 插件化框架 ( 插件包资源加载 ) ---- 文章目录 Android 插件化系列文章目录...Activity 类替换占位的组件 ) 博客中 , 基本已经完成了插件 Activity 的实例化操作 , 已经可以启动插件 Activity , 只剩下资源文件没有获取 ; 本博客开始加载插件包中的资源文件...; 一、加载插件包资源文件 ---- 在插件包中的 Activity , 如果加载 R.layout.activity_main , 拿到的是 “宿主” 应用中的资源 , 无法拿到插件包中的资源 ;

    41210

    eBay 对静态资源加载的优化

    对于页面中引用 JS CSS 静态资源的处理,eBay 之前的主要模式是打包资源 每个页面中所需要的 JS 都打包为一个 JS 文件,放在页面的底部加载,CSS 也都打包为一个 CSS 文件,放在 head...这个方式的好处是大大减少了HTTP请求的数量,但也有明显的劣势,就是没有很好的利用浏览器缓存 例如 用户访问 A页面,需要加载 A.js (由 jquery.js 和 logic_a.js 打包而成)...再访问B页面时,需要加载 B.js (由 jquery.js 和 logic_b.js 打包成) 这两个JS文件中都包含了 jquery.js ,但还是需要每个页面都加载,使用不了缓存 所以需要一个折中的方案...,一个是这个子域的通用资源,一个是完全个性的页面资源,例如 ?...域公共资源:此域内各个请求中都一致的 JS CSS,不会随着请求参数的不同而变化,这部分资源还会被打包成一个文件,同样可以使用到浏览器缓存 个性资源:与请求参数密切相关的资源,例如业务逻辑的处理,页面中引用的所有个性资源再打包成一个文件

    87880

    Android的动态加载插件

    Android的动态加载插件apk 分析 动态加载主要分为加载使用插件的资源和管理插件的Activity、service、BroadcastReceiver的功能 1.插件的资源加载 我们都知道要获Res...的资源对象 Resources dexResource = getResource(context, dexAssertManager); //获取插件apk的类加载器...; import dalvik.system.DexClassLoader; /** * Description:资源加载管理器(用来加载外部apk包的资源管理器) * * @author chenby...总结一下: 1、加载插件资源:利用反射获取插件的AssertManager对象,然后利用获取到的AssertManager对象创建对应的插件包的Resource资源对象。...接着创建插件包的DexClassLoader对象,利用DexClassLoader加载资源的R类,通过反射拿到插件的资源resId,再利用插件的Resource对象获取对应的资源id的资源。

    1.9K30

    【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 )

    文章目录 一、不同版本的 DEX 加载 1、Android 8.0 版本 DEX 加载分析 2、Android 6.0 版本 DEX 加载分析 3、Android 5.0 版本 DEX 加载分析 一、...不同版本的 DEX 加载 ---- 不同 Android 版本 DexPathList 中的 Element[] dexElements 成员如何创建 ; 1、Android 8.0 版本 DEX 加载分析...6.0 版本 DEX 加载分析 Android 6.0 版本 DEX 加载分析 : 在 DexPathList 中 , Element[] dexElements 成员创建是调用 makePathElements...5.0 版本 DEX 加载分析 Android 5.0 版本 DEX 加载分析 : 在 DexPathList 中 , Element[] dexElements 成员创建是调用 makeDexElements...DEX 加载源码 , 发现每个版本加载方法不同 , 这样在开发多 DEX 加载时 , 就需要做相应的兼容 ;

    94200
    领券