混淆android jar会抛出未引用的android.R $布局错误

时间:2014-05-13 09:02:50

标签: java android proguard

我有一个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);
}

1 个答案:

答案 0 :(得分:0)

首先,当您更新lib jar文件的progaurd设置时,您需要确保从lib jar文件中使用的类的根软件包名称是什么。

截至目前,我不知道您在lib jar文件中使用的类是什么(可以在项目导入语句中查看)

示例:我在项目中使用Twitter4J lib,我知道所有类的roote包名称( twitter4j。​​; * ) 我导入到我的项目中的内容因此在我的progaurd字符串配置文件中添加了两行以下并正常工作。

-keep class twitter4j.** { *; }
-dontwarn twitter4j.**