我有一个Android库项目,我想在发布之前混淆它。这个库支持视图和布局,因此当我使用Proguard混淆jar文件时,它会将所有支持UI创建的类抛到警告下面,并导致混淆失败。下面是对这样一个文件的警告:
Warning:com.event.android.eventui:找不到引用的类com.event.android.R$layout Warning:com.event.android.eventui:找不到引用的类com.event.android.R$id Warning:com.event.android.eventui:找不到引用的类com.event.android.R$string Warning:com.event.android.eventui:找不到引用的类com.event.android.R
我已经使用了proguard工具(\android\tools\proguard\bin)。我得到的库混淆参考和解决方案没有ui角度,因此还没有找到任何解决方案。
下面是前保护配置文件:
-outjars 'C:\Projects\event\eventpro.jar'
-injars 'C:\Projects\event\event.jar'
-libraryjars 'C:\android\android-sdk\platforms\android-19\android.jar'
-libraryjars 'C:\android\android-sdk\extras\android\support\v4\android-support-v4.jar'
-dontskipnonpubliclibraryclassmembers
-dontshrink
-dontoptimize
-verbose
-keep class public class **.R { *; }
-keepclassmembers class class **.R$* {
public static <fields>;
}
# Keep - Applications. Keep all application classes, along with their 'main'
# methods.
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
# Keep - Library. Keep all public and protected classes, fields, and methods.
-keep public class * {
public protected <fields>;
public protected <methods>;
}
# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Also keep - Serialization code. Keep all fields and methods that are used for
# serialization.
-keepclassmembers class * extends java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
native <methods>;
}
# Keep names - _class method names. Keep all .class method names. This may be
# useful for libraries that will be obfuscated again with different obfuscators.
-keepclassmembers,allowshrinking class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String,boolean);
}发布于 2014-05-13 09:13:13
首先,当您更新lib jar文件的progaurd设置时,需要确保您从lib jar文件中使用的类的根包名称是什么。
到目前为止,我不知道您从lib jar文件中使用了哪些类(您可以在项目导入语句中检查这个类)
示例:我在我的项目中使用Twitter4J库,并且我知道所有类的roote包名,Twitter4J是我要导入到我的项目中的,所以在我的文件中添加了以下两行,并且运行良好。
-keep class twitter4j.** { *; }
-dontwarn twitter4j.**https://stackoverflow.com/questions/23626909
复制相似问题