Debug签名时候数据正常正式签名的时候数据不正常,不显示,或者数据错乱问题

转载至:https://blog.csdn.net/wzy901213/article/details/82877858
最近,给自己的项目加上了代码混淆,在构建打包安装阶段没有任何问题,但是运行在手机上进行登录,项目就奔溃退出了。查验日志,是因为登录的时候上传的数据为null 导致报了java.lang.NullPointerException。

2、错误原因

仔细一想,肯定是混淆引起的问题。**原来,所有json对应的实体类都要在混淆文件中设置忽略**,不然在进行json转换的时候,转换后的数据都是为null。

3、解决方法

在proguard-rules.pro混淆文件中所有jackson对应实体类都要声明不能混淆。 举个栗子:我的实体类都放在这个目录下

Debug签名时候数据正常正式签名的时候数据不正常,不显示,或者数据错乱问题_第1张图片

那么我就在混淆规则文件中设置忽略该目录下所有文件 ,设置如下
Debug签名时候数据正常正式签名的时候数据不正常,不显示,或者数据错乱问题_第2张图片

4、关于混淆规则文件


#指定代码的压缩级别
-optimizationpasses 5

#包明不混合大小写
-dontusemixedcaseclassnames

#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses

#优化 不优化输入的类文件
-dontoptimize

#预校验
-dontpreverify

#混淆时是否记录日志
-verbose

混淆时所采用的算法

-optimizations !code/simplification/arithmetic,!field/,!class/merging/

#保护注解
-keepattributes Annotation

保持哪些类不被混淆

-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
#如果有引用v4包可以添加下面这行
-keep public class * extends android.support.v4.app.Fragment

#忽略警告
-ignorewarning

##记录生成的日志数据,gradle build时在本项目根目录输出##
#apk 包内所有 class 的内部结构
-dump proguard/class_files.txt
#未混淆的类和成员
-printseeds proguard/seeds.txt
#列出从 apk 中删除的代码
-printusage proguard/unused.txt
#混淆前后的映射
-printmapping proguard/mapping.txt
########记录生成的日志数据,gradle build时 在本项目根目录输出-end######

#如果引用了v4或者v7包
-dontwarn android.support.**

####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####

#保持 native 方法不被混淆
-keepclasseswithmembernames class * {
native ;
}

#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
}

#保持自定义控件类不被混淆
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

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

#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable

#保持 Serializable 不被混淆并且enum 类也不被混淆
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient ;
!private ;
!private ;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

#保持枚举 enum 类不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keepclassmembers class * {
public void *ButtonClicked(android.view.View);
}

#不混淆资源类
-keepclassmembers class *.R$ {
public static ;
}

#避免混淆泛型 如果混淆报错建议关掉
#-keepattributes Signature

#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
#-assumenosideeffects class android.util.Log {

public static *** v(…);

public static *** i(…);

public static *** d(…);

public static *** w(…);

public static *** e(…);

#}

#############################################################################################
######################## 以上通用 ##################################
#############################################################################################

####################### 常用第三方模块的混淆选项 ###################################
#gson
#如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。
-keepattributes Signature

Gson specific classes

-keep class sun.misc.Unsafe { *; }

Application classes that will be serialized/deserialized over Gson

-keep class com.google.gson.** { ; }
-keep class com.google.gson.stream.
* { *; }

#mob
-keep class android.net.http.SslError
-keep class android.webkit.{*;}
-keep class cn.sharesdk.
{;}
-keep class com.sina.**{
;}
-keep class m.framework.**{*;}
-keep class *.R ∗ ∗ ; − k e e p c l a s s ∗ ∗ . R ∗ ; − d o n t w a r n c n . s h a r e s d k . ∗ ∗ − d o n t w a r n ∗ ∗ . R * {*;} -keep class **.R{*;} -dontwarn cn.sharesdk.** -dontwarn **.R ;keepclass.R;dontwarncn.sharesdk.dontwarn.R

#butterknife
-keep class butterknife.** { ; }
-dontwarn butterknife.internal.
*
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
@butterknife.* ;
}

-keepclasseswithmembernames class * {
@butterknife.* ;
}

######引用的其他Module可以直接在app的这个混淆文件里配置

如果使用了Gson之类的工具要使被它解析的JavaBean类即实体类不被混淆。

-keep class com.matrix.app.entity.json.** { ; }
-keep class com.matrix.appsdk.network.model.
* { *; }

