【问题标题】:Android: why my class is still obfuscated though proguardedAndroid:为什么我的课程虽然被保护但仍然被混淆
【发布时间】:2014-07-08 03:03:57
【问题描述】:

在包 /ui/cinema/model/ 中,有几个类我不希望它们被混淆,所以我在我的 proguard 配置文件中声明以下行:

-保持公共类 com.example.ui.cinema.model.** {*;}

-保持公共类 com.example.ui.cinema.model.**$* {*;}

对于该文件夹中的大多数类,它工作正常,除了“CinemaCityModel”:

package com.example.ui.cinema.model;
public class CinemaCityModel
{
    public static final String CUR_CITY_NAME_SORT="CURRENT";
    public static final String HOT_CITY_NAME_SORT="HOT";

    private String CityId;
    private String CityName; 
    private String NameSort; 

    public String getCityId()
    {
        return CityId;
    }

    public void setCityId(String cityId)
    {
        CityId = cityId;
    }

    public String getCityName()
    {
        return CityName;
    }

    public void setCityName(String cityName)
    {
        CityName = cityName;
    }

    public String getNameSort()
    {
        return NameSort;
    }

    public void setNameSort(String nameSort)
    {
        NameSort = nameSort;
    }

}

我反编译了apk,找不到CinemaCityModel。但它在我的源代码中的那个包中。它被混淆了,我不知道为什么。有人遇到过这个吗?请帮忙,谢谢:)

【问题讨论】:

    标签: java android proguard


    【解决方案1】:

    proguard 中的 -keep 关键字仅防止未使用的类被优化掉。

    为了防止类被混淆,你需要使用-dontobfuscate

    【讨论】:

    • 谢谢,sddamico。但是在查看 Proguard 手册后,它说“指定不混淆输入类文件。默认情况下,应用混淆;类和类成员接收新的短随机名称,除了各种 -keep 选项列出的名称。内部属性对调试有用的,比如源文件名、变量名、行号都被去掉了。”....所以我认为我的 CinemaCityModel 不应该被混淆。有趣的是,该包中的另一个类适用于此规则,除了 CinemaCityModel..
    【解决方案2】:

    您的配置确实保留了这个类(实际上第一行就足够了,因为它暗示了第二行)。您应该会在 proguard/seeds.txt 中看到它。

    您应该仔细检查:输入中也可能缺少它,因为它没有正确编译。或者在这种情况下,它可能不是公开的,或者它毕竟在不同的包中。或者你的反编译器可能无法写出反编译的类。

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 2016-12-31
      • 2019-12-17
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2013-04-05
      相关资源
      最近更新 更多