代码混淆说简单的其实就是为了防止别人反编译你的源代码,因为JAVA程序比较容易被反编译,所以如果程序中有一些比较重要的逻辑的话,通过代码混淆来处理的确可以阻止一下被人反编译。
反编译教程可以参考:http://hualang.iteye.com/admin/blogs/994686
不过代码混淆还是不能阻止被反编译xml格式的布局文件,混淆的是JAVA文件。但是混淆后的代码如果经验多的话,可是可以分析出来的,但这是少数
下面开始说说这个东西是如何使用的
有两种方式可以实现代码混淆,一种是直接在eclipse中,android 2.3开始支持这个功能;另一种是使用ant。
首先我们会在项目中看到proguard.cfg文件,就不打开了。
只需要在progect.properties中添加如下一句话就可以了
另外proguard只在发行版本(release)中运行,所以在调试(debug)模式下不必对其进行处理
这样就可以了,我们把它(apk文件)倒出来看看与源码到底有什么区别
操作如下:项目--鼠标右键--Android Tools--Export unsigned Applicaiton Package
为了看看混淆到底是混淆了什么,我们将apk文件解压,反编译classes.dex。
下面是源代码的样子。
LoveMusicActivity.java
package com.louliljun.lovemusic;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class LoveMusicActivity extends Activity {
private Button startBtn,stopBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startBtn = (Button)findViewById(R.id.startMusic);
stopBtn = (Button)findViewById(R.id.stopMusic);
startBtn.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0) {
startService(new Intent("com.loulijun.lovemusic.ACTION"));
}
});
stopBtn.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
stopService(new Intent("com.loulijun.lovemusic.ACTION"));
}
});
}
}
MusicService.java
package com.louliljun.lovemusic;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class MusicService extends Service {
private MediaPlayer mp;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mp.stop();
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
mp = MediaPlayer.create(this, R.raw.nala);
mp.start();
}
}
下面是混淆编译后的样子。
这里Activity也变得缺胳膊少腿的,让人看了很蛋疼
不过仔细分析下还是可以还原源程序的,但是代码量很大的情况下就比较恼火了,几乎无法被原样破解
注意:
在添加了"proguard.config=proconfig.cfg"这句话后,如果导出apk的时候有如下的问题的话,说明是proguard的版本问题,当然网上也有将版本号降低来解决的,但是我没有解决。我的解决方案是:最彻底的方法是将 Android SDK 2.3 包含的 ProGuard v4.4 升级到 v4.6,就能彻底解决该问题。
即下载http://proguard.sourceforge.net/中最新的4.6版本的proguard,然后解压后将里面的bin目录和lib目录覆盖到android-sdk-windows/tools/proguard目录下的bin和lib目录即可,然后再导出项目就没问题了
如果还想了解更多,推荐几篇文章
http://www.cnblogs.com/over140/archive/2011/04/22/2024528.html#ConfiguringProGuard
http://proguard.sourceforge.net/index.html#/manual/introduction.html
http://www.iteye.com/topic/1012395
有关ant的文章
http://www.java3z.com/cwbwebhome/article/article2/2764.html
http://www.cnblogs.com/tankaixiong/archive/2010/11/24/1887156.html
- 大小: 4.7 KB
- 大小: 39 KB
- 大小: 80.1 KB
- 大小: 48.8 KB
- 大小: 46.5 KB
- 大小: 46.5 KB
- 大小: 16.8 KB
- 大小: 13.4 KB
分享到:
相关推荐
java代码混淆器------------proguard 很好的混淆工具
java代码混淆器proGuard,可以混淆函数变量、类、方法名以实现代码加密
最好用的JAVA代码混淆工具proguard-7.0.0.zip,稳定、可靠。 最新的JAVA代码混淆工具proguard-7.0.0.zip,先进、速度快。 经实测可以放心使用,无病毒,无木马!
J2EE-web工程ProGuard代码混淆
Android 2_3 代码混淆proguard技术介绍 - Zy的技术心
实现maven管理的Javaweb项目的proguard代码混淆功能、工具包下载及错误解决
android-proguard-snippets, 通用Android库的混淆器配置 android-proguard-...这个项目假设你的混淆器配置是基于最新的官方 proguard-android.txt 配置,如下所示。 每个库配置应该仅仅是特定库所需的规则,而不是完
新写的proguard代码混淆的文档 大家可以看看
springboot工程(单个maven工程)利用proguard实现代码混淆
Android Java代码混淆工具:ProGuard简介及使用.docx
java代码混淆工具 简单使用docx 字典文件 生成的配置示例
其中包括第三方jar混淆报错及解决办法,以及普通的代码混淆办法,相信能给你帮助
3、新手入门请参照本目录下文档《ProGuard代码混淆操作说明.docx》 先牛刀小试一下,混淆自己本地的工程,支持jar,war,ear,目录(class)等方式 4、proguard常见参数标签的用法在《proguard标签的用法.pdf》 5、混淆...
J2me代码混淆器 proguard4.2,可以方便把JavaMe程序代码混淆成变量名及类名都用无意义的字母代替的代码
对于 App,建议使用 proguard-android-app-optimize.txt。 对于库,建议使用 proguard-android-lib.txt。 ##参考 ##执照 Copyright (C) 2015 Snowdream Mobile <yanghui1986527>Licensed under the Apache ...
代码混淆工具-proguard7.2.2
java代码混淆器之proguard详解及测试工程
java混淆工具,防止反编译,启动项在bin\proguardgui.bat ,可以在代码打包的时候使用,进行代码混淆
Java混淆技术,保护我们的源代码的安全性与技术保密性!
实用的java代码混淆器proguard3.2下载(内有实例,教你怎么用)