Android代码混淆及调试错误「建议收藏」

Android代码混淆及调试错误「建议收藏」Android代码混淆及调试错误

大家好,又见面了,我是你们的朋友全栈君。

Android代码混淆及调试错误

 

以下是自己实践代码混淆的步骤,记录下来免得以后忘了

 

代码混淆需要对apk进行签名,签名后才是混淆过的(前提是已经放开代码混淆配置,详见以下步骤),直接从eclipse项目bin下拷贝的apk是没有进行混淆的。

 

1.    创建签名秘钥(我用的是eclipse,用UI创建签名秘钥,网上也有用命令方式创建的)

在eclipse自己的项目中右键,选择Export,选择Export Android Application,点击下一步

 Android代码混淆及调试错误「建议收藏」

选择导出的项目, 下一步

Android代码混淆及调试错误「建议收藏」

 

创建个新的签名秘钥, 记住密码及存储位置

 Android代码混淆及调试错误「建议收藏」

填写相应信息

 Android代码混淆及调试错误「建议收藏」

 

填写签名后输出的文件,点击finish完成

Android代码混淆及调试错误「建议收藏」

 

2.    放开混淆及配置混淆脚本

新建的android项目都带有project.properties及proguard-project.txt

文件。默认是不混淆代码的。

Android代码混淆及调试错误「建议收藏」 

把project.properties文件中”#proguard.config=…”的#去掉,即放开代码混淆,=号后的路径改成自己项目路径

Android代码混淆及调试错误「建议收藏」

 

这是我的配置

Android代码混淆及调试错误「建议收藏」

 

 

接下来就是更改混淆配置文件了(proguard-project.txt)

在eclipse中新建项目自带的混淆配置文件如下:基本上为空

Android代码混淆及调试错误「建议收藏」

于是我顺着

${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

在Android SDK路径下拷贝了个proguard-project.txt,替换了自带的(挺全)

 Android代码混淆及调试错误「建议收藏」

 

       然后网上查了半天:再加入下边这些配置

-dontpreverify

 

 

-ignorewarnings 

-libraryjars libs/android-support-v4.jar

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }

-keep interface android.support.v4.app.** {*; }

-keep public class * extendsandroid.support.v4.**

-keep public class * extendsandroid.app.Fragment

 

 

-dontwarn com.alibaba.fastjison.**

 

#用于在模拟器中运行加密后apk时,出错情况在Logcat下显示源代码行号

-renamesourcefileattribute SourceFile

-keepattributes SourceFile,LineNumberTable

 

-libraryjars libs/fastjson-1.1.41.jar

-libraryjars libs/mframework.jar

-libraryjars libs/ShareSDK-Core-2.5.8.jar

-libraryjars libs/ShareSDK-QQ-2.5.8.jar

-libraryjars libs/ShareSDK-QZone-2.5.8.jar

-libraryjarslibs/ShareSDK-ShortMessage-2.5.8.jar

-libraryjarslibs/ShareSDK-SinaWeibo-2.5.8.jar

-libraryjarslibs/ShareSDK-TencentWeibo-2.5.8.jar

-libraryjars libs/ShareSDK-Wechat-2.5.8.jar

-libraryjarslibs/ShareSDK-Wechat-Core-2.5.8.jar

-libraryjarslibs/ShareSDK-Wechat-Moments-2.5.8.jar

-libraryjars libs/xcl-charts.jar

 

-keep class com.alibaba.fastjson.**{*;}

-keep class org.xclcharts.**{*;}

-keep class cn.sharesdk.**{*;}

-keep class com.xxxxx.android.entity.**{*;}

-keepattributes Signature

 

用到的第三方库用-libraryjars声明,并且-keep声明不混淆这第三方库,还有就是用到的javabean类最好别混淆(我全放开了-keep class com.xxxxx.android.entity.**{*;}),还有-keepattributes Signature可以保持javabean类中的容器类型成员在混淆后,依然保持原样。如:

原始代码:

public classChartEntity {

       private String  chartTitle;              //图表标题

       private String  chartSubTitle;      //图表子标题

       private int       chartType;        //图表类型

       private ArrayList<String> labels; 

       private ArrayList<DataSeries>series;      

       private double  totalMaxData;

       private double  totalMinData;

}

 

没加-keepattributesSignature混淆后:

public classChartEntity {

       private String  chartTitle;              //图表标题

       private String  chartSubTitle;      //图表子标题

       private int       chartType;        //图表类型

       private ArrayList    labels;      

       private ArrayList    series;      

       private double  totalMaxData;

       private double  totalMinData;

}

