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

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

Annotation-specified bean name ‘a’ for bean class 问题原因: 出现这个问题主要还是混淆之后,bean重名了,spring默认是把类名的首字母小写加载到容器里面...,我们混淆类名之后,就容易造成beanName重复。...解决方案: 庆幸的是,我们可以通过改变spring加载bean的命名策略来解决这个问题,把包名带上,同时在获取Spring上下文getBean的时候,加上包名路径即可 启动类配置,具体如下: @SpringBootApplication...Bean和Bean属性的,这类bean要保留,不能被混淆 我这里保留了所有的接口和接口里面的方法,已经我们自定义的抽象类BaseService里面的方法名不会被混淆,这些你们可以自己定义,而且我这里定义了有标注...正常的application启动就完事了 其他的没了,就看你们还有没有什么特定的类不能被混淆,以及你们要混淆的力度(我们的要求是保留所有类名、接口信息和抽象类信息,除此之外的所有类和方法都被混淆!)

7K40

Android插件化、热补丁中绕不开的ProGuard的坑

背景 在我们实施插件化、热补丁修复时,为了让插件、补丁和原来的宿主兼容,必须依赖ProGuard的applymapping功能的进行增量混淆,但在使用ProGuard的applymapping时会遇到部分方法混淆错乱的问题...现象 下面是在使用-applymapping之后ProGuard输出的警告信息,同时我们发现在使用-applymapping得到的混淆结果中这些方法的名称都和原来宿主混淆结果的名称不一致的现象,导致使用...-applymapping后的结果和宿主不兼容。...升子模块依赖的stop方法不兼容,造成子模块无法升级。 了解一下mapping mapping.txt是代码混淆阶段输出产物。...obfuscate 混淆以类为单位,为类、类成员分配名称,处理冲突名称,输出mapping文件,之后会输出一份经过优化、混淆后的jar。

