Android - Proguard 剥离 Parcelable Creator
Android - Proguard stripping away Parcelable Creator
我有一个包含 Proguard 规则的库项目。如下所述
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
我的一个 class 名为 Actor 实现了 Parcelable
,其创建者就像
public static final Creator<Actor> CREATOR = new Creator<Actor>()
{
public Actor createFromParcel(Parcel pc)
{
return new Actor(pc);
}
public Actor[] newArray(int size)
{
return new Actor[size];
}
};
然后,AAR 被创建,我在 gradle 中使用 compile 将库项目导入我的项目。然后我试图 运行 处于发布模式的项目,这给我带来了问题 警告:com.xtlib.models.Actor:找不到引用的 class a
我查看了 Actor 的代码,看起来像
public static final Creator<Actor> CREATOR = new a();
尽管 Proguard 没有更改 "CREATOR" 名称,但它正在更改实现。如何跳过 proguard 将我的声明更改为变量
此致,
斯里
我想通了。问题出在最新的 gradle 插件 1.5.0
上。最新的 gradle 将生成的匿名 类(例如:a.class)放在包结构之外。
当我将我的 Gradle 插件恢复到 1.2.3 以生成 AAR 时,生成的 类 被移动到它们各自的包中。
这解决了我的问题。
干杯
我有一个包含 Proguard 规则的库项目。如下所述
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
我的一个 class 名为 Actor 实现了 Parcelable
,其创建者就像
public static final Creator<Actor> CREATOR = new Creator<Actor>()
{
public Actor createFromParcel(Parcel pc)
{
return new Actor(pc);
}
public Actor[] newArray(int size)
{
return new Actor[size];
}
};
然后,AAR 被创建,我在 gradle 中使用 compile 将库项目导入我的项目。然后我试图 运行 处于发布模式的项目,这给我带来了问题 警告:com.xtlib.models.Actor:找不到引用的 class a
我查看了 Actor 的代码,看起来像
public static final Creator<Actor> CREATOR = new a();
尽管 Proguard 没有更改 "CREATOR" 名称,但它正在更改实现。如何跳过 proguard 将我的声明更改为变量
此致,
斯里
我想通了。问题出在最新的 gradle 插件 1.5.0
上。最新的 gradle 将生成的匿名 类(例如:a.class)放在包结构之外。
当我将我的 Gradle 插件恢复到 1.2.3 以生成 AAR 时,生成的 类 被移动到它们各自的包中。
这解决了我的问题。
干杯