作为一名技术开发人员,为了保护源代码,阻止反向工程我们势必会接触到代码混淆。代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为,代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。今天我主要讲一下如何对Android项目进行代码混淆。

首先,我来讲解一下对Android工程编译成功后所生成的APK文件(即应用安装文件)的代码混淆,因为第三方人员完全可以通过解压APK文件并从中获取项目源码,所以对APK文件的保护显得至关重要。做过Android开发的人都知道,我们在创建一个新的Android项目的时候,需要为该项目选择API版本,在不同的API版本中google为我们提供了不同的封装方法,这里我们以2.3版本为中界点。细心的同学应该能够发现在Android-SDK的tools目录下有这样命名的一个文件夹proguard,它就是目前在JAVA领域最常用到的代码混淆工具。

OK! 接下来介绍如何去使用该工具,打开的Eclipse,选择创建一个Android项目,API版本选择2.3.3,工程创建完毕之后打开工程的根目录,你会发现这样一个文件proguard-project.txt,

相信没有接触过代码混淆的同学对这个文件肯定很陌生,但是我要告诉你的就是,没错,你猜对了!它就是proguard混淆代码的脚本文件,伟大的google已经帮我们将这件事做好了,我们唯一需要做的就是去编译自己的项目,生成APK文件;还记得我前面说到吗?我们以2.3版本为中界点,接下来我们再次创建一个Android项目,这次将API版本选为2.2,创建完毕后打开项目的根目录,你还能找到proguard-project.txt文件吗?答案显然是否定的,因为google从2.3版本以后才开始为我们封装代码混淆的脚本文件。那么2.3以下的版本怎么办呢?这里我们有两步需要去做,首先,去2.3以上版本的项目中复制一份proguard-project.txt文件,拷贝到当前项目的根目录下;然后,打开当前项目中的project.properties(老版本为default.properties )文件,在文件的末尾处添加这样一行代码:proguard.config=proguard-project.txt,保存该文件,接下来从新编译你的项目,这时生成的APK文件就已经进行了代码混淆。

介绍完了APK文件的代码混淆,接下来我们来说说另外一种情况,我们需要交付给第三方的产品并不是一个APK文件,而是将一个完整的Android项目作为一个Library供他们使用,这时我们应该如何来进行代码混淆呢?首先我们要确认已经将项目中所有源代码即.java文件打成了jar包(jar包中为.class文件),接下来我们需要做的就是对jar包进行混淆,脚本文件的编写规格如下:

