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代码混淆及调试错误「建议收藏」

 

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

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

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

(0)
上一篇 2022年5月30日 上午9:46
下一篇 2022年5月30日 上午10:00


相关推荐

  • scanf 函数的返回值

    scanf 函数的返回值1 scanf 函数是有返回值的 它的返回值可以分成三种情况 1 正整数 表示正确输入参数的个数 例如执行 scanf d d amp a amp b 如果用户输入 34 可以正确输入 返回 2 正确输入了两个变量 如果用户输入 3 4 可以正确输入 a 无法输入 b 返回 1 正确输入了一个变量 2 0 表示用户

    2026年3月18日
    2
  • 利用python建立股票量化交易系统(一)——小市值选股票模型[通俗易懂]

    利用python建立股票量化交易系统(一)——小市值选股票模型[通俗易懂]从今天开始正式开启我的博客之旅,博客内容全部是我自己的量化心得,主要还是为自己将来中工作之中遇到相似问题,可以方便的找到答案,如果能帮到有相似问题的其他同学,我也很开心,如果帮不到的话,不喜勿喷,如果文章中有什么不对的地方,欢迎批评指正。建立第一个简单的量化模型——小市值选股票模型。思路:在A股市场之中,在每个月月底的时候,按照市值排名,选择最小市值的10只股票买入,持有到下个月月底…

    2022年6月26日
    87
  • Python游戏编程(Pygame)

    Python游戏编程(Pygame)安装PygamepipinstallpygameC:\Users&amp;amp;amp;gt;pipinstallpygameCollectingpygameDownloadinghttps://files.pythonhosted.org/packages/3e/f5/feabd88a2856ec86166a897b62…

    2022年6月21日
    26
  • 转一篇难得的好文章-CPU流水线的探秘之旅

    转一篇难得的好文章-CPU流水线的探秘之旅作为程序员,CPU在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。  CPU是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到些都意味着什么呢?  应用程序通常会将CPU看作是黑盒子。程序中的指令按照顺序依次进入CPU,执行完之后再按顺序依次从C

    2022年8月20日
    17
  • pycharm下方的菜单栏被隐藏,如何重新找到「建议收藏」

    pycharm下方的菜单栏被隐藏,如何重新找到「建议收藏」直接看图,这个的这个小图标位于整个pycharm页面的左下角,点击之后就会隐藏,如下图有一个坑就是,当刚打开或者当某些进程再进行时,这个图标会被暂时隐藏,所以想要把这个下方的快捷菜单栏找回会,得等这个进程结束才能看到…

    2022年8月27日
    5
  • Google云盘的使用「建议收藏」

    Google云盘的使用「建议收藏」GoogleColab简介(参考链接)GoogleColaboratory是谷歌开放的一款研究工具,主要用于机器学习的开发和研究。这款工具现在可以免费使用,但是不是永久免费暂时还不确定。Goog

    2022年8月1日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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