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)


相关推荐

  • 2019-10-30-C#-dotnet-core-局域网组播方法「建议收藏」

    2019-10-30-C#-dotnet-core-局域网组播方法「建议收藏」titleauthordateCreateTimecategoriesC#dotnetcore局域网组播方法lindexi2019-10-309:0:48+08002019-10-2912:2:46+0800dotnetC#我在微软官网找到了用…

  • mac如何查看已连接wifi的密码「建议收藏」

    mac如何查看已连接wifi的密码「建议收藏」可以通道mac自带的“钥匙串访问”功能查看。选择需要查询的wifi名称,右击选择“将密码拷贝到剪贴板”,输入管理员密码后,密码就拷贝好了。找个地方粘贴即可看到密码

  • linux设置文件权限777_linux目录详解

    linux设置文件权限777_linux目录详解Linux、Fedora、Ubuntu修改文件、文件夹权限的方法差不多。很多人开始接触Linux时都很头痛Linux的文件权限问题。这里告诉大家如何修改Linux文件-文件夹权限。以主文件夹下的一个名为“cc”的文件夹为例。下面一步一步介绍如何修改权限:1.打开终端。输入”su”(没有引号)2.接下来会要你输入密码,输入你的root密码。3.假设我的文件夹在主目录里,地址为/var/home/d…

  • Window永久关闭默认共享

    windows默认共享你如果是在这里关闭的,开机之后默认共享文件夹又是打开的。管理工具—计算机管理—共享文件夹–共享下面介绍一种简单的永久关闭默认共享文件夹。1.找到window的开机自启动文件夹,注:这是所有用户登录都会开机自启动文件夹。C:\ProgramData\Microsoft\Windows\StartMenu\Programs\StartUp2.创建一个bat脚本,然后开机就能自动关闭默认共享文件夹。…

  • python机器学习库sklearn——Lasso回归(L1正则化)

    python机器学习库sklearn——Lasso回归(L1正则化)全栈工程师开发手册(作者:栾鹏)python数据挖掘系列教程TheLasso是估计稀疏系数的线性模型。它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少给定解决方案所依赖变量的数量。因此,Lasso及其变体是压缩感知领域的基础。在一定条件下,它可以恢复一组非零权重的精确集。在数学公式表达上,它由一个带有ℓ1\ell_1先验的正则项的线性模型组成。

  • 巧用ISAPI_Rewrite规则写IIS防盗链

    巧用ISAPI_Rewrite规则写IIS防盗链巧用ISAPI_Rewrite规则写IIS防盗链关键是httpd.ini的设置首先,必须要保证httpd.ini有可写权限,设置isapi_rewrite安装文件夹IIS_来宾,IIS_进程读写权限。httpd.ini默认设置如下:RewriteCondHost:(.+)RewriteCondReferer:(?!http:///1.*).*我们在它后面加上一句Rewr

发表回复

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

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