首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混淆android抛出未引用的android.R$layout错误

混淆android抛出未引用的android.R$layout错误
EN

Stack Overflow用户
提问于 2014-05-13 09:02:50
回答 1查看 467关注 0票数 0

我有一个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角度,因此还没有找到任何解决方案。

下面是前保护配置文件:

代码语言:javascript
复制
-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);
}
EN

回答 1

Stack Overflow用户

发布于 2014-05-13 09:13:13

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

到目前为止,我不知道您从lib jar文件中使用了哪些类(您可以在项目导入语句中检查这个类)

示例:我在我的项目中使用Twitter4J库,并且我知道所有类的roote包名,Twitter4J是我要导入到我的项目中的,所以在我的文件中添加了以下两行,并且运行良好。

代码语言:javascript
复制
-keep class twitter4j.** { *; }
-dontwarn twitter4j.**
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23626909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档