如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多的优化效果: 在一些版本的 Android 设备上,DEX 代码会在安装或者运行时被编译成机器码。...在您读 ProGuard 手册时,您没必要看那些 输入 / 输出的部分,因为这些 Android Gradle 打包插件会替您指定输入源(您和第三方库的代码) 和 Android jar 库(您构建应用时用到的...在某些情况下,ProGuard 的警告确实有助于您发现闪退的罪魁祸首和关于您配置上的其他问题。...作为一个可选的方案来写 ProGuard 规则,您可以直接在某个不想被混淆和移除的类、方法、属性上添加 @Keep 注解。...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版的 SDK Tools 和 Android Gradle 插件版本2.2.0+上,可以在构建时从
ProGuard会把处理的结果写到一个或者多个Jar包中。如果输入的文件包含了资源文件,那么它们的名字和内容都会被obfuscated类名所影响。...而其他的classes和class members就会被丢弃 Optimization:ProGuard进一步优化代码。...经过之前的优化,非入口的Classes和Methods都可以变成private,static,final,而没用的参数也会被移除,一些函数会被内联 Obfuscation:ProGuard会重命名非入口的...在ProGuard中,Classes和Class Member都可以创建或者通过名字动态调用,这种方式也是一个特殊的入口。...和Class Member会在Shrinking阶段被保存,并且String参数也会在Obfuscating阶段正确的更新 更多的,ProGuard对于Keep一些必须出现的Class或者Class Members
介绍 之前介绍了如何使用命令行将Jar包根据配置文件进行ProGuard,以及ProGuard的过程,会遇到的问题等。接下来会介绍常用的ProGuard如何配置参数。...例如:**.Test可以匹配除了根目录下所有包名下的Test类。mypackage.**则可以匹配所有在mypackage和它子目录的所有类 而Fields和Methods与Java中类似。...默认ProGuard会读取public以及non-public的类。然而,non-public的类通常没有关联的。可以忽略他们,提升ProGuard速度,而且也不会影响output。...如果因为这个option无法找到那个class的话 ,ProGuard会打印出来Warning的。...默认的,ProGuard在解析classes会跳过这些类成员,因为程序通常不会引用它们。有些情况下,程序的包和Library的包相同,从而可以引用包可见的类成员。
major":["理发","挖掘机"],"name":"王小二","has_girlfriend":false,"school":"蓝翔","comment":"这是一个注释","age":25.2} 和上面预期的一样...关于URL的getFile()和getPath()方法区别: 见这里https://blog.csdn.net/l375852247/article/details/7999063 Gson: ...字段上添加@SerializedName("NAME"),这是Gson中的属性,如图: 则运行结果如下,name变成了大写。...自动用ArrayList实现 比如再改为Set 那么就是LinkedHashSet实现,更多的大家可以自己去尝试 gson中的集合类和java中的数组其实是一一对应的,不需要我们做额外的事情...gson适合服务端开发,在集合的使用和定义别名上有优势
将下面的配置复制到你的 proguard-rules.pro 文件中: ##---------------Begin: proguard configuration for Gson --------...will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { ; } ##---------------End: proguard configuration for Gson ---------- 注:将上面的 com.google.gson.examples.android.model...换成你自己项目的实体类的包名!!!...Gson 官方混淆地址:https://github.com/google/gson/blob/master/examples/android-proguard-example/proguard.cfg
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解。...ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类、字段和函数等,达到压缩、优化和混淆代码的功能。...根据ProGuard的具体使用环境,我分在Eclipse工具和android源码两种编译环境浅谈ProGuard的使用方法。...ProGuard的混淆文件:proguard-project.txt和project.properties(在老版本的ADT中,只会生成一个叫proguard.cfg的文件)。...此时就需要我们配置混淆的个性化文件proguard-project.txt(eclipse环境中)或者proguard.flags(android源码环境),在其中去配置不需要混淆的类、方法和变量等。
混淆代码能有效防止被反编译,防止自己的劳动成果被别人窃取; 混淆配置文件及开关的设置 配置文件的位置以及开关的设置位置,android studio 和eclipse稍微有些差异,这里以android...解读一个混淆配置 proguard的语法规则可参考参考链接ProGuard在线说明手册 下面是我对一个配置加上了注释,详细看过了之后,便可以打造自己的简单配置了。...-keep class com.google.gson.stream.** { *; } -keep class com.google.gson.examples.android.model...2. dump.txt 描述apk内所有class文件的内部结构。 3. seeds.txt 列出了没有被混淆的类和成员。 4. usage.txt 列出了源代码中被删除在apk中不存在的代码。...主要事项 上一句保护,下一句启用modifers, 启用无效; 上一句启用modifiers,下一句保护,保护有效。
,别人想弄懂代码的架构和具体意思也比较难。...5.过滤引入的第三方jar包,so文件和外部lib等 //过滤第三方jar包,com.google.gson替换成要想要过滤的包名 -dontwarn com.google.gson.** -keep...还有一种情况是可以正常打包出APK文件,但是不一定能运行,能运行也会在某一步上出错,这种情况一般是因为把代码中不可混淆的字段或文件给混淆了比如引入的jar包和so文件等,导致程序功能变化。.../下载proguard,目前我下载并使用的是proguard5.1 2.解压proguard5.1,执行 bin目录下的proguardgui.bat文件打开ProGuard工具 从Android项目到处...ProGuard工具,点击左边“input/output”菜单,然后点击右边的“Add input”按钮,添加需要混淆的jar包,我这里是test.jar,然后点击“add output”,选择输出的路径和包名
true代表混淆 minifyEnabled true //混淆需要用到的一个工具:proguard,对应的一个文件是:proguard-android.txt(这个文件在android-sdk...\tools\proguard目录下) //proguard是一个压缩、优化和混淆Java字节码文件的免费工具 proguardFiles getDefaultProguardFile...('proguard-android.txt'), 'proguard-rules.pro' } 在proguard-rules.pro中添加: ?...##记录生成的日志数据,gradle build时在本项目根目录输出## #apk 包内所有 class 的内部结构 -dump class_files.txt #未混淆的类和成员 -printseeds...com.google.gson.examples.android.model.** { *; } 同步,然后再打包 以上就是本文的全部内容,希望对大家的学习有所帮助。
请尊重他人的劳动成果,转载请注明出处:《Android代码混淆技巧》 因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。...SDK已经集成了ProGuard工具,开发者可以从SDK目录下的\tools\proguard目录中进行查看。 ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。...它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。它可以将类、字段和方法使用短无意义的名称进行重命名。...排除对第三方库的混淆需要在混淆规则文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中将含有混淆规则的文件名配置进去就行了...)中添加如下规则: 1.如果使用了Gson之类的工具要使JavaBean类即实体类不被混淆。
大家好,又见面了,我是你们的朋友全栈君。 Android 代码混淆 简介 在我们日常开发中,对已经开发完成的源代码,需做一些代码混淆工作,以对代码起到一种保护和降低安装包体积的作用。...shrinkResources true //proguard-android-optimize.txt:SDK提供的默认混淆文件...'), 'proguard-rules.pro' } } } 配置混淆文件 在app的proguard-rules.pro文件中编写混淆代码即可 混淆语法 命令 作用...-keepclasseswithmembers 防止拥有该成员的类和成员被移除或者被重命名 -keepclasseswithmembernames 防止拥有该成员的类和成员被重命名 类通配符 * 匹配任意长度字符...是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
最重要的就是在proguard-project.txt添加混淆的申明了: a....project.properties文件中加上你的混淆文件申明了,如下: proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt...OK, 最后一步,打签名包测试,如果有问题,仔细看下Log也许有得类不能混淆,那么你得加入到proguard-project.txt文件中 -------以上就是混淆代码的全过程了 最后贴上proguard-project.txt...的全部代码: # To enable ProGuard in your project, edit project.properties # to define the proguard.config...class com.android.vending.licensing.ILicensingService -keep class com.google.gson.stream.** { *
前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep。...proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'...##记录生成的日志数据,gradle build时在本项目根目录输出## #apk 包内所有 class 的内部结构 -dump proguard/class_files.txt #未混淆的类和成员...额外添加的,一般在第三方的文档中都有 比如: #gson #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。...#添加了反而有可能在打包的时候遭遇同一个jar多次被指定的错误,一般只需要添加忽略警告和保持某些class不被混淆的声明。
R8 的压缩特性 R8 通过下面 4 项特性来减少 Android 应用大小: 摇树优化 (Tree shaking): 使用静态代码分析来查找和删除无法访问的代码和未实例化的类型; 优化 : 通过删除无效代码...不过,大多数应用都会使用 Jetpack、OkHttp、Guava、Gson 和 Google Play 服务 等第三方库,并且用 Kotlin 编写的应用始终包含 Kotlin 标准库。...启用 R8 来压缩您的应用 要在 release build 上启用 R8 压缩,需要在应用的主 build.gradle 文件中将 minifyEnable 属性设置为 true,如下所示: android...true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') } } } 应用代码中的反射...第三方库也可能用到反射,并且由于第三方库实际上是您的应用的一部分,您 (作为应用开发者) 将负责这些库以及您自己的代码中使用的反射。
一般自己打包的jar包需要屏蔽混淆的代码: -dontwarn com.nostra13.universalimageloader.** 这是需要防止需要被打包 -keep class com.nostra13...包屏蔽代码混淆时不能混淆相关的bean类不然会出现解析错误,无法解析 ##---------------Begin: proguard configuration for Gson ---------...-keepattributes Signature # Gson specific classes -keep class com.google.gson.stream.** { *; } # Application...= proguard.cfg 加上 -ignorewarnings 屏蔽warning警告日志,脚本中把这行注释去掉 Android导入第三方jar包,proguard混淆脚本(屏蔽警告,不混淆第三方包...class/merging/* //这1句是导入第三方的类库,防止混淆时候读取包内容出错,脚本中把这行注释去掉
.** { *;} ##---------------Begin: proguard configuration for Gson ---------- # Gson uses generic...Proguard # removes such information by default, so configure it to keep all of it....classes that will be serialized/deserialized over Gson ##---------------End: proguard configuration...------------------------------------------------------- #---------------------------------3.与js互相调用的类...---------------------------------------------------------- #---------------------------------4.反射相关的类和方法
什么是混淆 关于混淆维基百科上该词条的解释为 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。...getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguard是什么 Java官网对Proguard的定义...Proguard是一个集文件压缩,优化,混淆和校验等功能的工具 它检测并删除无用的类,变量,方法和属性 它优化字节码并删除无用的指令. 它通过将类名,变量名和方法名重命名为无意义的名称实现混淆效果....GSON的序列化与反序列化 GSON是一个很好的工具,使用它我们可以轻松的实现序列化和反序列化.但是当它一旦遇到混淆,就需要我们注意了.....详解Java中的注解 其他不该混淆的 jni调用的java方法 java的native方法 js调用java的方法 第三方库不建议混淆 其他和反射相关的一些情况 stacktrace的恢复 Proguard
一、AndroidStudio Gradle第三依赖统一管理 二、AndroidStudio Gradle基于友盟的多渠道打包 三、AndroidStudio安全管理签名文件keystroe和签名密码...这三篇文章很好的讲解了gradle的在打包和项目依赖管理的优点,大家可以参考一下,来提高自己的开发效率,增强签名文件的安全性。...', gson : 'com.google.code.gson:gson:2.8.0', // ------------- log打印工具 ------------- logger..." } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt..." } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt
proguard 问题和风险 代码混淆后虽然有混淆优化的好处,但是它往往也会带来如下的几点问题 1,混淆错误,用到第三方库的时候,必须告诉 proguard 不要检查,否则proguard 会报错。...自定义View Android Parcelable Android R 文件 Android Parcelable 枚举 各个开发人员必须检查自己的code 是否用到反射 ,和其他不能混淆的地方...升级办法很简单,就是把android sdk目录下的tool/proguard目录覆盖一下即可。...使用 gson 需要的配置 当Gson用到了泛型就会有报错,这个真给郁闷了半天,提示“Missing type parameter”。...所以上面给的东西还不够,还要加上 # 用到自己拼接的JsonObject -keep class com.google.gson.JsonObject { *; } 个人建议减少这些依赖包混淆带来的麻烦
关于AndroidStudio混淆打包 proguard-rules.pro 的配置 最近在搭建一个APP的时候,使用了混淆打包的方式,然后发现死活打包不上。...后来求爷爷告奶奶才搞正常了,这里记录一下,其实关键点就是在这个 proguard-rules.pro 文件里面 ,一下是我自己的配置,大家看着,就知道怎么配置了。...specified # in D:\Android\sdk/tools/proguard/proguard-android.txt # You can edit the include path and...Signature, Annotation -keep class com.google.gson.** {*;} #-keep class sun.misc.Unsafe { *; } -keep...,gradle build时在本项目根目录输出## #apk 包内所有 class 的内部结构 -dump class_files.txt #未混淆的类和成员 -printseeds
领取专属 10元无门槛券
手把手带您无忧上云