我正在开发 Android库模块。
我的图书馆:https://github.com/sangeethnandakumar/TestTube
我不是重新发明轮子,而是依靠其他一些图书馆来完成我的工作。 在我的库名称空间中包含6个库后,我的库达到 1.8 MB 。
我的库仅依赖于其他库的特定功能,但现在整个库正在导入和集中。
即使在包含所有6个文件后,是否有方法可以减少我的库大小?我的库已经过优化。
答案 0 :(得分:0)
在我的库命名空间中包含6个库后,我的库达到了大约1.8 MB。
您的库不是1.8 MB。您的库及其8个依赖项组合(具有传递依赖性)可能是1.8 MB。毕竟,这8个依赖项中有一个是appcompat-v7
,而且这是我自己的最后一次超过1 MB。
我的图书馆已经过优化。
不,不是。你依赖于Volley和OkHttp。这些同样的事情。摆脱一个。既然你也在使用毕加索,我建议你去除Volley。
即使在包含所有6个文件后,有没有办法减少我的库大小?
摆脱不需要的依赖关系(例如,排球)。
如果您图书馆的使用者可能不需要图书馆的所有功能,请将您的图书馆分成几部分。例如,如果您图书馆的某些消费者可能需要您的网络代码而不是您的UI代码,则可以创建testtube-core
和testtube-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-v7
或gson
或其他内容的黑客副本会使大小问题变得更糟。