Android混淆APK问题

时间:2016-06-24 05:54:08

标签: android listview obfuscation android-proguard android-build-flavors

我在启用Pro-Guard的情况下生成已签名的APK时遇到了一个奇怪的问题。 我正在显示列表视图,其中包含来自服务器的一些项目,文本颜色为黑色。在调试版本中,列表视图显示数据没有任何问题。但在发布模式下,列表视图显示透明色的数据,文本颜色我使用黑色并在列表视图适配器类中设置颜色,因为在发布模式下我可以单击列表视图并选择列表项但列表中的项视图不可见。

enter image description here

上图处于调试模式并正确显示列表视图。

enter image description here

上图处于发布模式。

请注意我的Pro-Guard文件

    -keep class in.apricotz.outlet.ui.adapter.ListBaseAdapter.**
       -keep class butterknife.** { *; }
       -dontwarn butterknife.internal.**
       -keep class **$$ViewBinder { *; }

      -keepclasseswithmembernames class * {
      @butterknife.* <fields>;
     }

    -keepclasseswithmembernames class * {
    @butterknife.* <methods>;
   }
   -dontwarn org.apache.http.**
   -dontwarn okio.**
   -dontwarn retrofit2.**
   -keep class retrofit2.** { *; }
   -keepattributes Signature
   -keepattributes Exceptions
   -keepattributes *Annotation*

   -keepattributes RuntimeVisibleAnnotations
   -keepattributes RuntimeInvisibleAnnotations
   -keepattributes RuntimeVisibleParameterAnnotations
   -keepattributes RuntimeInvisibleParameterAnnotations
   -keepattributes EnclosingMethod
   -keepclasseswithmembers class * {
    @retrofit2.* <methods>;
   }

  -keepclasseswithmembers interface * {
    @retrofit2.* <methods>;
  }

  -keepattributes Signature
  -keepnames class org.apache.** {*;}
  -keep public class org.apache.** {*;}
  -keep public class org.apache.http.**{*;}
  -keep class rx.schedulers.Schedulers {
    public static <methods>;
   }
   -keep class rx.schedulers.ImmediateScheduler {
     public <methods>;
    }
   -keep class rx.schedulers.TestScheduler {
    public <methods>;
    }
   -keep class rx.schedulers.Schedulers {
    public static ** test();
   }
  -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
   }
  -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef              {        long producerNode;
      long consumerNode;
  }
  -dontwarn rx.internal.util.**

  -dontusemixedcaseclassnames
  -dontskipnonpubliclibraryclasses
  -dontpreverify
  -verbose
  -ignorewarnings
  -repackageclasses ''
  -allowaccessmodification
  -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

  -dontwarn android.support.design.**
  -keep class android.support.design.** { *; }
  -keep interface android.support.design.** { *; }
  -keep public class android.support.design.R$* { *; }
  -keep public class * extends android.support.v4.app.Fragment
  -keepclassmembers class **.R$* {
    public static <fields>;
   }

过去两天我一直搞砸了这个问题。在调试版本中,应用程序运行正常,没有任何问题。请帮帮我。

  

块引用

1 个答案:

答案 0 :(得分:0)

实际上无法找到您的根本原因,但您可以查看:

在发布模式下从服务器获取数据的url是否响应项目列表中的空项?

如果你使用github的自定义库,请检查Pro-Guard哪个作者设置。

您是否使用视图持有者对象来保存listview的视图项?通过编程为textview设置文本颜色。

您可以使用recyclerview替换listview。

检查ProGuard的问题: https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/troubleshooting.html