的某些包因为我需要在我目前的项目bi-directional
地图我看只有添加外部库
- 谷歌番石榴的BIMAP和
- Apache的集合的BidiMap。
的库两者都是相当big
那么,有没有什么办法可以只添加从guava library
或只从Apache Collection
的org.apache.commons.collections4.bidimap
包BiMap class
?
欢呼声
的某些包因为我需要在我目前的项目bi-directional
地图我看只有添加外部库
的库两者都是相当big
那么,有没有什么办法可以只添加从guava library
或只从Apache Collection
的org.apache.commons.collections4.bidimap
包BiMap class
?
欢呼声
您可以使用Pro Guard。
要使您的APK文件尽可能小,您应该启用收缩以删除发布版本中未使用的代码和资源。本页面描述了如何做到这一点,以及如何指定在构建期间保留或放弃哪些代码和资源。
至于建议,使用ProGuard应该包含的库中删除未使用的方法和字段也:https://developer.android.com/studio/build/shrink-code.html
代码ProGuard可以缩小尺寸,它会检测并从您的打包的 应用程序,包括那些来自包含的代码库(使其成为用于解决64k参考极限的有价值工具)中的未使用的类,字段,方法和属性中删除 。
(重点煤矿)
如果你想这样做手工然后下面是我尝试在剥离番石榴,只留下由依赖关系需要HashBiMap。它看起来像依赖于很多类。还要记住,proguard在字节级别工作,所以剥离类将永远不会像使用proguard去除未使用的代码那样有效。
我用java 9 JDK中的jdeps找到HashBiMap
实现BiMap
接口所使用的所有依赖关系。这表明它递归地依赖于35%的整个番石榴jar(实际上存在于jar中的666个类) - 更不用说java.base类。重新打包的jar文件有903KB,而原始jar是2.5MB(guava-23.0-rc1-android.jar)。
下面是剧本我用(我还测试导致例如Android应用的jar):
# cleanup
rm -rf guava_jar
rm -rf guava_jar_stripped
# unzip jar file
unzip -qq guava-23.0-rc1-android.jar -d guava_jar
# first lets see how many classes are in guava
find guava_jar -type f | wc -l
# now use jdeps to find recursively dependencies for HashBiMap class. Each
# dependency is a class name which after some string manipulations is used
# to copy to guava_jar_stripped folder
jdeps -R -verbose -cp ./guava-23.0-rc1-android.jar ./guava_jar/com/google/common/collect/HashBiMap.class \
| sed -En 's/(.*)->.*/\1/p' \
| sed -e 's/[[:space:]]*$//' \
| sed -En 's/\./\//pg' \
| uniq \
| xargs -n 1 -I file rsync -qavR ./guava_jar/file".class" ./guava_jar_stripped
# now lets see how many classes were copied
find guava_jar_stripped -type f | wc -l
# now copy back manifest files
rsync -qavR ./guava_jar/META-INF/* ./guava_jar_stripped
# and finally create new jar from stripped classes
cd ./guava_jar_stripped/guava_jar
jar cf ../guava_jar.jar *
和样品测试代码:
BiMap<String, String> myBimap = HashBiMap.create();
myBimap.put("Key", "value");
myBimap.get("key");
myBimap.inverse().get("value");
提取相关类并将它们添加到自己的项目。或者,将它们用作实施自己班级的灵感。 – CommonsWare
我将如何去提取我需要的类? –
https://docs.oracle.com/javase/tutorial/deployment/jar/unpack.html –