当前位置: 首页 > 编程日记 > 正文

Android如何防止apk程序被反编译

作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
native <methods>;
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)

让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

完整的default.properties文件应该如下:

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.

# Project target.
target=android-10
proguard.config=proguard.cfg


大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的

如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

转载于:https://www.cnblogs.com/q7358582/archive/2012/06/12/2546555.html

相关文章:

java培训:什么是抽象类?怎么定义?

什么是抽象类?怎么定义?这是属于java技术里面的一个知识点&#xff0c;本期教程就是围绕这个问题做的相关介绍&#xff0c;当定义一个类时&#xff0c;常常需要定义一些成员方法描述类的行为特征&#xff0c;但有时这些方法的实现方式是无法确定的。例如&#xff0c;在定义An…

题目 1093:【蓝桥杯】【入门题】字符逆序

题目 1093&#xff1a;字符逆序 蓝桥杯刷题群已成立&#xff0c;微信后台回复【蓝桥杯】&#xff0c;即可进入。 如果加入了之前的社群不需要重复加入。 时间限制: 1Sec 内存限制: 64MB 1. 题目描述 将一个字符串str的内容颠倒过来&#xff0c;并输出。str的长度不超过100个字…

一款腾讯UED设计的提示插件(使用教程)

这是一款腾讯UED设计的提示插件&#xff0c;看着肯定很眼熟吧&#xff0c;闲话不多说&#xff0c;直接上demo吧。 显示 ZENG.msgbox.show(提示信息,图标类型);隐藏&#xff1a; ZENG.msgbox._hide();几秒后自动隐藏&#xff1a; ZENG.msgbox.show(提示信息,图标类型,显示时长);…

互联网企业的移动布局

转载于:https://www.cnblogs.com/deve/archive/2012/06/13/2568988.html

女生学软件测试有哪些优势

对于软件测试这个岗位&#xff0c;相信大家都有听说过&#xff0c;最近几年&#xff0c;越来越多的女性加入到互联网技术行业&#xff0c;选择最多的岗位就是软件测试&#xff0c;那么到底女生学软件测试有哪些优势呢?来看看下面的详细介绍。 女生学软件测试有哪些优势?首先咱…

常见http状态码说明(转)

首先要先了解下什么是HTTP状态码&#xff1a;HTTP状态码&#xff08;HTTP Status Code&#xff09;是用以表示网页服务器HTTP响应状态的3位数字代码。每当客户端向Web服务器发送一个HTTP请求时&#xff0c;服务器都会返回一个响应代码。而这些响应代码主要分成五类&#xff1a;…

题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交

题目 1471&#xff1a;矩形面积交 蓝桥杯刷题群已成立&#xff0c;微信后台回复【蓝桥杯】&#xff0c;即可进入。 如果加入了之前的社群不需要重复加入。 时间限制: 1Sec 内存限制: 128MB 1. 题目描述 平面上有两个矩形&#xff0c;它们的边平行于直角坐标系的X轴或Y轴。对于…

Windows Server 2012关闭Server Manager开机自启动

最近将办公系统改为了Windows Server 2012使用起来个人感觉比较方便&#xff0c;且对服务器管理也变得更加方便&#xff0c;但是用做办公我又不喜欢Server Manager每次开机都启动&#xff0c;当然如果是生产用的服务器还是应该开启的&#xff0c;这样可以在这里直观看到当前服务…

学javascript有哪些开发工具

学习web前端技术&#xff0c;辅助工具是在学习过程中必须要用到的&#xff0c;包括后面的工作中&#xff0c;辅助工具可以更快的提高我们的工作效率&#xff0c;下面小编就为大家整理了学javascript需要用到的开发工具。 学javascript有哪些开发工具&#xff1a; 1.HBuilder HB…

python冒泡排序与常用数学计算

一 、冒泡排序: 冒泡排序: 属于交换排序; 两两比较大小,交换位置,如同水泡大的往上(右)跑; n个数从左至右编号从0到n-1,索引0和1比较,如果索引0大,则交换两者位置; 如果索引1大则不用交换继续比较索引1和2的值,将大值放在右侧,直到n-2和n-1 比较完,第一轮比较完成,第二轮从索引…