#####混淆保护自己项目的部分代码以及引用的第三方jar包library#######
#如果在当前的application module或者依赖的library module中使用了第三方的库,并不需要显式添加规则
#-libraryjars xxx
#添加了反而有可能在打包的时候遭遇同一个jar多次被指定的错误,一般只需要添加忽略警告和保持某些class不被混淆的声明。
#以libaray的形式引用了开源项目,如果不想混淆 keep 掉,在引入的module的build.gradle中设置minifyEnabled=false
-keep class com.nineoldandroids.** { ; }
-keep interface com.nineoldandroids.
* { ; }
-dontwarn com.nineoldandroids.
*

下拉刷新

-keep class in.srain.cube.** { ; }
-keep interface in.srain.cube.
* { ; }
-dontwarn in.srain.cube.
*

observablescrollview:tab fragment

-keep class com.github.ksoichiro.** { ; }
-keep interface com.github.ksoichiro.
* { ; }
-dontwarn com.github.ksoichiro.
*

-keepclassmembers class rx.internal.util.unsafe.ArrayQueueField* {
long producerIndex;
long consumerIndex;}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

json 对应的实体类不混淆

-keep class com.cocospy.jsonEntity.** {*;}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203

更多关于混淆的相关内容的参考文章:

  • 推荐一个大神博客

  • 传送门

    作者:王宗耀 欢迎转载,与人分享是进步的源泉!
    转载请保留原文地址:http://blog.csdn.net/wzy901213

    在这里插入图片描述

            

    Android Studio 代码混淆(你真的会混淆吗)

    04-18 3.4万

    一、前言今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆。二、Android Stu... 来自: Two_Water

    Android如何优雅地防止Bean类混淆

    11-27 4656

    相信大家在开发Android app都会遇到一个问题:在打release包时bean类常常被混淆,导致出现空指针进而引发crash;

    如何做到保持指定的类不被混淆?方案不止一个,

    1、 在混淆配置…

    来自: dbs1215的专栏



    		
    
    
        
    		

    今天测试人员提了一个bug,说使用我们的app出现了闪退的bug,后来通过debug断点调试,发现我们的app转换服务器发送过来的json数据后,都是为null。而之前已经提测快一个…

    来自: 欧阳鹏



    
    			
    			
        
    		

    1.没使用打包签名和混淆之前使用fastjson解…

    来自: u014168208的博客



    		
    
    
        
    		

    这阵子自己的心又长草了,静不下来又挺迷茫的!在这个纷纷跳槽的季节,感觉还是应该让自己静下心来多学习学习。还是写写博客,总结总结梳理下心里的野草。

    上个月跟朋友讨论了这么一问题:“项目上线…

    来自: 追求,成长



    		

           1.首先,project.properties里的配置文件变了,之前的项目一直都是在project.properties这个文件中添加一行p…

    来自: forever_crying的专栏



    		
    
    
    股王经典口诀,涨三不追,跌四不压…看完恍然大悟 潮望 · 燨燚
    		
    
    
    		
        
    		
    
    
              
    天一方蓝关注
    天一方蓝

    171篇文章

    排名:5565

    CrazyCodeBoy关注
    CrazyCodeBoy

    192篇文章

    排名:1424

    一叶飘舟关注
    一叶飘舟

    1431篇文章

    排名:28

    Android女孩关注
    Android女孩

    39篇文章

    排名:65280

          一般以下情况都会不混淆:

          1.使用了自定义控件那么要保证它们不参与混淆

          2.使用了枚举要保证枚举不被混淆

         3.对第三方库中的类不…

    来自: csdnwr的博客



    		
    
    
        
    		
    
    
    新人到底应该怎么学习网赚方法,快来看看! 承运 · 燨燚
    		
    
    
        
    		

    [html] view plain copy
    Can not instantiate value of type [map type; class java.util.H…

    来自: u012922706的博客



    		

    在测试环境中数据正常,说明我写的代…

    来自: lzc394049722的博客



    		
    
    
        
    		

    cast to XXXXX

    这时候我们把转换的语句加上一个他的cla…

    来自: sinat_28761919的博客



    12月起,深圳有一种学历叫免考本科,短学制毕业,毕业就是本科 佰昊贸易 · 燨燚
    		
    
    
        
    		

    通常开发场景:新的需求到来,产品经理整理好产品模型,召集后台,移动组(Android/iOS),UI设计师,测试开会,之后排开发时间。UI设计师先行(设计图),后台抓数据,
    移动组记时间是在…

    来自: 行动者&&职业化



    		

    跟内涵段子项…

    来自: z240336124的专栏



    		
    
    
        
    		

    解决在混淆中添加如下:
    -keepattr…

    来自: 学习是修养的提升



    新推出的赚钱方法, 原来是这样赚到钱的! 洪旺鑫业 · 燨燚
    		

    比如:**a(SourceFile:) NullPointerException **

    针对这种情况,可以通过抓U…

    来自: yabin的专栏



    		

    import java.lang.reflect.Type;
    import java.u…

    来自: jxf_access的专栏



    		
    
    
        
    		

    这个问题说明,实体类对象包含另外一个实体类的对象,并且形成了循环引用。…

    来自: ccsu_001的专栏



    		

     

    作者 红橙Darren 关注

    2017.02.03 10:41* 字数 1122 阅读 14963评论
    134喜欢 278赞赏 13



    来自: 一小沫一博客



    白发千万不要染,饭后一件事,想要多黑就多黑 龙莲商贸 · 燨燚
    		

    需要在gradle中配置下面的代码,原因是引用了多个libraries文件


    来自: li15225271052的博客



    		

    1、安装方式
    方法一:

    1.Andr…

    来自: 雨打芭蕉的博客



    		

    使用的時候如果出現debug好好的,不混淆的時候也好好的,一混淆就出現各種問題,如果定位到是fastjson到…

    来自: p522947409的专栏



    		



    来自: u011275767的专栏



    		

    保证关键代码不会不被混淆导致出错。#retrofit2 混淆
    -dontwarn javax.annotation.**
    -…

    来自: zhanglinlang的专栏



    明明已经按照gson的官方文档,把混淆脚本加上去了,却还是出问题。
    今天同事找到一篇博客,关于这个问题的:


    来自: Liuqz2009的专栏



    		

    之前作者开发过很长一段时间安卓,由于兴趣原因转向其他技术,最近需要安卓进行相关开发,故捡回来看看。本文主要介绍json与实体之间如何映射

    1.前期准备

    创建Person对象

    pa…

    来自: 汪喆_Jack的博客分享



    		

    Android接口返回的数据都是json的String对象,Gson封装了映射功能,网络请求的Volley框架请求也是用到了Gson的映射原理:
    实体类:
              先建一个实体类…

    来自: 努力的小笨



    		
    1. 下载安装GsonFormat插件

    2.快捷键alt+…

    来自: xiaoguiyixue的博客



    幸好在深圳!深圳面向低学历上班族开放1.5年自考升本科通道 爱华国际 · 顶新
    		

    问题就是直接运行没什么问题,但是打包给测试测就会出现json解析错误。
    由此可见应该是打包混淆的时候出了问题。
    检查了一下实体类,都在一个文件下下,都保持了…

    来自: 小可



    		

    1.在Android Studio中点击左上角菜单栏中的File,然后点击Settings,…

    来自: 背包客孔明先生



    		
    
    
        
    		
    
    
        
    		
    
    

    width="962" height="73" vspace="0" hspace="0" scrolling="no" allowfullscreen="true" id="aswift_0">

    			
    
    
        
    		

    在开发过程中拿到服务器穿来的json字符串需要解析成Bean对象方便我们使用,自己写bean又太麻烦
    经过这么长时间的Android开发,我收集了三种比较常用的通过json自动生成Bea…

    来自: charay的博客



    		

    layout: post
    title: JSON、实体类、列表转换
    subtitle: JSON、实体类、列表转换
    date: 2018-11-3
    author: …

    来自: 雷园的博客



    		

    安装方法:
    1.Android studio 
     …

    来自: u011412972的博客



    		
    
    

    width="962" height="93" vspace="0" hspace="0" scrolling="no" allowfullscreen="true" id="aswift_1">

    		

    controller 返回 geometry 字段报错

    Infinite recursion (StackOverflowError) 

     

    (through reference chai…

    来自: bitree1的博客



    		
    
    
        
    		

    一、前言

            上一章节我们说的是swagger-ui也就是swagger1,接下来我们说的是swagger升级版swagger2

        …

    来自: 愤怒的懒洋洋的博客



    		
    
    
        
    		

    转载请标明出处: http://blog.csdn.net/forezp/article/details/70148833
    本文出自方志朋的博客

    错过了这一篇,你可能再也学不会 Sp…

    来自: 方志朋的专栏



    		

    方法一:(更新时间:2018/4/8)v3.3

    注册时,在打开的Lice…

    来自: 唐大帅的编程之路



    		

    下载地址https://s3.amazonaws.com/psiphon/web/mjr4-p23r-puwl/zh/download.html#direct

     …

    来自: www.mayixiaocao.cn



    		
    
    
        
    		

    因公司的需求,需要做一个爬取最近上映的电影、列车号、航班号、机场、车站等信息,所以需要我做一个爬虫…

    来自: 昌昌



    		
    
    
        
    		

    现在越来越流行在线看视频了,但是对于我得收藏癖爱好者,还是希望可以有比较好的资源网站的,尤其是种子、磁力链网站。所以就整理了一份干净、好用的TOP10出来:

    先推荐一个下载磁力链的工具:

    马…

    来自: YXAPP的技术分享



    		
    
    
        
    		
    
    
        
    		

    vue-cli3脚手架/单文件/环境搭建。vue3.x版本相对于2.x版本做了许多地方的优化,个人总结主要还是使用上使开发者更加一目了然,配置起来也更加的方便,减少了各种webpack里面的lo…

    来自: 欢迎来到☆槿畔☆的博客



    		

    1.1 解释:当一次服务调用失败后,不会立即抛出异常,而是再次重试另一个服务。
    1.2 实现步骤:

    在服务调用端配置文件中开启重试机制

    spring:
    cloud…

    来自: 猪精的博客



    		

    一、前言

            MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置…

    来自: 愤怒的懒洋洋的博客



    		

    一、前言

            Sql是最重要的关系数据库操作语言,现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。

            但是Sql对表的操作…

    来自: 愤怒的懒洋洋的博客



    		
    
    
        
    		

    一、前言

    Sql是最重要的关系数据库操作语言,现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。

    我们常用的sql关键字不外乎 group by…

    来自: 愤怒的懒洋洋的博客



    		
    
    
        
    		

    V2.6B4 绿色版人气:42008
    下载

    Microsoft Toolkit(Win10激活工具/…

    来自: 老K的博客



    		

    最新版的Proxyee-down为3.12(2018.10更新),因为作者在3.x后的版本中并未发布exe版…

    来自: shadandeajian的博客



    		

    1
    【单选题】我国陆地领土面积排名世界第几?(C)
    A、1
    B、2
    C、3
    D、4
    2
    【单选题】以下哪个国家不属于金砖五国(BRICS)?(B)
    A、中国
    B、日本
    C…

    来自: ling_wang的博客



    		

    思路就是1.获得点击左键时当前鼠标的坐标 2.获得移动后鼠标的坐标 3.窗体的坐标=移动后的鼠标坐标-移动前的鼠标坐标

    pr…

    来自: Maybe_ch的博客



    		

    问题总结:
    在Windows平台下如果PHP使用的是IIS的话那么php在上传文件时是先将文件上传到一个临时目录下的


    来自: psw的博客



    		
    
    
        
    		

    这个星期装服务器,搞了一个集群,服务器是双网卡,一个网卡连外网222开头,一个网卡连内网192开头,在系统等一切都安全成功,网络配置成功之后,奇怪的事情发生了,内网内任意一台…

    来自: u013042928的博客



    		
    
    
        
    		
    来自: cong666的博客
    		

    *创建型模式(4种):工厂方模式,单例模式,建造者模式,原型模式
    *结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式


    来自: Armymans的博客



    		
    
    
        
    		
    
    
        
    		

    百度网盘不限速 点击下载 提取码:jsk0
    对于大多数人来说,每次在百度网盘下载东西的时候总会被限速,如果不想被限速就要充值百度网盘的SVIP,…

    来自: qq_41925894的博客



    		

    下载OTP工具
    首先到Office Too…

    来自: 过了即是客



    		

    2018年的到来还伴随着GFW的全面升级,不少装有ssr的境外vps被大量屏蔽,搬瓦更是重灾区,而V2ray是新一代的科学上网神器。

    一. 下载与安装V2…

    来自: xuhuo的博客



    		

    DirectX修复工具最新版:DirectX Repair V3.7 增强版  NEW!

    版本号:V3.7.0.26539

    大小: 107MB/7z格式压缩,18…

    来自: VBcom的专栏



    		

    1
    【单选题】中国哪个历史时期的国防是“变法图强,改革军制;奖赏军功,百家论兵”?()
    A、元朝时期
    B、先秦时期
    C、清朝时期


    来自: ling_wang的博客



    		
    
    
        
    		

    我也有幸…



    		

    近日恰逢双十一,瞅了瞅自己干瘪的钱包,没忍心入手期待已久的 macPro,只好在虚拟机里玩一下 mac好了,等以后钱包傲气的时候再来个真实的。
    安装环境:
    windows10 VM…

    来自: u011415782的专栏



    		
    
    
        
    
    
            

    没有更多推荐了,返回首页

    你可能感兴趣的:(【Android,进阶部分】)