gpt4 book ai didi

java - 如何使用 proguard 混淆除公共(public)方法名称和属性之外的所有内容?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:46:31 25 4
gpt4 key购买 nike

我正在构建一个 android 框架,我需要混淆和压缩 jar 以将其发送给用户。

我正在使用 android SDK 中包含的 proguard 工具,我对输出 jar 有以下要求:

  • 保留输入 jar 中包含的所有类,但混淆它们。
  • 不要混淆`AndroidManifest.xml 中调用的类的类名
  • 不要混淆类名称和公共(public)方法名称/属性,因为所使用的类具有供用户使用的接口(interface),但要针对用户的内容进行混淆。

为此,我使用以下配置:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

-keep, allowobfuscation class com.company.*
-keepclassmembers, allowobfuscation class * {
*;
}


-keepnames class com.company.MyClass { *; }
-keepclassmembernames class com.company.MyClass {
public <methods>;
public <fields>;
#!private *; also tried this but it didn't work
}

然而,即使内容被混淆了,我的私有(private)类名称和属性仍然具有相同的名称。我是否遗漏了通配符中的某些内容?

最佳答案

玩了一下之后,我发现下面的东西可以用

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

-keep, allowobfuscation class com.company.*
-keepclassmembers, allowobfuscation class * {
*;
}

-keepnames class com.company.MyClass
-keepclassmembernames class com.company.MyClass {
public <methods>;
public <fields>;
#!private *; also tried this but it didn't work
}

您配置中的错误是存在 { *; -keepnames 选项的末尾。

我使用了以下类:

package com.company;

public class MyClass {
public static void main(String[] args) {
int longVariableName = publicStaticMethod();
String abcxyz = privateStaticMethod("abc", "xyz");
System.out.println("longVariableName: " + longVariableName);
System.out.println("abcxyz: " + abcxyz);
}

public static int publicStaticMethod() {
return 9000;
}

private static String privateStaticMethod(String first, String second) {
return first + second;
}
}

反编译后的类是这样的:

package com.company;

import java.io.PrintStream;

public class MyClass {
public static void main(String[] paramArrayOfString) {
paramArrayOfString = publicStaticMethod();
String str = a("abc", "xyz");
System.out.println("longVariableName: " + paramArrayOfString);
System.out.println("abcxyz: " + str);
}

public static int publicStaticMethod() {
return 9000;
}

private static String a(String paramString1, String paramString2) {
return paramString1 + paramString2;
}
}

关于java - 如何使用 proguard 混淆除公共(public)方法名称和属性之外的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33958972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com