Android程序加入代码混淆器

加入代码混淆器,主要是加入proguard-project.txt文件的规则进行混淆,之前新建Android程序是proguard.cfg文件

可以看一下我采用的通用规则(proguard-project.txt文件)

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

# 以下两个命令配合让类的路径给删除了
-allowaccessmodification
-repackageclasses ”

# 记录生成的日志数据,在 proguard 目录下
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt

# 异常都可以忽略就打开
#-dontwarn
-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
-dontnote com.android.vending.licensing.ILicensingService
-keepnames class * implements java.io.Serializable

# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn’t save them.
-keepclassmembers class * implements java.io.Serializable {
	static final long serialVersionUID;
	private static final java.io.ObjectStreamField[] serialPersistentFields;
	private void writeObject (java.io.ObjectOutputStream);
	private void readObject (java.io.ObjectInputStream);
	java.lang.Object writeReplace ();
	java.lang.Object readResolve ();
}

# Preserve all native method names and the names of their classes.
#-keepclasseswithmembernames class * {
#	native ;
#}
#-keepclasseswithmembernames class * {
#	public (android.content.Context, android.util.AttributeSet);
#}
#-keepclasseswithmembernames class * {
#	public (android.content.Context, android.util.AttributeSet, int);
#}

# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
#-keepclassmembers class **.R$* {
#	public static ;
#}

# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * {
	public static **[] values ();
	public static ** valueOf (java.lang.String);
}

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

# 如果你的工程是对外提供方法调用就打开
#-keep public class * {
# public protected *;
#}

如果还有规则就加在后面

另外,我们一般需要混淆的是自己写的代码,引入的第三方库文件是不需要混淆的,否则会出现如下错误:

就是找不到所需要的类。所以第三方库需要指出来不混淆,方法如下:

上面是android.support.v4.×找不到所需类,查看引入库的包名

在proguard-project.txt后面加上

-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }

第一句是忽略这个警告,第二句是保持类不混淆

把你所有引入的第三方库弄完后,在project.properties文件里加上一句

proguard.config=proguard-project.txt

就可以编译了(怎么编译?

编译后,可以在bin里看到混淆代码的apk文件,是不是文件变小了,多爽!

同时,在bin/proguard文件夹里多了几个文件

其中,mapping.txt就是所有混淆的类及变量名的前后参照,usage.txt是你在代码中没用到的方法,都给你列出来了,是优化后的结果。

时间: 2024-10-15 01:32:33

Android程序加入代码混淆器的相关文章

5个常用Java代码混淆器 助你保护你的代码

从事Android App开发的都知道,一旦应用被破解,什么源代码.资源文件等都可能泄露,重要点有so文件的支付类.金融类应用等安全更是容易受到威胁!就Java语言编程,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具有jad .dex2jar .jdec .Dedexer 等.因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以用一些代码混淆器混淆代码,保护Java的类文件.然后,在混淆的基础上再做一层深层保护——加密.这个方法现在也比较流行,目前,有这方面技术的,有

MFC小程序------01 代码管理器

1.代码入库: 2.代码查找: 3.查看所有代码: 4.程序设置: 自己学习MFC写的一个小程序,其中还有许多功能还待完善,比如数据库的导入功能还没有写,但导出功能是可以用的,查找算法也不是很好,还是代码编辑框中的语言关键字应该是高亮显示的,但也还没有解决.明天考完就放假了,先记到这里,之后再继续完善该程序. 下面是程序的免费下载地址:只有.exe文件和.db数据库,不包含源码,其中数据库中含有大部分的源码可供参考: http://download.csdn.net/detail/lp31001

Android 项目的代码混淆,Android proguard 使用说明

简单介绍 Java代码是非常easy反编译的. 为了非常好的保护Java源码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码进行缩减体积.优化等,但那些对于我们来说都算是次要的功能. 官网地址:http://proguard.sourceforge.net/ 原理 Java 是一种跨平台的.解释型语言,Java 源码编译成中间"字节码"存储于 class 文件里.因为跨平台的须要,Java 字节码中包

Android_Proguard代码混淆器

1.混淆器概述 混淆器通过删除从未用过的代码和使用晦涩名字重命名类.字段和方法,对代码进行压缩,优化和混淆,生成一个比较小的.apk文件,该文件比较难进行逆向工程,是一种重要的保护手段. 混淆器被集成在android 构建系统中,所以你不必手动调用它.同时混淆器仅在发布模式下进行构建应用程序的时候才会运行起来,所以在调试模式下构建程序时,你不必处理混淆代码.这个文档描述了怎样启用并配置混淆器,以及使用跟踪(retrace)工具对混淆的堆栈跟踪信息(stack traces)进行解码. 2.启使混

Android 简单的代码混淆

Android的代码混淆是开发者需要了解的相关知识,它能够防止android应用程序的反编译.因为android程序多数是java语言开发的,而java代码很容易被反编译,所以为了使android应用程序代码应用一定的安全性,进行android代码的混淆是非常有必要的. 在了解代码混淆之前,先了解android的反编译.进行android的反编译需要借助两个工具dex2jar和jd-gui. 1.代码的反编译 在两个工具准备好之后,将apk文件的直接解压.在解压后的文件中,将classes.de

[转]Android Studio实现代码混淆

1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txt: buildTypes { release { signingConfig signingConfigs.release minifyEnabled true # 设置是否进行 shrink 等操作(即无用代码压缩),一般设置为 true,使混淆更有效 proguardFiles getDefaultProg

【Android】Android Studio 进行代码混淆,打包release APK

整了一天,感觉坑挺多. 1. 选择如图中的选项Android Studio进行签名打包: 2. 填写APP对应的信息:(最好用个文本记下来放在项目中同步给Team) - Key store path: 如果是新APP则创建,如果已经有了选择就行: - Key store password: ******* - Key alias(别名): 自定义 - 如果是新创建的文件需要选择时间,整个25年足够用了,公司信息填上就OK - 下一步后选择release就开始打包 3. Android Studi

Android Studio实现代码混淆

1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txt buildTypes { release { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rule

Android开发之代码混淆

1.启动混淆开关 在工程目录下的project.properties文件,有名为proguard.config标签,默认为关闭状态,打开即可. 2.进行混淆配置 在工程目录下的proguard-project.txt文件进行具体的混淆配置,配置完后右击工程,选择export导出apk包,该apk包就是混淆包了. 例:包名为com.test -dontwarn org.* -keepattributes EnclosingMethod, InnerClasses -keepattributes *