题目 1477:【蓝桥杯】【入门题】字符串输入输出函数

题目 1477&#xff1a;字符串输入输出函数 蓝桥杯刷题群已成立&#xff0c;微信后台回复【蓝桥杯】&#xff0c;即可进入。 如果加入了之前的社群不需要重复加入。 时间限制: 1Sec 内存限制: 128MB 1. 题目描述 编写函数GetReal和GetString&#xff0c;在main函数中分别调用这…

Android游戏开发基础part2--Canvas画布

游戏开发基础part2--Canvas画布 又过了一周才继续做总结&#xff0c;四级结束了&#xff0c;应该可以多点时间学习游戏编程了。 Canvas画布类是一个在游戏当中担当非常重要的角色&#xff0c;它可以绘制出不同的图形和图片&#xff0c;可以说没有了画布就不能做出画面炫丽的游戏…

JavaScript有哪三部分组成?

在学习web前端技术时&#xff0c;最常见的也是需要最着重学习的就是JavaScript这一方面&#xff0c;工作中也是会经常用到的&#xff0c;那么JavaScript有哪三部分组成呢?来看看下面的详细介绍。 JavaScript有哪三部分组成? JavaScript的组成 JavaScript由ECMScript、BOM和DO…

【蓝桥杯】【入门题】【算法提高VIP】1480:模拟计算器

题目 1480&#xff1a;模拟计算器 蓝桥杯刷题群已成立&#xff0c;微信后台回复【蓝桥杯】&#xff0c;即可进入。 如果加入了之前的社群不需要重复加入。 时间限制: 1Sec 内存限制: 128MB 1. 题目描述 使用Switch语句编写一个模拟简单计算器的程序。依次输入两个整数和一个字…

《c和指针》笔记5

递归 C通过运行时堆栈支持递归函数。的哦贵函数就是直接或间接调用自身的函数。 递归函数所需要的2个特性&#xff1a; 1、存在限制条件&#xff0c;当符合这个条件时递归便不再继续。 2、每次调用之后越来越接近这个限制条件。 递归函数在实现方面更加接近问题的抽象定义&…

怎么获得combobox的valueField值

