android proguard,自定义视图和项目重建

时间:2013-07-24 17:24:35

标签: android packages proguard custom-view

我有一个非常大的应用程序,我正试图与ProGuard混淆。它使用Android支持库FragmentActivities,并且有很多可以扩展View,RelativeLayout或FrameLayout的复合视图。

问题是ProGuard无法保留一些视图(之后我得到ClassNotFoundException,因为它们在XML中引用)有趣的是,那些缺少的视图属于一个特定的包(我的观点分布在3或4种不同的包装)。即使编写明确的规则,我也无法保留这些视图。

更新

事实证明这与我如何清理/重建项目等非常相关。

根据我的经验到目前为止,正确获取已签名的apk包括所有类的唯一方法是:

  1. 禁用自动项目构建
  2. 清理所有项目(手动)
  3. 手动构建项目,
  4. 生成已签名的APK
  5. 如果我启用自动构建,或者不在构建之间清理项目,则生成的APK会随机丢失类。

    我想知道我做错了什么,或者你们是否有这个问题或解决方案。此外,任何关于proguard清洁等的技巧都非常受欢迎!提前谢谢。

    旧问题

    我的包层次结构:

    Application: tv.nebular.funq
    Views 1:  tv.nebular.funq.gui.*
    Views 2:  tv.nebular.funq.apps.*
    Views 3:  com.regaliz.gui.views.*
    Views 4:  com.regaliz.custom.*
    

    包(3)和(4)中的视图是我遇到的问题。即使包装不同,它们也不是不同的项目。这是一个单一的项目。

    我对观点的规定:

        -keep public class * extends android.view.View {
            public <init>(android.content.Context);
            public <init>(android.content.Context, android.util.AttributeSet);
            public <init>(android.content.Context, android.util.AttributeSet, int);
            public void set*(...);
        }
    
        -keepclasseswithmembers class * {
            public <init>(android.content.Context, android.util.AttributeSet);
        }
    
        -keepclasseswithmembers class * {
            public <init>(android.content.Context, android.util.AttributeSet, int);
        }
    

    缺少观点的具体规则:

        # regaliz views
    
        -keep public class com.regaliz.gui.views.*
    
        -keepclassmembers class com.regaliz.gui.views.** { 
            public <init>(android.content.Context, android.util.AttributeSet);
        }
    
        # regaliz custom
    
        -keep public class com.regaliz.custom.FunqViewPager
    
        -keepclassmembers class com.regaliz.custom.FunqViewPager { 
            public <init>(android.content.Context, android.util.AttributeSet);
        }
    

    然而,这似乎被忽略了。总是缺少这些包中的视图。即使是明确宣布的那个。

    更新 看看proguard-mapping.txt输出文件,我看到应该正确保存视图,但事实是,它们已经丢失了!

    任何帮助表示赞赏!

0 个答案:

没有答案