如何告诉Proguard混淆类名

我希望proguard能够混淆类名。 我在Proguard.cfg中有这一行

-keepclasseswithmembers class * {
public static <fields>;
}

-keepnames class * implements java.io.Serializable
-keep public class com.google.**

我注意到没有被混淆的是类名。 所以运行jdgui我看到COM /测试/ ABCD / ActualClass.java公共类ActualClassName延伸活动等

此外,我看到方法返回真正的类名。 喜欢

 ActualClassname aa();

并导入类似的语句

 import com.abcd.ActualClassName

我如何让Proguard自己混淆类名。 它不仅适用于我看到的这些活动,而且我的适配器也不会被混淆。 那里有混淆,但不是类名。

上面的规则是否阻止类名称被混淆?

更新:我已经删除了上面的规则,而一个没有扩展任何东西的Utility类没有被混淆。 我现在想知道是否存在一些隐含的规则,关于保留类的引用的类的名称,这些类是像Activity的派生类一样保存的? 名称未被混淆的类有一些共同之处:

1)静态方法2)导入类似于活动或可序列化类型的其他类型。 3)他们有其他类的参数的方法(其中一些可能需要保留)。

但是,我没有特别要求保留这些实用类的地方。


有几个类出现在您的代码中,必须保留相同的全限定类名 android能够找到它们。 上面的一个例子是所有的Activity类,因为它们在清单中以其全名定义为字符串。 如果proguard重命名类,那么Android将不再能够找到它们。

典型的Proguard配置将引用Android SDK中的Proguard配置,其中将包括几个重要的行,如:

-keep public class * extends android.app.Activity

我认为你的问题来自你的第一行:'-keepclasseswithmembers'包含类名,所以在你的情况下,任何带有静态字段的类都将保留它的名字。 把它改成简单的'-keepclassmembers'会混淆类名,同时保持静态字段不变(我假设你想这样做)。

这就是说,我不确定你为什么要这么做。 如果你想保留静态变量名称,你不应该保留类名称,看看你将如何访问静态字段? 你为什么要保留所有的静态变量名?

链接地址: http://www.djcxy.com/p/59383.html

上一篇: How to tell Proguard to obfuscate class names

下一篇: Java BitSet which allows easy Concatenation of BitSets