var a; var dwField new Ext.form.ComboBox({ fieldLabel:管理员, mode: local, width:70, id:user_name, …

哪些人适合学习java技术

java技术在互联网行业一直都是非常重要的存在&#xff0c;学习java技术只会多不会少&#xff0c;那么目前哪些人适合学习java技术呢?来看看下面的详细介绍就知道了。 哪些人适合学习java技术? 1.在家待业人员&#xff0c;没有明确的目标&#xff0c;不知道自己想要什么&#…

AS3版本的MaxRects算法测试

早上&#xff0c;在微博发现一条信息&#xff0c;关于MaxRects算法的&#xff0c;杜增强DzQ 移植的关于AS3版本的MaxRects算法&#xff0c;具体地址是&#xff1a;http://www.duzengqiang.com/blog/post/971.html 代码如下&#xff1a; /* Based on the Public Domain MaxRecta…

android 52 粘滞广播

粘滞广播&#xff1a;广播发送出去以后&#xff0c;广播接收者还没有创建&#xff0c;当广播接收者注册的时候就可以接收&#xff0c;如果不是粘滞广播则如果没有广播接收者就以后不能再接收了。 mainActivity: package com.sxt.day07_07;import android.app.Activity; import …

【蓝桥杯】【入门题】【算法提高VIP】1481:剪刀石头布

题目 1481&#xff1a;剪刀石头布 蓝桥杯刷题群已成立&#xff0c;微信后台回复【蓝桥杯】&#xff0c;即可进入。 如果加入了之前的社群不需要重复加入。 时间限制: 1Sec 内存限制: 128MB 1. 题目描述 编写程序实现“剪刀&#xff0c;石头&#xff0c;布”游戏。在这个游戏中…

UI设计培训学习中必须掌握的设计原则

不管是刚开始学习UI设计或者已经在学习UI设计同学中&#xff0c;UI设计的设计原则都是非常重要的&#xff0c;需要大家去重点关注的&#xff0c;下面小编就为大家详细的介绍一下UI设计培训学习中必须掌握的设计原则。 UI设计培训学习中必须掌握的设计原则&#xff1a; 重复 在平…

【复盘】如何培养小朋友的编程能力?

Scratch家长群已成立&#xff0c;微信后台回复【Scratch家长群】&#xff0c;即可进入。 如果加入了之前的社群不需要重复加入。 前几天&#xff0c;我在得到听了 邵慧宁的故事&#xff0c;就想着把游戏化的思维应用于培养自己孩子的编程能力上&#xff0c;并邀请志同道合的家长…

ubuntu系统下载编译android源码

在ubuntu系统下编译android需要注意的事项&#xff1a;1. 参考http://source.android.com/中的安装说明。2. 安装JDK6中碰到的问题可以参考http://hi.baidu.com/designhouse/item/0dbece7c4f6af0376e29f6c1中的说明&#xff0c;记得配置环境变量。3. 下载代码时如果出现timeout…

[windows server 2008 站点系列五]一招加速域用戶的文件查找速度

在企业IT基础环境中&#xff0c;文件服务器的应用越来越平凡&#xff0c;而文件服务器的数量也随之增多。作为IT应用人员习惯性的从管理者的角度出发&#xff0c;找寻DFS等帮助简化管理维护的解决方案。但是&#xff0c;另一方面&#xff0c;企业用户往往很难在为数众多的文件服…

在web.xml文件中配置Servlet时,主要配置哪些信息?

web前端的学习内容是比较多的&#xff0c;其中有一部分就是关于在web.xml文件中配置Servlet时的相关内容&#xff0c;在web.xml文件中配置Servlet时&#xff0c;主要配置哪些信息?来看看下面的详细介绍。 使用IDE开发Servlet时&#xff0c;配置信息可以通过可视化方式定义。然…

Oracle Study之--ORA-12537(TNS:connection closed) 错误案例

系统环境&#xff1a; 操作系统&#xff1a;RedHat EL55 Cluster&#xff1a; Oracle 11gR2 GRID Oracle&#xff1a; Oracle 11gR2 在构建Oracle 11gR2 RAC时出现以下错误&#xff1a; 1、建库时 2、Listener 日志信息 3、客户端连接错误信息 解决方案&#xff1a; 123456789…

MEF: MSDN 杂志上的文章(9) 控制部件创建策略 ???

http://msdn.microsoft.com/zh-cn/magazine/ee291628.aspx 默认情况下&#xff0c;容器中的所有部件实例都是单例&#xff0c;因而由在容器中导入它们的所有部件共享。因此&#xff0c;SalesOrderView 和 ViewFactory 的所有导入程序都将获得同一实例。在很多情况下需要这样&am…

【青少年编程】绘制等腰直角三角形

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。 如果加入了之前的社群不需要重复加入。 类比思维就是指把两个或者两类事物进行比较&#xff0c;并进行逻辑推理&#xff0c;找出两者之间的…

考PMP证书一定要参加PMP培训吗?

​ 考PMP证书一定要参加PMP培训吗?这是目前很多想要考pmp认证的小伙伴比较关心的一个问题&#xff0c;小编可以肯定的回答大家&#xff0c;当然需要参加&#xff0c;具体来看看下面的详细介绍。 考PMP证书一定要参加PMP培训吗?当然要&#xff0c;PMP考试要接受PMO授权许可培训…

Apache+PHP in MAC

是以为记&#xff0c;当前OSX下的ApachePHP配置。我的配置跟这篇文章应该一样&#xff1a;http://www.ccvita.com/398.htmlApache重启&#xff1a; apachectl restart|start|stopApache配置文件&#xff1a; /etc/apache2/httpd.conf (php5在这里开启&#xff09;Apache虚拟主机…