类型不见了,在转换的时候,以至于程序奔溃了。(我是这么解决的,不知道还有其他办法解决javabean类混淆后程序类型转换时报错)

 

 

3.     签名并混淆

一开始自己并不知道放开哪些类(即保持哪些类不混淆),反正签名混淆后,一步一步调出来的(详见步骤4)。

配置好混淆脚本后

在eclipse项目上右键—export,选择导出android应用程序

Android代码混淆及调试错误「建议收藏」

 

选择上边建立的keystore,输入密码,下一步

 Android代码混淆及调试错误「建议收藏」

Android代码混淆及调试错误「建议收藏」

 

最后finish即可,签完名后的就是混淆后的,用反编译工具试了,确实混淆了。

Android代码混淆及调试错误「建议收藏」

 

 

 

4.     混淆后排错

网上查了半天,不知道怎么混淆后排错。以下是我的办法,不知道别人是怎么混淆后调试的。

 

安装混淆后的apk至模拟器,在logcat里查错。

打开eclipse, 开启一个模拟器,并将混淆后的apk放置Android SDK的platform-tools路径下(C:\android-sdk-windows\platform-tools),在cmd下执行命令:adbinstall xxxx.apk进行安装,安装后,运行app即可,如果程序报错,应该在logcat中有输出,但是输出的是混淆后的信息。

混淆后在eclipse下会多出proguard目录,里边有混淆的映射关系记录,利用SDK自带的工具proguardgui.bat(C:\android-sdk-windows\tools\proguard\bin),可以将logcat下出错堆栈信息翻译成源码情况下的堆栈信息。Logcat下信息可以多选,上边有导出按钮(将出错信息前的时间去掉,不然proguardgui好像识别不出来)。

Android代码混淆及调试错误「建议收藏」

 Android代码混淆及调试错误「建议收藏」

 

我就是这样一步步排错的。估计还有更好的办法吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139184.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • MySQL常见约束条件「建议收藏」

    MySQL常见约束条件「建议收藏」约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败!约束条件在创建表时可以使用,也可以修改表的时候添加约束条件1、约束条件分类:1)notnull:非空约束,保证字段的值不能为空s_nameVARCHAR(10)NOTNULL,#非空2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!…

    2022年10月13日
  • Eclipse汉化教程以及问题解决[通俗易懂]

    Eclipse汉化教程以及问题解决[通俗易懂]Eclipse汉化教程以及问题解决一.汉化过程1、打开eclipse文件夹内的文件readme/readme_eclipse查看该文件版本号。eg:我安装的是Release4.5.0版本号为4.5安装的是eclipse-jee-mars-1-win32-x86_64    进入到eclipse安装目录下,有一个.eclipseproduct文件,用记事本打开,就…

  • H3C交换机常用命令大全

    H3C交换机常用命令大全一.用户配置:system-view[H3C]superpasswordH3C设置用户分级密码[H3C]undosuperpassword删除用户分级密码[H3C]localuserbigheap1234561Web网管用户设置,1(缺省)为管理级用户,缺省admin,admin[H3C]undolocaluserbigheap删…

  • 配置NFS固定端口[通俗易懂]

    配置NFS固定端口[通俗易懂]NFS启动时会随机启动多个端口并向RPC注册,为了设置安全组以及iptables规则,需要设置NFS固定端口。NFS服务需要开启mountd,nfs,nlockmgr,portmapper,rquotad这5个服务,其中nfs、portmapper的端口是固定的,另外三个服务的端口是随机分配的,所以需要给mountd,nlockmgr,rquotad设置固定的端口。其中,给mountd、rq…

  • excel如何合并相同项单元格内容_不能对合并单元格部分更改

    excel如何合并相同项单元格内容_不能对合并单元格部分更改工作中可能想要快速的实现将Excel相同项目单元格合并,下面就跟大家简单地介绍一下。1.如下图F列中含有很多相同项,现在我们想要将这些相同项目单元格合并。2.首选我们选中F列数据单元格区域3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信息,本文这里就不做详细解说。)4.然后选择【合并转换】,【合并相同单元格】5.勾选【列方向】6.最后点击【确定】即可完成7完成效果如下图所示

  • 海思android4.4 SDK编译Latin输入法[通俗易懂]

    海思android4.4 SDK编译Latin输入法

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号