0

如果我想展平我所有的包层次结构,我该如何继续,有什么陷阱?

请注意,这个问题不是关于我为什么要这样做,而是关于如何。例如,有效的原因将包括(但不限于)使 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。

4

1 回答 1

2

你应该看看proguard。这是一个代码混淆器,有很多选项,包括扁平化包,如果你不想的话,不混淆其他东西。

于 2012-10-13T17:44:47.940 回答