Android 混淆proguard的实现(图文)
1、 在Eclipse中的project编译执行后,在文件夹bin以下有生成一些文件,当中classes.dex是未经过混淆生成的。而我们要混淆的话,就要又一次生成一个混淆过的classes.dex。本文主要讲如何手动生成混淆proguard。
2、 生成一个混淆过的classes.dex:要先对文件夹bin以下的classes文件夹(在Eclipse中看不到,系统文件管理中可查看)的class文件打包成jar, 再对jar进行proguard混淆,混淆后再用android
dx 命令生成混淆的classes.dex。
3、 class文件打包成jar:控制台CMD进入classes文件夹,调用jar
cvfM classes.jar android cn com,当中classes.jar是你要生成的jar包名称,android cn com 是指classes以下的文件夹
4、 对jar进行proguard混淆,首先确定你的project已经有混淆文件proguard.cfg。在android
sdk文件夹下找到:C:\android-sdk-windows\tools\proguard\bin\proguardgui.bat。

在InputOutput选项中,选择你的Add input…文件,上面打好的classes.jar,Add
output命名你的输出混淆jar包(classes_out.jar),在Library jars,wars,ears,zips and directories一栏中Add进你选择编译的android
sdk版本号源包(C:\android-sdk-windows\platforms\android-7\android.jar),再加入你的project中libs引用的第三方jar。
点击“process”,再点击“save configuration”,在弹出的对话框中,输入要保存的配置文件名(这里我的是test.pro),最后点击“保存”。

用编辑器编辑刚才保存下来的“test.pro”,用记事本什么都能够。要里面有关的proguard信息替换成你project中定好的proguard.cfg内容,保存。
又一次打开progrard,运行 bin文件夹下的proguardgui.bat。
点击第一个选项“Proguard”,再点击“Load configuration”,选择我们刚才保存的“test.pro”进行载入。

