-
背景
因工作需要,想要在提供一种能力,供三方apk进行调用,通常的解决方式就是通过提供aar给到三方apk进行继承。但是这样的方式就会有一个明显的缺陷,就是在资源文件众多的时候,aar文件会变得非常大,进而导致三方apk的包体变大。这样显然是不利于三方进行接入,并且在多个apk集成后,同样的内容在同一个系统中打包了多份,这显然也不是我们想要的。这个时候,shared-library就十分符合我们的诉求。
上搜索了半天,关于sharedlibrary实在是少之又少,因此经过一番周折以后,我觉得有必要为后续碰到问题的人提供一点帮助。
接下来我会一步一步得介绍如何创建一个自己得共享库。
-
使用共享库
这个其实就比较简单,直接看官方文档就可以,放上官方文档就不再进行详细解释。
https://developer.android.google.cn/guide/topics/manifest/uses-library-elementl=en
-
创建一个空项目
如图,为了保险起见,我们把所有的资源文件也全给删了
-
其他问题
到这里我们的共享库基本就建设完成了,但是还有一个点,这个apk中尽量不要导入和使用其他的库,包括RecyclerView,会导致宿主apk找不到对应的类。至于原因的话,可以在BaseDexClassloader里找到,这个是安卓应用的PathClassLoader的父类。这个类在android10上进行了修改,增加了一个成员变量sharedLibraryLoaders,会保存应用加载所有共享库的classloader。若在这些加载器中已加载,则不再进行加载,代码如下:
因此,若导入了第三方库,一旦两方的版本不一致,使用的就一直是当前库内版本,就有可能导致宿主app编译成功,运行时 错。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!