Android 开发中 Proguard 主要作用是对 Java 代码进行如下操作 :
这里的例子仅仅还是jdk是模块化的,但是工程代码还没有模块化。等所有依赖都模块化了,可以重新试验一下。
原文地址:Troubleshooting ProGuard issues on Android 原文作者:Wojtek Kaliciński 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:dieyidezui 校对者:corresponding 为什么使用 ProGuard ProGuard 是一个压缩、优化、混淆代码的工具。尽管有很多其他工具供开发者们使用,但是 ProGuard 作为 Android Gradle 构建过程的一部分,已经打包在 SDK 中
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解。 什么是ProGuard工具? ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类、字段和函数等,达到压缩、优化和混淆代码的功能。具体来说,使用ProGuard工具,可以达到下面两个目的: 删除了源文件中没有调用的那部分代码,最大化的精简了字节码
在 build.gradle 中 开启 Proguard , 在编译时 , 会自动进行如下一系列优化 :
-injars androidtest.jar【jar包所在地址】 -outjars out【输出地址】 -libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】 -optimizationpasses 5 -dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】 -dontskipnonpubliclibra
ProGuard是一个Java Class文件的Shrinker,optimizer,obfuscator以及Preverifier。
使用intellij idea 打开 proguard-creater 工程 编辑 Main.java 根据提示填写相应参数运行即可
ProGuard 是一个Java 工具,其不仅可以缩减APK 文件大小,还可以在编译期优化、混淆和预校验你的代码。其通过你应用的所有代码路径,来找到未被使用的代码,并将其删除。
尽量不用太复杂的lib,轻量级lib是首选。如果你的应用没用到兼容库,可以考虑去掉support包。
ProGuard简介 在最新的Android Studio 2.2.2版本创建的Android工程中,module中的build.gradle有如下一段配置。这里的minifyEnabled即用来控制在编译时是否需要启用Proguard,将minifyEnabled修改为true,即表示启用Proguard。’proguard-android.txt’是Android SDK中自带的一个基本Progurad配置文件,默认是空白的,需要由开发者自行添加哪些需要混淆哪些不混淆,形如: -ignorewarnin
原文地址:Enabling ProGuard in an Android Instant App 原文作者:Wojtek Kaliciński 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:JayZhaoBoy 校对者:hanliuxin5 Instant Apps(即时应用)和 4 MB 字节的限制 把一个已经存在的应用程序转换成 Android Instant App(安卓即时应用程序)是很有挑战性的,但对于模块及结构化你的项目而言却是一个很好的练习,更
最近精神哥接到多个小伙伴的投诉,说无法看懂Bugly崩溃克星页面上显示的堆栈信息!精神哥赶紧把正研究的Top Crash崩溃和心爱的鸡爪放下,开始着手跟进。经分析发现,大家误会Bugly崩溃克星了,这一切都是Proguard搞的鬼! 下面请容精神哥一一道来! 问题描述 先看看图一中显示的正常堆栈内容,正常堆栈中每一个调用帧(Frame),都会有3个元素组成: 类名(Full Class Name,红线标注); 方法名(Method,蓝线标注); 源文件及行号(SourceFile:LineNum,绿线标注
根据关键字找到官网的建议方法。 https://www.guardsquare.com/en/products/proguard/manual/troubleshooting#dependency
Maven - 代码混淆proguard-maven-plugin vs 代码加密classfinal
1、Springboot+proguard+maven 混淆. 2、proguard-spring-boot-example 3、官方解释 4、Proguard的Keep使用方法 5、ProGuard 最全混淆规则说明 6、ProGuard代码混淆技术详解 7、使用proguard混淆springboot代码
当你在Android Studio中创建一个新的Android项目时,它已经生成了gitignore文件,但通常它不包含所有必要的规则。
#反编译 win系统好久不用了而且win系统下的反编译工具和教程一大堆,这里讲讲Mac下反编译工具。 目前,mac下有两款工具不错,分别是Jadx和AndroidDecompiler
在网上搜“代码混淆”关键词,可以看到n多教程。包括本篇博客,大部分重要内容也是从网上各位大神的博客里面看到然后摘取和总结出来的。虽然网上都有,但是对于我个人来说,很难找到一篇博客概括完全的,所以还是总结一下,也算是学习的纪录。
作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。
最近在做UAF打包的事情,其中一个需求是根据debug/release和flavor来决定不同的依赖。比如debug情况下,我要打包带日志的,release情况下,我要打包带日志,不带日志,含其他module的,不含其他module的两两组合(也就是flavorDimensions)。现分享方法。
混淆是一种通过修改程序的源代码或二进制代码,在保障程序的功能不变的基础上,使得代码难以阅读和理解的技术。在Java中,混淆通常用于防止对源代码的逆向工程,从而保护知识产权和商业秘密。常见的Java混淆工具包括ProGuard和JGuard等。这些工具可以自动地对Java字节码进行混淆。
本文主要讲述了代码混淆和资源混淆的原理,Studio默认的混淆方案,混淆的参数,以及如何对Apk进行代码混淆(自定义混淆文件)和资源混淆(结合微信混淆和美团混淆两种方案),避免Apk被逆向。 为什么要混淆 我们的apk在打包发布之前,都要进行混淆处理来避免源代码和资源文件被小白用户通过反编译拿到。未混淆代码的反编译操作非常简单,网上有很多教程, 也可以通过使用Android Studio自带的apk分析工具(Build—-Analyze APK)直接看到未混淆Apk的源代码和原始的资源文件。对比图如下,从
更多 ProGuard 混淆配置参考 : https://www.guardsquare.com/en/products/proguard/manual/usage
注:将上面的 com.google.gson.examples.android.model 换成你自己项目的实体类的包名!!!
缩减、混淆处理和优化应用 ( 官方文档 ) : https://developer.android.google.cn/studio/build/shrink-code
缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。
本文的proguard配置仅仅是根据自身工程的情况来量身定做的,不是通用的,具体的场景还需要根据具体情况对proguard参数进行调整。
minifyEnabled设置true app/build.gradle buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug{ minifyEnabled true proguardFile
背景 随着业务的快速发展,Release构建速度问题不断凸显,从2020年底构建50min到如今接近1h30min的构建时长,其中Proguard阶段耗时占用了接近40%, 时刻影响着工作效率。在整个Release构建耗时链路上,业界优化方案众多,并起到了一定的优化效果。然而我们另辟蹊径,自研一套Inc-Proguard方案,解决了无法增量Proguard问题,实现将耗时降低到分钟级别。 问题出在哪? 目前Android微信采用模块化的Gradle构建方式,也是业界普遍采用的一种方式。大致构建流程如下:
gradle可在 flutter sdk中 /Users/wangyongbin/Documents/flutter/packages/flutter_tools/gradle 下的 flutter.gradle文件配置
flutter.gradle可在 flutter sdk中 /Users/wangyongbin/Documents/flutter/packages/flutter_tools/gradle 下的 flutter.gradle文件配置
前言 相信做过app的同学对代码混淆应该不陌生吧,如果陌生就自行百度,这里不做普及。我们先思考一个问题,如果我们把代码混淆了,如果出错了怎么定位问题?答案非常简单,只要稍微实践下你就明白了,下面就是给你整理的对混淆代码错误堆栈还原的方法。 如何混淆? Android Studio实现混淆很简单,只需要在build.gradle进行如下配置即可: buildTypes { release { minifyEnabled true proguar
比较常用的反编译工具 JD-GUI ,直接把编译好的jar丢进去,大部分都能反编译看到源码:
简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件
在脑海中假想一下,在你苦苦经历 81 难,摸爬滚打研制的技术轮子,终于成型得以问世,遂打个 JAR 包投放于万网之中。可是没过几天,同样功能的轮子出现在你的眼前,关键是核心代码都一样,此时你的内心是否会像一万只草泥马奔腾而过呢?
配置文件的位置以及开关的设置位置,android studio 和eclipse稍微有些差异,这里以android sudio为例:
混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。 所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。总结如下:
今天发包给客户,发现混淆后的库时序有点问题。再三调试,发现锁失效了。wait()没有任何阻塞就跳过了。
我们在之前的博客文章中介绍了高兼容性、高稳定性的实时热更新解决方案Robust之后,业内反响强烈,不断有读者咨询我们什么时候开源。今天我们非常高兴地宣布,Robust已经开源啦!开源地址:https://github.com/Meituan-Dianping/Robust 。 Robust热更新系统借鉴Instant Run原理,实现了一个兼容性更强而且实时生效的热更新方案。其基本思路是,Robust热更新系统在一个方法的入口处插入一段跳转代码,当发现某个方法出现bug就跳转执行补丁中的代码,略过原有代码的
-dontwarn com.nostra13.universalimageloader.**
为何需要混淆呢?简单的说,就是将原本正常的项目文件,对其类,方法,字段,重新命名,a,b,c,d,e,f…之类的字母,达到混淆代码的目的,这样反编译出来,结构乱糟糟的,看了也头大。
.apk文件其实就是一个压缩包,把文件的后缀改成.zip,用压缩软件解压搜就可的下图(我是mac)
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来 2. 最重要的就是在proguard-project.txt添加混淆的申明了: a. 把所有你的jar包都申明进来,例如: -libraryjars libs/apns_1.0.6.jar -libraryjars li
现在我们知道了Gradle如何工作,如何创建自己的Task以及Plugin,如何执行test任务,如何设置CI。这一章会包含一些小技巧,接下来会从以下Topic进行讨论:
做海外项目的同学一定都会遇到马甲包的问题,马甲包是指除了与主包ICON和应用名不一致,其它内容基本相同。 作用:
领取专属 10元无门槛券
手把手带您无忧上云