開始混代码,点击右边“process”,再点击“process!”
在等待处理完毕后,输出的“classes_out.jar”,就是混过的jar包。
以上有关使用proguardgui.bat的參照自:http://java-server.iteye.com/blog/1166114
5、 对已经混淆的classes_out.jar包,放进project的bin文件夹下,生成classes.dex。
//android sdk文件夹下的platform-tools\dx.bat
事实上也能够直接用我之前公布的打包工具中的createUnsignedApk这种方法。
參看:http://blog.csdn.net/hytfly/article/details/24458133
这样生成classes.dex然后在签名打包的,就是混淆以后的代码了。
6.为了方便,事实上能够自己也写到那个打包工具中去打包。自己生成classes.jar和out.jar,然后再自己主动打包。分享两个方法:
/**
* 在bin下生成纯净的classes.jar文件
*/
public static void createJar(){
try{
System.out.println("create jar start");
Process process = null;
String cmd;
//相当于先cd到 -C的文件夹下,然后执行没有C的这部分语句,注意.代表当前文件夹
cmd = "cmd.exe /C jar cvf "+PROJECT_PATH+"bin\\classes.jar "
+"-C "+PROJECT_PATH+"bin\\classes .";
System.out.println(cmd);
process = Runtime
.getRuntime()
.exec(cmd); // 生成jar文件
new MyThread(process.getErrorStream()).start(); new MyThread(process.getInputStream()).start();
process.waitFor();
process.destroy();
System.out.println("create jar over"); // 一条渠道的打包完毕。文件会输出到指定文件夹
}catch(Exception e){
e.printStackTrace();
System.exit(0);
}
} /**
* 在bin下生成混淆后的classes_out.jar文件(在PROGUARD_PATH配置文件里写)
* 执行proguard程序假设报错,请在cmd查看错误,可能是路径问题,自己改动proguard.bat文件
*/
public static void createProguardJar(){
try{
System.out.println("create ProguardJar start");
File file=new File(PROGUARD_PATH);
if(!file.exists()) System.out.println("not found "+PROGUARD_PATH);
file=new File(PROJECT_PATH+"bin\\classes_out.jar ");
if(file.exists()) file.delete();
Process process = null;
String jarsigner;
jarsigner = androidSDK_PATH+"tools\\proguard\\bin\\proguard.bat " +
"-include "+PROGUARD_PATH;
System.out.println(jarsigner);
process = Runtime
.getRuntime()
.exec(jarsigner); // 生成混淆后的jar文件
new MyThread(process.getErrorStream()).start(); new MyThread(process.getInputStream()).start();
process.waitFor();
process.destroy();
System.out.println("create ProguardJar over");
}catch(Exception e){
e.printStackTrace();
System.exit(0);
}
}
再分享一下proguard.pro配置文件的一些方法:http://blog.csdn.net/yunyu5120/article/details/13024359 这个老兄写的ok了。
Android 混淆proguard的实现(图文)的更多相关文章
- 转:Android 2.3 代码混淆proguard技术介绍
ProGuard简介 ProGuard是一个SourceForge上非常知名的开源项目.官网网址是:http://proguard.sourceforge.net/. Java的字节码一般是非常容易反 ...
- Android Java混淆(ProGuard)
本文转载别人博客,转载请注明出处:http://www.blogjava.net/zh-weir/archive/2011/07/12/354190.html ProGuard简介 ProGuard是 ...
- android混淆那些事
写给Android开发者的混淆使用手册 综述 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆. 首先,这里说的的混淆其实是包括了代码压缩.代码混淆以及 ...
- 使用Android Studio搭建Android集成开发环境(图文教程)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android混淆打包配置总结
Android打包失败出现Proguard returned with error code 1. See console的错误 这个问题是由于代码混淆引起的,找不到引用包. 只需在你的proguar ...
- Android混淆那些事儿
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园:追风917 # Android混淆 Android混淆是Android开发者经常使用的一种用于代码防止被反编译的 ...
- Android混淆、反编译以及反破解的简单回顾
=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...
- Android 混淆那些事儿
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/WmJyiA3fDNriw5qXuoA9MA 作者:l ...
- Android 混淆代码有关问题总结
Android 混淆代码问题总结 Android 混淆代码: 最快的方式: 1. 首先更新Android的SDK至最新版本,重新建立1个工程,把源码和资源及其他文件拷到新的工程里面. 2. 工程目录底 ...
随机推荐
- Linux 技巧之 Grub 超实用技巧
1. 简单介绍 什么是 GRUB?GRUB 全名Grand Unified Boot Loader,它是一个引导装入器 -- 它负责装入内核并引导 Linux 系统.GRUB 还能够引导其他操作系统, ...
- 什么是Java “实例化”
实例化:对象也是引用数据类型,只能使用new运算符从堆中分配内存: 使用已经定义好的类,创建该类对象的过程称为“实例化”. 只有先实例化类的对象,才可以访问到类中的成员(属性和方法). 使用成员运算符 ...
- 找工作笔试面试那些事儿(8)---常问的CC++基础题
这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...
- Leetcode_num13_Climbing Stairs
称号: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...
- SVNKIT的low api应用之修改库中文件内容(File modification)
最近在做一个仓库管理系统,架构在svn之上.要求每一项操作要记录在log文件中,弄了很久起初感觉无法向库中的文本文件添加东西,就是修改库中的文本文件.于是采用了一个很笨的办法: 现将库中的log ...
- 开放源代码的微微信.NET 0.8 版公布了
微微信.NET 0.8 版公布了 A.源代码应用范围: 未认证的和经过认证的微信订阅号.微信服务号均可使用,本源代码的每个模块都提供全然的 ASP.NET C#源代码,绝对不含 ...
- FMOD在Android玩音响系统的抖动问题
1. 基本介绍 在Android升级系统Android4.4之后,发现FMOD在Android音会出现抖动.导致声音不正常.边赫赫有名的"极品飞车"都有问题. 经查验,是FMOD的 ...
- C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象
重载操作符与转换 --调用操作符和函数对象 引言: 能够为类类型的对象重载函数调用操作符:一般为表示操作的类重载调用操作符! struct absInt { int operator() (int v ...
- 如何让HTML在手机上实现直接拨打电话以及发送短信?
拨打电话的HTML实现方式: <a href="tel:134289210xx″>拨打电话</a> 上面是比较常用的方式,但是有可能在某些场景下是支持不太好,可以试用 ...
- 让CentOS系统时间同步
CentOS系统时间同步的步骤如下: 新装的CentOS系统服务器可能设置了错误的,需要调整时区并调整时间. 如下是CentOS系统使用NTP来从一个时间服务器同步cp /usr/share/zone ...