如果依赖于其他库的特定部分,则减少Android库大小

时间:2017-05-26 13:48:16

标签: android performance android-studio

我正在开发 Android库模块

我的图书馆:https://github.com/sangeethnandakumar/TestTube

我不是重新发明轮子,而是依靠其他一些图书馆来完成我的工作。 在我的库名称空间中包含6个库后,我的库达到 1.8 MB

我的库仅依赖于其他库的特定功能,但现在整个库正在导入和集中。

即使在包含所有6个文件后,是否有方法可以减少我的库大小?我的库已经过优化。

1 个答案:

答案 0 :(得分:0)

  

在我的库命名空间中包含6个库后,我的库达到了大约1.8 MB。

您的库不是1.8 MB。您的库及其8个依赖项组合(具有传递依赖性)可能是1.8 MB。毕竟,这8个依赖项中有一个是appcompat-v7,而且这是我自己的最后一次超过1 MB。

  

我的图书馆已经过优化。

不,不是。你依赖于Volley和OkHttp。这些同样的事情。摆脱一个。既然你也在使用毕加索,我建议你去除Volley。

  

即使在包含所有6个文件后,有没有办法减少我的库大小?

摆脱不需要的依赖关系(例如,排球)。

如果您图书馆的使用者可能不需要图书馆的所有功能,请将您的图书馆分成几部分。例如,如果您图书馆的某些消费者可能需要您的网络代码而不是您的UI代码,则可以创建testtube-coretesttube-ui等。 testtube-core会抛弃纯UI的内容(例如appcompat-v7),因此对于只需要testtube-core功能的消费者,他们会获得一个较小的库。 testtube-ui取决于testtube-core,因此使用testtube-ui的消费者将获得所有依赖关系,而您的testtube-ui代码可以调用testtube-core代码来执行需要的操作完成。

除此之外,您将不得不依靠应用程序级别的缩小(例如,ProGuard)来摆脱不必要的事情。请记住,应用程序开发人员可能会使用您的库来自依赖项本身。 appcompat-v7就是一个很好的例子:只是因为可能只需要一片appcompat-v7并不意味着 app 只需要同样的切片。

这就是为什么the comment advising you to clone the code and get rid of pieces不是很明智的原因。充其量,可能适用于使用您的库的应用程序开发人员可能不需要的模糊库(例如,gun0912.ted:tedpermission是什么)。但是,如果应用也将这些库用于其他目的,那么创建自己的appcompat-v7gson或其他内容的黑客副本会使大小问题变得更糟。