Proguard obfuscationdictionary无效

时间:2018-02-12 01:34:46

标签: proguard obfuscation

我想要实现的是避免我的方法参数具有String paramString或int paramInt这样的名称。我正在尝试使用-obfuscationdictionary,但它不起作用(至少它没有做我认为它应该做的,这是使用我的字典单词而不是paramString等)

我有以下Proguard配置文件,但我没有使用我的字典单词列表。 (我检查它是通过重命名它找到的文件找到字典文件,并且它没有编译,说它找不到我的字典)。

        public abstract class Employee {
            int employeeID;
            String firstName;
            String lastName;
            ArrayList<Paycheck>listOfPaychecks;
            double hourlyRate;
            double periodHours;

            /**

    * @param employeeID

    * @param firstName

    * @param lastName

    * @param listOfPaychecks

    * Parameterized Constructor

    */

            public Employee (int employeeID, String firstName, String lastName, 
            ArrayList<Paycheck> listOfPaychecks){
                this.employeeID = employeeID;
                this.firstName = firstName;
                this.lastName = lastName;
                this.listOfPaychecks = listOfPaychecks;

            }

            public int getEmployeeID() {
                return employeeID;
            }

            public void setEmployeeID(int employeeID){
                this.employeeID = employeeID;        
            }

            public String getFirstName(){
                return firstName;
            }

            public void setFirstName(String firstName){
                this.firstName = firstName;
            }

            public String getLastName(){
                return lastName;
            }

            public void setLastName(String lastName){
                this.lastName = lastName;
            }

            public ArrayList<Paycheck> getListOfPaychecks(){
                return listOfPaychecks;
            }

            public void setListOfPaychecks(ArrayList<Paycheck> listOfPaychecks){
                this.listOfPaychecks = listOfPaychecks;
            }
            @Override

            public String toString() {

                StringBuffer employeeInfo=new StringBuffer();

                employeeInfo.append("Employee ID: "+employeeID+" First Name: "+firstName+" Last Name: "+lastName+"\nPay Check Details: \n");

                for (Paycheck paycheck : listOfPaychecks) {

                    employeeInfo.append(paycheck.toString());
                }

                return employeeInfo.toString();

            }
        }

2 个答案:

答案 0 :(得分:1)

AFAIK,Proguard没有&#34;混淆&#34;参数名称与其他名称相同,它只是剥离它们(因为与字段和类名称不同,参数名称存储在可选的调试符号中)。 &#34;您在反编译器(paramIntarg0等)中看到的参数名称&#34;只是由反编译器本身自动生成的名称。不支持将混淆字典应用于参数名称, - 您可以将它们完全剥离或保留它们(provided that your binaries had them in the first place)。

您可以尝试通过-keepattribute LocalVariableTable保留原始参数名称,但除非您-keep整个类,否则这可能不起作用, - Proguard对现代类文件中的局部变量的处理有点儿错误。如果你什么都不做,Proguard将默认删除它们。

答案 1 :(得分:1)

正如另一个答案已正确说明的那样,ProGuard不会将混淆字典用于方法参数。要么将它们删除,要么保留原始名称。

为了保留它们,您必须添加以下内容:

-keepparameternames