1.6K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Studio实现打渠道包,切换环境,混淆配置等

    gradle的加入配置便宜版本报名,签名文件,配置打包生成apk文件名称规则,配置url,配置渠道所有的配置都是android {}中只进行的,配置一些关于android的基本配置。...添加对jar的支持 有时候从eclispe移植过来时,返现jar无法加载,找不到地址 在android {}加入以下配置 sourceSets { main { jniLibs.srcDir...这句话,混淆后就会生成映射文件# 包含有类名->混淆后类名的映射关系# 然后使用printmapping指定映射文件的名称 -verbose -ignorewarnings # Optimization...class * { void *(**On*Event); } 常规混淆配置好,可以增加你项目中的混淆了,如数据模型bean,第三方sdk等.混淆也可以写个接口类,然让不混淆的类实现此接口比较简便...,在gradle总直接配置不混淆的base即可。

    1.3K20

    SpringBoot 玩一玩代码混淆,防止反编译代码泄露

    一共就两步 第一步, 在项目路径下,新增一份文件 proguard.cfg : proguard.cfg #指定Java的版本 -target 1.8 #proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等...# 对于类成员的命名的混淆采取唯一策略 -useuniqueclassmembernames #混淆时不生成大小写混合的类名,默认是可以大小写混合 -dontusemixedcaseclassnames...#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代 -adaptclassstrings #对异常、注解信息予以保留 -keepattributes Exceptions...enum * { *; } # 不混淆所有类,保存原始定义的注释- -keepclassmembers class * { @org.springframework.context.annotation.Bean...,可以配置哪些类不参与混淆,哪些枚举保留,哪些方法名不混淆等等。

    88530

    SpringBoot 玩一玩代码混淆,防止反编译代码泄露

    一共就两步 第一步, 在项目路径下,新增一份文件 proguard.cfg : proguard.cfg #指定Java的版本 -target 1.8 #proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等...# 对于类成员的命名的混淆采取唯一策略 -useuniqueclassmembernames #混淆时不生成大小写混合的类名,默认是可以大小写混合 -dontusemixedcaseclassnames...#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代 -adaptclassstrings #对异常、注解信息予以保留 -keepattributes...enum * { *; } # 不混淆所有类,保存原始定义的注释- -keepclassmembers class * { @org.springframework.context.annotation.Bean...,可以配置哪些类不参与混淆,哪些枚举保留,哪些方法名不混淆等等。

    1.1K20

    Maven - 代码混淆Proguard踩坑记

    因为Java代码很容易被反编译,所以有时候需要对代码进行混淆,以保护你的知识产权。 ProGuard主要做了三件事: 压缩代码 - 它会删除程序中没有用到的类、属性和方法,让程序变小。...混淆代码 - 它会把类名、属性名和方法名改成难懂的名字,让代码变得很难看懂。...-keepparameternames # 保留枚举成员及方法 -keepclassmembers enum * { *; } # 不混淆所有类,保留特定注解的原始定义注释 -keepclassmembers...常见问题和解决方法 类/方法未找到错误:确保Proguard配置中保留了所有必要的类和方法。...可以尝试使用Proguard的-keep指令保留这些类。 反射相关错误:如果项目中使用了反射,确保在Proguard配置中保留相关类和方法。

    83900

    Proguard 常用规则

    例如,你可能希望保留实现 Serializable 接口的类的所有类名,以便处理后的代码与任何原始序列化的类保持兼容。 完全不用的类仍然可以删除。只有在混淆时才适用。...指定要保留名称的类和类成员,条件是所有指定的类成员都存在于收缩阶段之后。...-useuniqueclassmembernames 指定将相同的混淆名称分配给具有相同名称的类成员,并将不同混淆名称分配给名称不同的类成员(对于每个给定的类成员签名)。...例如,考虑两个不同的接口,它们包含具有相同名称和签名的方法。如果没有此选项,这些方法可能会在第一个混淆步骤中获取不同的混淆名称。...除了方法参数列表不包含参数名称外,字段和方法在Java中的定义非常类似(就像在javadoc和javap等其他工具中一样)。

    1.8K20

    Android 混淆那些事儿

    对比图如下,从图中可以看到未混淆apk所有的代码都一目了然,随便改改资源和代码,就能变成一个新的apk。...我们来看一下Proguard的几个步骤如何处理Entry Points。 在压缩阶段,Proguard从上述Entry Points开始遍历搜索哪些类和类成员被使用。...在优化阶段,Proguard进一步设置非Entry Point的类和方法为private、static和final来进行优化,不使用的参数会被移除,某些方法会被标记被内联。...构建输出 构建时Proguard都会输出下列文件: (1)dump.txt —- 说明APK中所有类文件的内部结构 (2)mapping.txt —- 提供原始与混淆过的类、方法和字段名称之间的转换....jar test.apk 混淆过程中会输出log,混淆后会出现和apk同名的文件夹,里面包含了混淆后mapping的对应文件,新签名打包的apk和混淆后的资源文件目录。

    3.3K50

    android混淆那些坑

    再压缩的步骤中,ProGuard或从上述的EntryPoint开始递归遍历,搜索那些类和类成员在使用。对于没有被使用的类和类的成员,就会在压缩阶段丢弃。...在混淆的步骤中,ProGuard会对非EntryPoint的类和方法进行重命名。 Proguard使用 Proguard工具目录结构 ?...(windows大小写不敏感) -dontusemixedcaseclassnames # 指定不去忽略非公共的库的类 # 默认跳过,有些情况下编写的代码与类库中的类在同一个包下,并且持有包中内容的引用...,LineNumberTable 不混淆,需要保留的东西 # 保留所有的本地native方法不被混淆 -keepclasseswithmembernames class * { native <...* { void *(**On*Event); } 一般第三方和自己的bean文件是不需要混淆的。

    3.2K60

    使用proguard混淆springboot代码

    ##对于类成员的命名的混淆采取唯一策略 -adaptclassstrings ## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代 -dontusemixedcaseclassnames...## 混淆时不生成大小写混合的类名,默认是可以大小写混合 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile...;2就是要通过keepattributes保留注解等原信息,不然影响springboot启动 这里因为示例工程用到了枚举,所以也保留了枚举 bean命名重复异常 由于proguard混淆貌似不能指定在basePackages...下面类名混淆后唯一,不同包名经常有a.class,b.class,c.class之类重复的类名,因此spring容器初始化bean的时候会报错。...doc ProGuard manual Tips for using ProGuard with Spring framework Spring bean自定义命名策略 Understanding Spring

    3K20

    Android Proguard(混淆)

    代码优化配置 ---- -dontoptimize 声明不优化输入文件。默认情况下,优化选项是开启的,并且所有的优化都是在字节码层进行的。...proguard会自动的分析你的代码,但不会分析处理类库中的代码。例如,可以指定System.currentTimeMillis(),这样在optimize阶段就会删除所有的它的调用。...比如说,两个接口拥有同名方法和相同的签名。如果没有这个配置,在第一次打包混淆之后,他们两个方法可能会被赋予不同的混淆名。...如果没有加classfilter,所有的符合要求的字符串常量都会被混淆;如果带有classfilter,只有在匹配的类中的字符串常量才会受此影响。...这意味着该元素参与优化阶段,但是不参与压缩和混淆阶段。特殊用途的时候使用。 allowobfuscation 与前几个类似,修饰-keep,只参与混淆阶段,但是不参与压缩和优化阶段。

    2.7K30

    「玲珑宝塔」优化 Apk 包大小

    CPU 与指令集的每种组合都有专属的应用二进制接口,即 ABI。ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。您必须为应用要使用的每个 CPU 架构指定 ABI。...此项常常和代码压缩配合使用; 混淆:缩短类和成员的名称,从而减小 Dex 文件大小; 优化:检查并重写代码,进一步减小 Dex 文件大小。...(引入官方解释) 混淆处理的目的是通过缩短应用的类、方法和字段的名称来减小应用的大小 混淆效果(摘自官方): androidx.appcompat.app.ActionBarDrawerToggle$DelegateProvider...: Android 四大组件不能混淆; 反射、注解、枚举不能混淆; JS、Native 调用的方法不能混淆; 基础 Bean 类以及序列化实体类不能混淆; 自定义控件不能混淆; 资源文件不能混淆(当然也有骚操作...R8 每次运行时都会创建一个 mapping.txt 文件,其中列出了混淆过的类、方法和字段名称与原始名称的映射关系。此映射文件还包含用于将行号映射回原始源文件行号的信息。

    85220

    团队协作中如何处理ConflictingBeanDefinitionException异常

    这个问题可能出现在团队协作开发中,特别是当不同的开发者在不同的模块中定义了相同名称的Bean时。在本文中,我们将探讨这个异常出现的原因、解决方案以及在团队协作开发中的编码建议。...这可能发生在以下情况: 相同名称的Bean定义:不同的模块或类中定义了具有相同名称的Bean,例如,两个不同的模块都定义了名为 “ABean” 的Bean。...相互依赖Model中Bean定义冲突:在微服务项目中,ModelA中定义了ABean,ModelB中定义了ABean,现由于业务原因,ModelA的pom文件中引入ModelB的坐标,也会引发此异常。...处理冲突的Bean: 修改/删除冲突的Bean定义: 如果有多个相同名称的Bean定义,需要查看团队代码、知识库文档等信息,进行适当的文档和沟通,了解冲突Bean的功能和创建该Bean的背景,根据该Bean...当前是否正在被使用或者是被废弃、以及自己创建同名Bean的需求,判断对该Bean的修改,确保只有一个Bean定义存在,并加以适当的注释、文档说明,以避免未来的混淆和冲突。

    85920

    Android编译的小知识

    和 dexing,从而将class文件打包成dex ps:R8是Proguard替代工具,用于代码压缩和混淆,包括以下: shrink:摇树优化,去除无用的类、方法、域等代码 optimize:对字节码的优化...,如删除未使用的参数,内联一些方法等 obfuscate:对类、方法的名字进行混淆,使用更短更无规律的字符替代名字 preverify:对字节码进行校验,是 ProGuard 对前面所有优化的一个正确性校验...gradle注册了一个新的task,在dexbuilder阶段将输出“register suceess”日志 三、 “修改”AGP源码 这里并不是真的修改AGP源码,而是基于类加载机制,如果出现同名的文件...基于这个原理,我们可以在 classpath "com.android.tools.build:gradle:${agp_version}" 声明的上方引入我们自定义的同名AGP文件jar,这样当实际运行的时候会优先执行我们自定义的逻辑...**缺点:**无法修改字节码,处理场景并不灵活 **“修改”AGP:**适用于解决AGP版本之间不兼容的问题 **优点:**可以达到直接修改“AGP”行为的方式 **缺点:**需要兼容每个版本,不够灵活

    87330

    Android 代码混淆 混淆方案

    提供混淆前后类、方法、类成员等的对照表 seeds.txt 列出没有被混淆的类和成员 usage.txt 列出被移除的代码 我们可以根据 seeds.txt 文件检查未被混淆的类和成员中是否已包含所有期望保留的...”可以分为两部分,一部分是Java 代码的优化与混淆,依靠 proguard混淆器来实现;另一部分是资源压缩,将移除项目及依赖的库中未被使用的资源(资源压缩严格意义上跟混淆没啥关系,但一般我们都会放一起用...需要特别介绍的是与保持相关元素不参与混淆的规则相关的几种命令: 命令 作用 -keep 防止类和成员被移除或者被重命名 -keepnames 防止类和成员被重命名 -keepclassmembers...-keep public class com.biaobiao.example.Test { *; } 不混淆某个包所有的类 -keep class com.biaobiao.test.**...最后附上一个我在实际项目中的混淆方案 proguard-android.txt文件内容 # 代码混淆压缩比,在0~7之间 -optimizationpasses 5 # 混合时不使用大小写混合,混合后的类名为小写

    2.7K30

    Android 构建过程分析

    当第三方依赖中的assets或res文件与本地文件有冲突时,会优先选用本地文件。...能正常运行; manifest元素只与子manifest元素合并; intent-filter元素在合并中不会被改变,只会被添加到其父节点中去; 冲突发生时,可通过合并冲突标记进行解决,需要引入android...中添加的第三方依赖; 编译后可对代码进行混淆处理,主要包括删除无用类、字节码优化、重命名等操作,只需在build.gradle中配置混淆规则即可 buildTypes { release {...若有额外的类需要被加入到主dex中,可以新建一个文件并以proguard的语法指定,然后在build.gradle中把此文件配置到multiDexKeepProguard中去。...实际上是调用了proguard,只是要比常规的proguard简单一些,不执行混淆、优化跟预检几个步骤,只需要shrink即可,以allclasses.jar为输入、manifest_keep.txt为混淆配置文件

    3.2K40

    Android 代码混淆规则

    ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。...Proguard作用 Android中的“混淆”可以分为两部分,一部分是 Java 代码的优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,将移除项目及依赖的库中未被使用的资源(资源压缩严格意义上跟混淆没啥关系...2.1 代码混淆 压缩(Shrinking):默认开启,用以减小应用体积,移除未被使用的类和成员,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的类和成员)。...(既在压缩阶段没有被删除的成员,效果和keep差不多) -keepnames class_specification:指定要保留名称的类和类成员,前提是在压缩阶段未被删除,仅用于模糊处理。...*; } 4.2 不混淆某个包所有的类 -keep class com.android.proguard.example.** { *; } 4.3 不混淆某个类的子类 -keep public

    2.6K10

    Android Support 和 AndroidX

    :xx.xx → Android 2.1,增加了很多Material Design的兼容类和素材,包含v4的全部内容,用得最多; support-v13 → Android 3.2,为平板开发推出的版本兼容包...*包下的API都是随系统发布的,而androidx.包下的API都是随着扩展库发布的,API基本不依赖于操作系统的具体版本; ② 命名规则 → AndroidX Library 中所有的库命名规则不再包含具体的操作系统...proguard-rules进行修改~ 0x4、一些问题收集 ① Support 和 AndroidX 能共存吗?...androidx中对错误的检查和处理更严格,同一个xml布局文件中存在同名id会报错。 ④ attr.xml 中重复的属性名称会报错?...⑤ Glide注解不兼容AndroidX 答:Glide升级到4.8.0以后,具体可见 官方issues ⑥ 没有迁移到androidX,却出现Support库和AndroidX库冲突?

    2.4K10

    Kotlin Primer·第三章·Kotlin 与 Java 混编

    3.1.3 Android proguard 的坑 注:我们团队遇到过这样的一个坑,在 Android 开发的时候,如下代码会在混淆以后,发生异常 var str = some?s?.d ?...3.2.2 与 Kotlin 关键字冲突的处理 Java 有 static 关键字,在 Kotlin 中没有这个关键字,你需要使用@JvmStatic替代这个关键字。...同样,在 Kotlin 中也有很多的关键字是 Java 中是没有的。例如 in,is,data等。如果 Java 中使用了这些关键字,需要加上反引号(`)转义来避免冲突。...为了兼容 Java,Kotlin 默认会将所有的包级别函数放在一个自动生成的叫ExampleKt的类中, 在 Java 中想要调用包级别函数时,需要通过这个类来调用。...当然,也是可以自定义的,你只需要通过注解@file:JvmName("Example")即可将当前文件中的所有包级别函数放到一个自动生成的名为 Example 的类中。

    1.5K20

    SVG,Vector,gradle

    //是否开启混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro...,但是为了保证老APK的行为和以前兼容,只要APK的targetSdkVersion不变,那么即使这个APK安装在新的Android系统上,那么行为还是保持老的系统上的行为。...jar :只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。...Android Studio的Gradle组件默认提供了debug和release两个默认配置,这里主要用于是否需要混淆,是否调试。...,可以得到以下不同安装包,这两个apk如果在其中引用的了NAME,那么它会得到不同的值: 7.2 自定义buildConfig类 如果我们只需要定义一些简单的值,那么我们可以用buildConfig类:

    7310
    领券