如果我想扁平化所有包层次结构,我该如何继续以及有哪些问题?
请注意,这个问题不是关于我为什么要这样做,而是关于如何这样做。例如,有效的理由包括(但不限于)使 Proguard 成为有用程序的几个原因。
首先,我想保持类名不变,但删除所有层次结构。
所以:
- com.acme.example.SomeClass 应变为“SomeClass”或
“a.SomeClass” - com.acme.sample.AnotherClass 应该成为
“AnotherClass”或“a.AnotherClass”
我快速检查了一下,在大约一千个类中,没有两个类具有重复的名称:
find . -iname "*java" | sed 's/.*\///g' | sort | wc -l
和:
find . -iname "*java" | sed 's/.*\///g' | sort | uniq | wc -l
两者都提供相同数量的.java文件(所以我很确定*.java文件中没有任何“重复名称”)。
我正在考虑编写一个 shell 脚本来:
- 删除(或修改)封装行
- 删除所有“import com.acme...”行
这行得通吗?
什么因素可能会阻碍此功能的发挥?从公共(public)/ protected /默认/私有(private)可见性的角度来看会发生什么?
我想反射(reflection)会在这里造成严重破坏,但幸运的是我们没有做任何事情。
请注意,我只想在我自己的类上执行此操作:我不想修改外部 API/jar。
最佳答案
您应该看看proguard 。它是一个代码混淆器,有很多选项,包括扁平化包,如果您不想,则不混淆其他内容。
关于java - 如何扁平化整个包层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875182/