首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Proguard -混淆内部包,同时保留外部包

Proguard是一种用于Android应用程序的代码混淆工具。它可以通过重命名类、方法和变量的名称,删除未使用的代码和优化字节码,从而使应用程序的源代码更难以理解和逆向工程。通过混淆内部包,Proguard可以保护应用程序的知识产权和商业机密,防止恶意用户逆向工程并窃取应用程序的源代码。

Proguard的主要优势包括:

  1. 代码混淆:Proguard可以将应用程序的源代码进行混淆,使其变得难以理解和逆向工程。这可以有效地保护应用程序的知识产权和商业机密。
  2. 优化字节码:Proguard可以对应用程序的字节码进行优化,删除未使用的代码和资源,从而减小应用程序的体积和加载时间。
  3. 代码压缩:Proguard可以对应用程序的源代码进行压缩,减小应用程序的体积,提高应用程序的性能和响应速度。
  4. 保留外部包:Proguard可以保留外部包,即不对外部库进行混淆。这样可以确保应用程序与外部库的兼容性和稳定性。

Proguard的应用场景包括:

  1. Android应用程序开发:Proguard是Android开发工具链中的一部分,可以用于保护应用程序的源代码和资源,防止被逆向工程和盗版。
  2. 商业应用程序开发:对于商业应用程序,保护知识产权和商业机密非常重要。通过使用Proguard进行代码混淆,可以有效地保护应用程序的源代码和商业逻辑。
  3. 安全敏感应用程序开发:对于一些安全敏感的应用程序,如金融应用程序和电子商务应用程序,保护用户的隐私和数据安全非常重要。通过使用Proguard进行代码混淆,可以增加攻击者逆向工程的难度,提高应用程序的安全性。

腾讯云提供了一系列与应用程序开发和云计算相关的产品,其中包括:

  1. 腾讯云移动应用开发平台:提供了一站式的移动应用开发解决方案,包括应用开发、测试、发布和运营等环节。
  2. 腾讯云安全产品:提供了一系列与应用程序安全相关的产品,包括Web应用防火墙(WAF)、DDoS防护、数据加密等。
  3. 腾讯云服务器:提供了一系列弹性计算服务,包括云服务器、容器服务、函数计算等,可以满足不同规模和需求的应用程序部署和运行。
  4. 腾讯云数据库:提供了一系列云数据库服务,包括关系型数据库(MySQL、SQL Server等)、NoSQL数据库(MongoDB、Redis等)和数据仓库等。
  5. 腾讯云存储:提供了一系列云存储服务,包括对象存储(COS)、文件存储(CFS)和块存储(CBS)等,可以满足不同类型和规模的数据存储需求。

更多关于腾讯云产品的详细介绍和使用指南,请访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android 安装优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

文章目录 一、开启 ProGuard 混淆 二、混淆文件编写 三、混淆前后对比 四、build.gradle 完整配置文件 五、参考资料 一、开启 ProGuard 混淆 ---- 在 build.gradle..., 可能会在该步骤被删除 ; 这里需要配置混淆文件 , 保留反射中使用的类 ; 优化 Optimize : 优化字节码 , 移除无用指令 ; 混淆 Obfuscate : 混淆 Java...; 遇到某个或类编译遇到警告退出 , -dontwarn 配置该不要爆出警告 ; 遇到没有找到的类 , 使用 -keep 不要混淆该类 ; 常用的混淆配置 : " -dontwarn " : 不要报出警告信息..., 如果出现警告 , 编译打包会被终止 ; # com 名下不要爆出警告 -dontwarn com.** " -keep " : 不要混淆的类 ; # com 名下的类不要混淆 -keep class...com.**{*;} 三、混淆前后对比 ---- 混淆前编译的 APK 安装 : \rm 3.6 MB 混淆后编译的 APK 安装 : \rm 1.7MB 四、build.gradle 完整配置文件

3.6K20

Maven - 代码混淆Proguard踩坑记

