Android代码混淆官方实现方法「建议收藏」

Android代码混淆官方实现方法「建议收藏」首先查看一下“project.properties”这个文件:#ThisfileisautomaticallygeneratedbyAndroidTools.#Donotmodifythisfile–YOURCHANGESWILLBEERASED!##ThisfilemustbecheckedinVersionContro

大家好,又见面了,我是你们的朋友全栈君。

首先查看一下 “project.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 edit
# “ant.properties”, and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-18

简单翻译一下:

这个文件又android工具自动生成,不要修改这个文件 —— 你的更改将会被删除!(这句有点不懂)

这个文件必须在版本控制系统中。

需要修改Ant构建系统的自定义属性的话,编辑”ant.properties”这个文件,重写一些值来适应你的工程结构。(翻译的很水,不要当真)

如果需要使用ProGuard来压缩和混淆代码,将下面这句解除注释(可用的属性有:sdk.dir, user.home)

翻译完毕…

到这里应该明白了,下面这行配置就是代码混淆的开关。

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

proguard-android.txt 这个文件在SDK的 tools/proguard文件夹中,是Google事先写好的一个代码混淆配置文件,是一个基础的android代码混淆配置文件。

继续查看 proguard-project.txt这个文件:

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {

# public *;
#}

再次秀一下我蹩脚的英语,简单翻译一下:

如果需要使用ProGuard,编辑project.properties文件,根据描述定义proguard.config。

可以在这儿添加具体的代码混淆规则。

默认情况下,这个文件中的标志附加到${sdk.dir}/tools/proguard/proguard-android.txt指定的标志。

你可以通过改变 project.properties 中的 ProGuard的include属性来编辑路径和指令。

更多的信息,请查看http://developer.android.com/guide/developing/tools/proguard.html。

在这儿添加工程的具体的keep options:

如果你的工程使用了WebView中的JS,解除下面的注释,并且指定JavaScript接口类的全名。(也就是是忽略js部分,不进行混淆,方法是解除注释,将fqcn.of.javascript.interface.for.webview替换为与JS绑定的类名。)

#-keepclassmembers class fqcn.of.javascript.interface.for.webview {

# public *;
#}

翻译完毕…

通过这两个文件的注释可以得出结论:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 有了这一句就启用的代码混淆。当然,默认的设置是不带优化功能的,可以用以下设置来加上代码优化功能(上图蓝色文字部分):

proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt

proguard-android.txt 是基础的Android代码混淆规则,如果需要添加规则,添加到proguard-project.txt 中。

如果没有引入第三方的库,一般情况下 proguard-android.txt 的规则是够用的,但是如果有第三方的库,在混淆的时候要把第三方的库忽略掉,这是就需要在 proguard-project.txt 文件中添加规则。(android.support.** 已经在proguard-android.txt做了处理,所以如果使用了android.support.v4,就不用添加代码混淆的规则了)。

对第三分库的处理,参考:http://blog.csdn.net/u_xtian/article/details/7495023

具体做法,在 proguard-project.txt 添加:

-libraryjars **.jar (声明lib文件)

-dontwarn com.xx.bbb.** (不提示警告)
-keep class com.xx.bbb.** { *;} (不进行混淆)

例如百度地图:

-libraryjars libs/baidumapapi_v2_1_3.jar

-dontwarn com.baidu.mapapi.**
-dontwarn com.baidu.platform.**
-dontwarn com.baidu.location.**
-dontwarn com.baidu.vi.**
-dontwarn vi.com.gdi.bgl.android.**

-keep class com.baidu.mapapi.** {*; }
-keep class com.baidu.platform.** {*; }
-keep class com.baidu.location.** {*; }
-keep class com.baidu.vi.** {*; }
-keep class vi.com.gdi.bgl.android.** {*; }

可能有人很疑惑,不进行代码混淆的方法我知道,但这些包名去那里找啊,其实很简单。打开Android Private Libraries就能看到。

Android代码混淆官方实现方法「建议收藏」

转载地址:http://www.th7.cn/Program/Android/201309/150445.shtml

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139157.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 无序链表排序_双向链表排序算法

    无序链表排序_双向链表排序算法需求给定一个无序的链表,输出有序的链表。分析链表排序比较特殊,由于不连续的性质,所以在进行排序的时候要引入外排思想,因此归并排序或者多路归并就成为了排序的选择。归并排序分为拆分、合并两个阶段:1.拆分需要拆分出链表中间节点,并赋值NULL阶段,形成两个独立的链表,直到拆分成单个节点为止。2.合并由于此时没个链表都为单节点,所以实质上是个有序链表合并问题。代码下面

    2022年10月11日
    0
  • UML一一 类图关系 (泛化、实现、依赖、关联、聚合、组合)[通俗易懂]

    UML一一 类图关系 (泛化、实现、依赖、关联、聚合、组合)[通俗易懂]目录类图关系概述面向对象是符合人们对现实世界的思维模式,利用面向对象设计,特别是采用各种设计模式来解决问题时,会设计多个类,然后创建多个对象,一个设计良好的类,应该是兼顾信息和行为并且高内聚。而不同的类之间,应该做到松耦合。当面对应用系统或者需要解决的问题经常是复杂的、高度抽象的,我们创建的多个对象往往是有联系的,通常对象之间的关系可以分为以下几类:泛化关系实现关系依赖关…

    2022年7月12日
    17
  • 寻找大素数算法

    寻找大素数算法packageprimeNumber;importjava.util.Arrays;importjava.util.Scanner;/***本文系作者高中时候与同学讨论的结果生成结果是依据素数定理推倒而来依据此公式可以求出无限大的素数但非公理次计算结果虽然可以求无限大的素数但仍需验证**@author王伟2020-3-18**/publi…

    2022年6月18日
    20
  • Java单例模式中双重检查锁的问题

    Java单例模式中双重检查锁的问题单例创建模式是一个通用的编程习语。和多线程一起使用时,必需使用某种类型的同步。在努力创建更有效的代码时,Java程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量。然而,由于一些不太常见的Java内存模型细节的原因,并不能保证这个双重检查锁定习语有效。它偶尔会失败,而不是总失败。此外,它失败的原因并不明显,还包含Java内存模型的一些隐秘细节。这些事实将导致代

    2022年7月25日
    13
  • 计算机cpu后面字母代表什么意思,英特尔CPU型号中最后的字母什么意思?如有不懂欢迎驻足停留…「建议收藏」

    计算机cpu后面字母代表什么意思,英特尔CPU型号中最后的字母什么意思?如有不懂欢迎驻足停留…「建议收藏」今天给大家主要讲讲Intel(英特尔)处理器的小常识。可能说过比较多遍了,但是今天说的比较具体,对大家以后要买CPU得有个参考。在Intel处理器中,有各种型号的U,这些型号中后缀都自带字母,比如K、X、M等等,不过还要区分笔记本和台式,相对来说笔记本电脑带的更多,今天就给大伙好好普及一下,如有遗漏,欢迎你们的替补喔。笔记本电脑:M:一般是双核处理器。M前面一位数字是0,就是标准电压处理器(功耗为…

    2022年6月21日
    39
  • net开源开发web框架_我的6大Web开发开源框架

    net开源开发web框架_我的6大Web开发开源框架net开源开发web框架有许多后端框架是开源的,并且易于使用,但是并非所有框架都提供了出色的功能。后端框架是网站开发的重要组成部分,因为它们就像网站的基本要素。基本上,他们处理网站幕后的一切。后端框架具有广泛的库,API,Web服务器等。他们负责数据库,确保数据库与前端进行正确的通信并生成后端功能。如所承诺的,接下来是我的前6个后端框架的摘要。1.RubyonRa…

    2022年7月15日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号