我有一个Android库项目,我希望在分发之前对其进行模糊处理。 这个库支持视图和布局,因此当我使用Proguard对jar文件进行模糊处理时,它会抛出所有支持UI创建的类的警告,并且不会进行模糊处理。以下是一个这样的文件的警告:
警告:com.event.android.eventui:无法找到引用的类com.event.android.R $ layout 警告:com.event.android.eventui:无法找到引用的类com.event.android.R $ id 警告:com.event.android.eventui:无法找到引用的类com.event.android.R $ string 警告:com.event.android.eventui:找不到引用的类com.event.android.R
我使用了proguard GUI工具(\ android-sdk \ tools \ proguard \ bin)。 我得到的库混淆的参考和解决方案没有ui角,因此还没有找到任何解决方案。
以下是proguard配置文件:
-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);
}
答案 0 :(得分:0)
首先,当您更新lib jar文件的progaurd设置时,您需要确保从lib jar文件中使用的类的根软件包名称是什么。
截至目前,我不知道您在lib jar文件中使用的类是什么(可以在项目导入语句中查看)
示例:我在项目中使用Twitter4J lib,我知道所有类的roote包名称( twitter4j。; * ) 我导入到我的项目中的内容因此在我的progaurd字符串配置文件中添加了两行以下并正常工作。
-keep class twitter4j.** { *; }
-dontwarn twitter4j.**