紧凑的罐子,我们这是在JAR清单中定义一些入门的主要方法,和一堆依赖。创建没有给出一个普通的Java项目的Gradle依赖
现在通常当我们创建一个分布,我们可以使用应用程序的插件,并且有一定的结构类似这样的输出
/bin (some splatform specific scripts that point to our jar)
/lib (our jar + all dependencies with their dependencies etc...)
问题是,即使我们使用了只有几类,从我们的直接依赖关系,他们和所有的传递依赖将最终分布。例如,从100M的发行版中,只有1M是实际可能运行的代码,可能与我们的应用程序有任何关系...
像proguard这样的工具可以将代码收缩到特定的jar中进行各种优化,但不会在意if该代码未被使用。通过未使用我的意思是主要方法是jar的入口点,并根据主要的代码它可能永远不会使用实际应用程序jar中的大部分代码和更多的库罐中...
我们的目标是创建一个具有唯一的代码,它实际上会使用这个1M罐子,考虑到是什么在JAR清单的主要方法...
我搜索了很多,但找不到任何解决方案对此,proguard非常接近,但我找不到任何方式使它只关心代码的特定流程而不是所有的代码。
是否有可以做这件事的任何工具?
只是一个侧面说明:请记住,有一个)反射......使得它很难确定哪些类是真的* *需要...然后b)在转换为停机问题:对于任意程序和输入,您可以**不**确定是否曾经使用某个函数(又名类)。所以,我说的是:也许你的问题有实用的答案,但是大的理论是不利于你的。 – GhostCat
SO关闭主题。 – ManoDestra
@Jägermeister通常,如果一个图书馆依赖于反思,你会发现它并明确告诉proguard不要删除这个或那个类......在我的情况下,我根本不使用它...关于b)这是怎么回事?如果proguard已经这样做了,它会通过字节码,并且如果它检测到死代码,它将删除它或任何未使用的类...所以proguard做我想要的它只是它不关心入口点... – vach