如果我想展平我所有的包层次结构,我该如何继续,有什么陷阱?
请注意,这个问题不是关于我为什么要这样做,而是关于如何。例如,有效的原因将包括(但不限于)使 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 ....”行
这行得通吗?
可能是什么阻止了它的工作?从公共/受保护/默认/私有可见性的角度来看会发生什么?
我想反射会在这里破坏,但幸运的是我们没有做任何事情。
请注意,我只想在我自己的类上这样做:我不想修改外部 API/jar。