同时也更安全。...ProGuard会自动混淆大部分代码,但有些代码不应该被混淆,比如注解、native方法、反射用到的方法等,需要在配置文件中指定保留 -keep class com.example.** { *; }...# 保留异常、内部类、签名、弃用注解、源文件、行号表、注解、封装方法等信息 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,...*; } # 保留所有中原始接口文件不进行混淆 # -keep interface * extends * { *; } # 保留方法参数名 -keepparameternames # 保留枚举成员及方法...运行时错误:检查混淆后的JAR中是否有必要的资源文件,并确保它们在混淆过程中未被移除。 推荐 推荐 代码加密classfinal , 不推荐Proguard,太复杂

22600

Android 代码混淆规则

如果开启了混淆Proguard默认情况下会对所有代码,包括第三方都进行混淆,可是有些代码或者第三方是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。 2....InnerClasses:保持内部类不被混淆 -keepattributes SourceFile,LineNumberTable:抛出异常时保留代码行号 3.2 保留选项 -keep [,modifier...通配符**,匹配任意长度字符,并且包含名分隔符(.) extends,即可以指定类的基类 implement,匹配实现了某接口的类 $,内部类 “成员”代表类成员相关的限定条件,它将最终定位到某些符合该限定条件的类成员...*; } 4.2 不混淆某个所有的类 -keep class com.android.proguard.example.** { *; } 4.3 不混淆某个类的子类 -keep public...void test(java.lang.String); } 4.8 不混淆某个类的内部类 -keep class com.android.proguard.example.Test$* {

2.5K10

Android 代码混淆

Android 代码混淆 简介 在我们日常开发中,对已经开发完成的源代码,需做一些代码混淆工作,以对代码起到一种保护和降低安装体积的作用。...'), 'proguard-rules.pro' } } } 配置混淆文件 在app的proguard-rules.pro文件中编写混淆代码即可 混淆语法 命令 作用...类extends 即可以指定类的基类 类implements 匹配实现了某接口的类 类$ 内部类 成员(方法)通配符 * 匹配任意长度字符,但不含名分隔符(.)...) # ############################################# # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆 # 因为这些子类都有可能被外部调用...support下的所有类及其内部类 -keep class android.support.** {*;} # 保留继承的 -keep public class * extends android.support.v4

1.3K30

Android制作AAR混淆后加载调用

代码实现 制作AAR 1.创建新的项目 新建一个Android Project,选择No Activity 2.创建外部调用类 在包下创建一个MathFun的类,里面写了一个Add的静态方法可以让外部调用...重点:多这一步的原因是为了后面的代码混淆,主要这里测试好多次,如果都放在相同的名下,保持MathFun的类不混淆,在外部看到的AAR时里面是没有方法的,如果都不混淆那MathMinify也会在AAR...} } ‍‍ 02 混淆规则 混淆会用无意义的短变量去重命名类、变量、方法,但是对于外部的一些引用是通过名字找到对应的方法和类。...如下例子就避免所有继承Activity的类被混淆 -keep public class * extends android.app.Activity 如果我们要保留一个类中的内部类不被混淆则需要用$符号...class/merging/* # dump.txt文件列出apk内所有class的内部结构 -dump class_files.txt # seeds.txt文件列出未混淆的类和成员

4.8K30

详解Android代码混淆实战

什么是代码混淆: Android SDK 自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。...如果开启了混淆Proguard默认情况下会对所有代码,包括第三方都进行混淆,可是有些代码或者第三方是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。...# ############################################# # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆 # 因为这些子类都有可能被外部调用...保留lib和compile引用的第三方jar不被混淆的方法: java -keep class 名.** { *; } 。...如:保留引用的科大讯飞的第三方jar不被混淆 java -keep class com.iflytek.** { *; } #网络请求等与外界通信不能混淆 -keep class com.xxxxx.function

1.5K51

Android 代码混淆 混淆方案

检查混淆结果 混淆过的必须进行检查,避免因混淆引入的bug。 一方面,需要从代码层面检查。...将混淆过的进行全方面测试,检查是否有 bug 产生。 解出混淆混淆后的类、方法名等等难以阅读,这固然会增加逆向工程的难度,但对追踪线上 crash 也造成了阻碍。...(很多老的混淆文件里会加,现在已经没必要) proguard-android.txt已经存在一些默认混淆规则,没必要在 proguard-rules.pro 重复添加 混淆简介 Android中的“混淆...通配符**,匹配任意长度字符,并且包含名分隔符(.) extends,即可以指定类的基类 implement,匹配实现了某接口的类 $,内部类 “成员”代表类成员相关的限定条件,它将最终定位到某些符合该限定条件的类成员...# 处理support -dontnote android.support.** -dontwarn android.support.** # 保留继承的 -keep public class *

2.5K30

Android插件化基础3----Android的编译打包流程详解

从上述地址下载ProGuard之后,能同时看到官方文档和示例,不过是英文的,目前市面上没有相应的中文翻译版,也没有一片详尽的介绍文章。...,基本混淆 第二步,针对APP量身定制 第三步,针对第三方jar的解决方法 下面我们就来详细看下 2.1 基本混淆 基本混淆又可以分为 基本指令 需要保留的东西 2.1.1 基本混淆 混淆文件的基本配置信息...2.2.2 内部内部类经常会被混淆,结果在调用的时候为空就崩溃了,最好的解决办法就是把这个内部类拿出来,单独成为一个类。...如果一定要内置,那么这个类就必须在混淆的时候保留,比如: # 保留内嵌类不被混淆 -keep class com.example.xxx.MainActivity$* { *; } 这个$符号就是用来分割内部类与其母体的标志...(六)、ProGuard混淆的注意事项 在使用ProGuard过程中,还有一些注意事项如下: 1、如何确保混淆不会对项目产生影响 测试工作要基于混淆进行,才能尽早发现问题,开发团队的冒烟测试,也是要基于混淆

2K22

Proguard 常用规则

在Android中,开启了混淆构建会在 /build/outputs/mapping/ 目录下会输出以下文件: dump.txt 描述APK文件中所有类的内部结构 mapping.txt 提供混淆前后类...例如,在处理由JDK 1.2或更早版本编译的库时,您可能希望保留合成类$方法的名称。 所以当处理使用处理过的库的应用程序时,混淆器可以再次检测到它(尽管ProGuard本身不需要这个)。...混淆的jars会因此变得稍大。 只有在混淆时才适用。 -keeppackagenames [package_filter] 指定不混淆给定的软件名称。 可选过滤器是名称的逗号分隔列表。...如果没有参数或空字符串(’’),程序将移动到根程序中。 该选项是进一步混淆软件名称的一个示例。它可以使处理后的代码更小,更难理解。 只有在混淆时才适用。...对于Java Micro Edition,需要进行预验证,因此如果指定此选项,则需要在处理的代码上运行外部预验证程序。 对于Java 6,预验证是可选的,但从Java 7开始,它是必需的。

1.6K20

一篇文章带你领略Android混淆的魅力

同时,可以设置 shrinkResources 为 true 来开启资源的压缩。...例如: # 保留:com.moos.media.entity 下面的类以及类成员 -keep public class com.moos.media.entity.** # 保留类:NumberProgressBar...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...原因是:枚举类内部存在 values 方法,混淆后该方法会被重新命名,并抛出 NoSuchMethodException。...同时,反序列化的过程创建对象从根本上来说还是借助于反射,混淆之后 key 会被改变,所以也会违背我们预期的效果。 4.4 四大组件 Android 中的四大组件同样不应该被混淆

94020

Android开发:请你吃一顿史上最全的Android混淆大餐

同时,可以设置 shrinkResources 为 true 来开启资源的压缩。...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...原因是:枚举类内部存在 values 方法,混淆后该方法会被重新命名,并抛出 NoSuchMethodException。...被反射的元素 被反射使用的类、变量、方法、名等不应该被混淆处理。...同时,反序列化的过程创建对象从根本上来说还是借助于反射,混淆之后 key 会被改变,所以也会违背我们预期的效果。 四大组件 Android 中的四大组件同样不应该被混淆

4.2K30

ProGuard混淆

预检测 -dontpreverify 执行ProGuard后会生成的文件: 1)dump.txt 描述apk文件里的所以类的内部结构 2)mapping.txt 列出了原始的和混淆后的类...methods>;} # 保留了继承自Activity、Application这些类的子类 # 因为这些子类都有可能被外部调用 # 比如说,第一行就保证了所有Activity的子类不要被混淆...,要在项目中搜索一下上述这些方法, # 将相应的类或者方法的名称进行保留而不被混淆。...# 针对第三方jar的解决方案 # 一般而言,这些SDK都是经过ProGuard混淆了的。 # 而我们所要做的,是避免这些SDK的类和方法在我们的App中被混淆。....** -keep public class * extends android.app.Fragment # 其他的第三方jar的解决方案这个就要取决于第三方jar混淆策略了 # -libraryjars

3K30

Android 混淆那些事儿

构建输出 构建时Proguard都会输出下列文件: (1)dump.txt —- 说明APK中所有类文件的内部结构 (2)mapping.txt —- 提供原始与混淆过的类、方法和字段名称之间的转换....** {*;} 保持和子的类名和里面的内容均不被混淆 (2)-assumenosideeffects 指令: 下文会用在android log的移除上 assumeosideeffects是Optimization...class/merging/* # 避免混淆Annotation、内部类、泛型、匿名类 -keepattributes *Annotation*,InnerClasses,Signature,EnclosingMethod...# 处理support -dontnote android.support.** -dontwarn android.support.** # 保留四大组件,自定义的Application等这些类不被混淆...$Creator *; } #第三方jar不被混淆 -keep class com.github.test.** {*;} #保留自定义的Test类和类成员不被混淆 -keep class com.lily.Test

3.2K50

Android安全攻防战,反编译与混淆技术完全解析(下)

当然这也是非常合理的,因为Debug版的APK文件我们只会用来内部测试,不用担心被人破解。...proguard中一共有三组六个keep关键字,很多人搞不清楚它们的区别,这里我们通过一个表格来直观地看下: 关键字 描述 keep 保留类和类中的成员,防止它们被混淆或移除。...keepnames 保留类和类中的成员,防止它们被混淆,但当成员没有被引用时会被移除。 keepclassmembers 只保留类中的成员,防止它们被混淆或移除。...{ *; } 然后保留Utils类中的未调用方法可以使用keepclassmembers关键字,后跟Utils完整类名,然后在内部声明未调用的方法,如下所示: -keepclassmembers...可以看到,现在android-support中所有代码都被保留下来了,不管是名、类名、还是方法名都没有被混淆。LitePal中的代码也是同样的情况: ?

1.6K70

Android性能优化(十)之App瘦身攻略

备注:对于Proguard,虽然效果很明显,但仍然需要谨慎; 代码混淆会拖慢项目构建速度,因此debug模式下关掉Proguard不至于RD在运行代码的时候抓狂; 因为在debug模式下关掉了Proguard...,如果混淆规则没有配置好,在Release模式可能会出现debug模式下不出现的Bug; Proguard也不是你想搞就能搞,如果App做了一段时间之后再来做Proguard,项目结构不规范的话,那Proguard...而缩减方法数,除了上面写到的普遍方法:移除无用方法、库、使用较小的SDK之外还有: 避免在内部类中访问外部类的私有方法、变量。...挡在Java内部类(包含匿名内部类)中访问外部类的私有方法、变量的时候,编译器会生成额外的方法,会增加方法数; 避免调用派生类中的未被覆写的方法,避免在派生类中调用未覆写的基类的方法;避免用派生类的对象调用派生类中未覆盖的基类的方法...这个字符串其实就是一个路径,比如:res/drawable-xhdpi/icon.png;混淆就是将这个路径改为R/s/f.png;同时修改resources.arsc文件的映射关系。

1.6K30

“码码”再也不用担心我的代码被反编译了!

1、更名,将私有类,私有的成员、方法体内部的变量名改名,改成a,b,c等等,甚至1,2,3(代码中不允许不等于成果物中不允许)。...2、进入【输入输出】选项 添加要输入/输出的.jar(输入.jar是你要混淆的jar,输出.jar混淆后得到的.jar)。...(2)把ajax调用的action取消混淆,建议使用,此方法对于页面无影响,只需要在工具.pro添加【保留不参与混淆的类和类成员】但要调试下 问题2:执行时报错,执行失败。...解决方案:调整混淆中的【保留】选项 问题3:执行时报错,执行失败,提示缺少类库。 解决方案:在【类库】时添加工程必须的lib,其中JDK下面的rt.jar(java基础类)必不可少。...同时也要注意使用的JDK版要与工程使用的JDK版本保持一致。 问题4:登录平台后,平台报错。提示缺少方法 。

2.9K60

最新版SpringBoot结合ProGuard实现代码混淆

混淆. 2、proguard-spring-boot-example 3、官方解释 4、Proguard的Keep使用方法 5、ProGuard 最全混淆规则说明 6、ProGuard代码混淆技术详解...7、使用proguard混淆springboot代码 前言 研究ProGuard也花了两天时间,其实最主要的时间花在前面proguard读取jar的时候相关jar冲突的问题,但是总的来说不用拆分SpringBoot...而且不止net.sf.proguard相关,还包括了com.guardsquare.proguard-base 和 com.guardsquare.proguard-core 相关的jar,所以真的连外网下很重要...解决方案: 庆幸的是,我们可以通过改变spring加载bean的命名策略来解决这个问题,把名带上,同时在获取Spring上下文getBean的时候,加上名路径即可 启动类配置,具体如下: @SpringBootApplication...正常的application启动就完事了 其他的没了,就看你们还有没有什么特定的类不能被混淆,以及你们要混淆的力度(我们的要求是保留所有类名、接口信息和抽象类信息,除此之外的所有类和方法都被混淆!)

5.7K40

android代码混淆

所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。...proguard 问题和风险 代码混淆后虽然有混淆优化的好处,但是它往往也会带来如下的几点问题 1,混淆错误,用到第三方库的时候,必须告诉 proguard 不要检查,否则proguard 会报错。...为了防止混淆出问题,你需要熟悉你所有的code ,系统的架构 ,以及系统和你code的集成的接口,并细心分析。 同时你必须需要一轮全面的测试。 所以混淆也还是有一定风险的。...    确定统一的混淆类的成员名称来增加混淆 -flattenpackagehierarchy {package_name}    重新包装所有重命名的并放在给定的单一中 -repackageclass...,干脆都全部保留混淆

1.5K80

深入探索 Android 瘦身(上)

扩展文件将保存到设备的共享存储位置(SD 卡或可安装 USB 的分区;也称为“外部”存储),应用可以在其中访问它们。...APK中所有类文件的内部结构 mapping.txt 提供原始与混淆过的类、方法和字段名称之间的转换,可以通过proguard.obfuscate.MappingReader来解析 seeds.txt...# 保留MainPagerFragment内部类JavaScriptInterface中的所有public内容不被混淆 -keepclassmembers class com.json.chao.wanandroid.ui.fragment.MainPagerFragment...同时,在选择第三方 SDK 的时候,我们可以将大小作为选择的指标之一,我们应该 尽可能地选择那些比较小的库来实现相同的功能。...为了能提供内部类和其外部类直接访问对方的私有成员的能力,又不违反封装性要求,Java 编译器在编译过程中自动生成 package 可见性的静态 access$xxx 方法,并且在需要访问对方私有成员的地方改为调用对应的

1.9K30
领券