Source code    
-injars  androidtest.jar //jar包所在地址
-outjars  out //输出地址
-libraryjars    'D:\android-sdk-windows\platforms\android-9\android.jar'  //引用的库的jar,用于解析injars所指定的jar类-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
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>;  //所有方法不进行混淆
}
-keep public class com.asqw.android{
public void Start(java.lang.String);  //对该方法不进行混淆
}
-keepclasseswithmembernames class * {  //保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
native <methods>;
}
-keepclasseswithmembers class * {  //保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { //保护指定类的成员,如果此类受到保护他们会保护的更好
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { //保护指定的类文件和类的成员
public static final android.os.Parcelable$Creator *;
}

在混淆Android代码的时候我们不能混淆Activity,Service,BroadcastRevicer的子类,否则的话会造成资源文件的丢失,保存该文件时以.pro结尾,接下来打开SDK中的proguard文件夹,找到bin目录下的proguardgui.bat文件,双击打开,

点解Load Configuration按钮,导入我们编写的脚本文件,然后点击Next,当提示我们Processing completed successfully!表示我们的jar包已经成功进行了混淆,这时再来看我们jar包里面的内容:

将这样的工程交付给第三方使用,你一定不会再为源码的保密发愁了吧!

转载于:https://www.cnblogs.com/arnoid/p/3207923.html

Android代码混淆相关推荐

  1. android aidl混淆代码,Android代码混淆

    什么是代码混淆 代码混淆就是将代码中的各种元素,如变量,方法,类和包的名字改写成无意义的名字,增加项目反编译后被读懂的难度. Android代码混淆使用ProGuard工具,ProGuard是一个压缩 ...

  2. android代码混淆个人总结及踩坑

    android代码混淆个人总结及踩坑 前言 公司项目使用组件化开发的形式,需要对自己负责的模块进行一些混淆配置,关于混淆相信做android开发的都或多或少有过一些接触,通过对混淆文件的配置从而将代码 ...

  3. android 混淆后的机制,Android 代码混淆机制

    Android 代码混淆机制 由于Android项目是基于java语言的,而java属于高层抽象语言,易于反编译,其编译后的程序包包含了大量的源代码变量.函数名.数据结构等信息,根据其编译打包后的AP ...

  4. android加密墙,Android代码混淆加密配置(Proguard文件解析)

    Android代码混淆加密配置(Proguard文件解析) Android代码混淆加密配置(Proguard文件解析) 为了防止自己的APP被轻易反编译,我们需要对APK进行混淆,或者特殊加密处理.可 ...

  5. android混淆语法(android代码混淆工具)

    android 代码混淆算法有哪些 根据SDK的版本不同有2中不同的代码混淆方式,以上的proguard.cfg参数详解中所涉及到的信息是在较低版本SDK下的混淆脚本,事实上在高版本的SDK下混淆的原 ...

  6. Android 代码混淆语法讲解及常用模板(转)

    转载请注明原博客地址  Android 代码混淆语法讲解及常用模板 前言 混淆对于每一个开发者来说都不陌生,对于大多数 APP 而言,在上线之前,通常会进行代码混淆,加固,防止自己的 APP 被别人轻 ...

  7. Android代码混淆配置说明

    1.为什么需要代码混淆 Proguard混淆用于保护APP不被破解和逆向分析,Proguard通过移除没有用到的代码以及通过特定规则重命名类.变量.方法来压缩.优化.混淆你的代码.这样可以让你APK更 ...

  8. Android代码混淆官方实现方法

    首先查看一下 "project.properties" 这个文件: # This file is automatically generated by Android Tools. ...

  9. 使用ProGuard进行Android代码混淆(保姆级教程)

    使用ProGuard进行Android代码混淆(保姆级教程) 一.ProGuard的功能 ProGuard是一个混淆代码的开源项目,主要是用来对java代码进行混淆,当然也就可以对java代码进行混淆 ...

  10. Android代码混淆后的定位

    Android代码混淆后的定位 什么是代码混淆 如何开启Android Studio的代码混淆 如何在程序奔溃后定位到奔溃的代码行 mapping.txt 分析流程 什么是代码混淆 在java写的.j ...

最新文章

  1. SQLServer之ISO游标使用
  2. 用C语言解“用天平找小球”题
  3. mysqldump 备份报错
  4. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用48
  5. java读取excel2010文件_java如何读写excel2010
  6. 原码、反码、补码、移码的表示
  7. surefire 拉起testng单元测试类的源码流程阅读(二)
  8. 让代码更简洁 和@Autowired说分手, 迎接 @RequiredArgsConstructor注解
  9. python程序在线更新_Python自动更新功能
  10. oracle空格分割字符串,Oracle字符串分割的处理
  11. 计算机课程微信可以教吗,这样操作都可以?教你用微信远程控制电脑!
  12. 4、Python量化交易-双均线策略
  13. 在Android Studio中隐藏APP的标题栏
  14. 做“国潮”的花西子是如何超越完美日记的?
  15. html设置%3ca%3e的图标,HTML中content表示的特殊字符和图标
  16. 尝试自己制作一个网页版的单机冒险岛!!
  17. python3爬小说_python3小说爬虫
  18. 系统分析和设计方法之信息系统构件
  19. 浅析网络编程之AF_INET和PF_INET
  20. PostgreSQL安全指南 - Postgres2015全国用户大会--重磅嘉宾佳作分享(周正中)

热门文章

  1. 如何格式化电脑_计算机格式化的方法教程
  2. 程序分身:根据不同程序名执行不同函数
  3. 【Flink】Flink ChildFirstClassLoader loadClassWithoutExceptionHandling 空指针
  4. 【kafka】kafka 消费 带有 kerberos认证的服务器
  5. 95-910-150-源码-FlinkSQL-Flink SQL 的元数据管理
  6. 【Elasticsearch】 elasticsearch中 rollover 的用法
  7. 95-136-043-源码-Operator-LegacyKeyedCoProcessOperator
  8. 95-190-035-源码-window-Time Window 实现
  9. 【Maven】maven 插件 maven-surefire-plugin
  10. 【linux】linux一次杀死多个进程