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

如何在android AAR模块内部保留混淆接口参数

在Android AAR模块内部保留混淆接口参数的方法是使用ProGuard工具来配置混淆规则。ProGuard是一个Java字节码优化和混淆工具,可以帮助我们在发布应用时保护代码的安全性。

以下是具体的步骤:

  1. 在AAR模块的build.gradle文件中,添加ProGuard的配置:
代码语言:txt
复制
android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
  1. 在AAR模块的根目录下创建一个名为proguard-rules.pro的文件,用于配置混淆规则。
  2. 在proguard-rules.pro文件中添加以下规则来保留混淆接口参数:
代码语言:txt
复制
-keepclassmembers class * {
    @com.example.annotation.KeepArguments <methods>;
}

上述规则中的com.example.annotation.KeepArguments是一个自定义的注解,用于标记需要保留混淆接口参数的方法。你可以根据自己的需求来定义这个注解,并在需要保留参数的方法上添加该注解。

  1. 在AAR模块中使用该注解来标记需要保留混淆接口参数的方法:
代码语言:java
复制
import com.example.annotation.KeepArguments;

public class MyClass {
    @KeepArguments
    public void myMethod(String arg1, int arg2) {
        // 方法实现
    }
}

在上述示例中,myMethod方法使用了@KeepArguments注解来标记,这样在混淆过程中,ProGuard就会保留该方法的参数名。

需要注意的是,为了使ProGuard能够正确识别自定义的注解,需要在proguard-rules.pro文件中添加以下规则:

代码语言:txt
复制
-keepattributes *Annotation*

这样就可以在Android AAR模块内部保留混淆接口参数了。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),该产品提供了丰富的移动应用数据分析功能,可以帮助开发者深入了解用户行为和应用性能,优化应用体验。产品介绍链接地址:https://cloud.tencent.com/product/mta

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

相关·内容

Android制作AAR包并混淆后加载调用

重点:多这一步的原因是为了后面的代码混淆,主要这里测试好多次,如果都放在相同的包名下,保持MathFun的类不混淆,在外部看到的AAR包时里面是没有方法的,如果都不混淆那MathMinify也会在AAR...如下例子就避免所有继承Activity的类被混淆 -keep public class * extends android.app.Activity 如果我们要保留一个类中的内部类不被混淆则需要用$符号...,如下例子表示保持ScriptFragment内部类JavaScriptInterface中的所有public内容不被混淆。..., -keep class cn.hadcn.test.One { public ; } 表示One类下的所有public方法都不会被混淆,当然你还可以加入参数,比如以下表示用...support下的所有类及其内部类 support: -keep class android.support.** {*;} -dontwarn android.support.** -keep interface

5K30

Android 代码混淆

类extends 即可以指定类的基类 类implements 匹配实现了某接口的类 类$ 内部类 成员(方法)通配符 * 匹配任意长度字符,但不含包名分隔符(.)...Signature # 抛出异常时保留代码行号 -keepattributes SourceFile,LineNumberTable # 指定混淆是采用的算法,后面的参数是一个过滤器 # 这个过滤器是谷歌推荐的算法...-keep public class com.android.vending.licensing.ILicensingService # 保留support下的所有类及其内部类 -keep class...android.app.Activity{ public void *(android.view.View); } # 保留枚举类不被混淆 -keepclassmembers enum * {...(包括jar、aar、依赖) -keep class 第三方库包名.** { *;} : -keep class com.baidu.map.** { *;} 发布者:全栈程序员栈长,转载请注明出处:

1.3K30
  • 编写 Android Library 的最佳实践

    规范工程结构 一个规范的 Android Library 工程应该由一个 library模块与一个demo模块共同组成。 ?...这里推荐一种做法: 让你的接入者在他们项目 app 模块下新建 libs/xxx 目录,将你们提供的所有 aar拷贝进去,这个 XXX 可以是你们渠道的名字,以后这个下面的 aar 就全是你们的,跟其它的隔离开...('proguard-android.txt'), 'proguard-rules.pro' } 这样一来,调用者依赖了你的库之后,除了你自己暴露的方法或者类,一些内部实现就不那么容易找到了。...其实 Android 的编译系统早就支持库模块包含自己的 ProGuard 配置文件了,如果你希望你自己库里的一些代码,在调用者编译时也不被混淆,可以在自己 library 的 proguard-rules.pro...但是你没有办法保证接入方应用的 armeabi 文件里也是空的,一旦这里面有 so ,android 就会去这里面找;还有一种可能就是现在很多应用会设置 abiFilter 去过滤掉一些 abi,万一人家只想保留

    1.2K01

    Android工程化实践:组件化发布

    maven.aliyun.com/nexus/content/repositories/jcenter' } 什么是 Gradle 插件 「Gradle 插件」和「Gradle」这两个概念是比较容易混淆的...例如: com.android.application:Android 应用插件 com.android.library:Android 模块插件 kotlin-androidAndroid Kotlin...无法发布应用模块 plugins { id 'com.android.application' // 无法发布应用模块 id 'kotlin-android' id 'maven...其中两个仓库比较常用: maven-release:策略为 Release 的宿主类型仓库,用于部署内部组件的发布版本;maven-snapshots:策略为 Shapshot 的宿主类型仓库,用于部署内部组件的快照版本...步骤 4:在发布模块配置参数模块级配置参数会覆盖项目级配置参数模块级 gradle.properties MAVEN_ARTIFACTID = maven MAVEN_VERSION = v1.0.0

    2.5K20

    JJEvent 一个可靠的Android端数据埋点SDK

    然后考虑到,让用户可以动态配置各种参数,比如周期,是否是debug模式,主动推送周期等等.所以在内部使用buider模式,进行动态构建. 1 JJEventManager.Builder...DBHelper模块 刚开始想用模板方法和继承来做,将CRUD的实现放在宿主中, 但是, 由于用户不太清楚sdk内部实现逻辑,用户维护sdk的成本太高.所以,我就重新裁剪了开源的XUtils中的dbUtils...后期,在我们做自己的业务线的时候,大家也可以采用这种方法. sdk生成,版本管理,混淆打包 自己在gradle中写了一个打包脚本,让打包的过程,自动化.详情见源码. 1task release_jj_analytics_lib_aar...混淆会不会让同事们可读性变差,想到最后,发现app上线前,也需要打包混淆.如果我在app的progurd.rules中,添加各种规则,那么sdk用起来很繁琐. so~ , 我在 jar 包打包前,进行了必要混淆...现在,在任何app如果想使用sdk, 那么只需要 app的progurd.rules中添加两句混淆规则即可. 1-dontwarn com.ccj.client.android.analyticlib.

    2K40

    Android 面试之必问高级知识点

    4.2 混淆规则 混淆命令 keep:保留类和类中的成员,防止被混淆或移除 keepnames:保留类和类中的成员,防止被混淆,成员没有被引用会被移除 keepclassmembers:只保留类中的成员...,防止被混淆或移除 keepclassmembernames:只保留类中的成员,防止被混淆,成员没有引用会被移除 keepclasseswithmembers:保留类和类中的成员,防止被混淆或移除,保留指明的成员...Signature # 抛出异常时保留代码行号 -keepattributes SourceFile,LineNumberTable # 指定混淆是采用的算法,后面的参数是一个过滤器 # 这个过滤器是谷歌推荐的算法...-keep public class com.android.vending.licensing.ILicensingService # 保留 support 下的所有类及其内部类 -keep class...class * -keepclassmembers class * { @android.support.annotation.Keep *; } 如果是aar这种插件,可以在aar的build.gralde

    61820

    Android 面试必问高级知识点(2021)

    ,所以可以直接用动态代理模式 // Proxy.newProxyInstance的3个参数依次分别是: // 本地的类加载器; // 代理类的对象所继承的接口...4.2 混淆规则 混淆命令 keep:保留类和类中的成员,防止被混淆或移除 keepnames:保留类和类中的成员,防止被混淆,成员没有被引用会被移除 keepclassmembers:只保留类中的成员...Signature # 抛出异常时保留代码行号 -keepattributes SourceFile,LineNumberTable # 指定混淆是采用的算法,后面的参数是一个过滤器 # 这个过滤器是谷歌推荐的算法...-keep public class com.android.vending.licensing.ILicensingService # 保留 support 下的所有类及其内部类 -keep class...class * -keepclassmembers class * { @android.support.annotation.Keep *; } 如果是aar这种插件,可以在aar的build.gralde

    38930

    Android APK瘦身实践:二次瘦身如何再减少大小?(4M—2.9M)

    通过把下面四张大图换成webp,webp的quality参数按50配置(据说官方评测75是最佳值),清晰度勉强可以接受,这个值大家具体按产品要求来定。 ?...,把能混淆的都混淆了: ?...10. proguard去符号表 之前为了保留调试信息,我们是在Proguard保留了符号表的: -keepattributes SourceFile,LineNumberTable 官方渠道我觉得还是尽量保留这个...今年预计要实践一个轻量级的插件化方案,用别人的也好,自己写也好,希望能解决或者优化一些安装包加载多模块,或者主题切换,或者热修复的问题。 这里作为候选方案备用。 19....选择保留什么语言要根据产品的用户和市场来定,如果只选择默认英语和中文语言,配置如下 android{ defaultConfig{ resConfigs"zh"

    1.8K10

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

    这个预校验是作用在Java平台上的,Android平台上不需要这项功能,去掉之后还可以加快混淆速度。 -keepattributes *Annotation* 表示对注解中的参数进行保留。...*** 匹配任意参数类型。比如void set*(***)就能匹配任意传入的参数类型,*** get*()就能匹配任意返回值的类型。 … 匹配任意长度的任意类型参数。...当然是有办法的了,你会发现任何一个Android Studio项目在app模块目录下都有一个proguard-rules.pro文件,这个文件就是用于让我们编写只适用于当前项目的混淆规则的,那么接下来我们就利用刚才学到的所有知识来对混淆规则做修改吧...对第三方库进行保留,不混淆android-support库,以及LitePal库中的代码。 下面我们就来逐一实现这些目标。...{ *; } 然后保留Utils类中的未调用方法可以使用keepclassmembers关键字,后跟Utils完整类名,然后在内部声明未调用的方法,如下所示: -keepclassmembers

    1.7K70

    精选Android中高级面试题 -- 终局之篇:高级干货

    少部分面试官可能会延伸,Gradle自动化测试、机型适配测试等 2、Android中如何查看一个对象的回收情况 ?...App是主application,ModuleA和ModuleB是两个业务模块(相对独立,互不影响),Library是基础模块,包含所有模块需要的依赖库,以及一些工具类:网络访问、时间工具等。...注意:提供给各业务模块的基础组件,需要根据具体情况拆分成 aar 或者 library,像登录,基础网络层这样较为稳定的组件,一般直接打包成 aar,减少编译耗时。...中声明 Service 接口 (含有需要被调用的自定义方法), 然后在自己的模块中实现这个 Service 接口, 再通过 ARouter API 暴露实现类。...使用服务的业务模块:通过 ARouter 的 API 拿到这个 Service 接口(多态持有, 实际持有实现类), 即可调用 Service 接口中声明的自定义方法, 这样就可以达到模块之间的交互。

    1.2K20

    ProGuard 在 Android 上的使用姿势

    ProGuard 除了可以大幅减少代码的空间之外,还可以让所有的标识符(包、类和成员)都使用更短的名字, a.A 和 a.a.B。这个过程就是混淆。...这些警告的一个原因就是,您的构建路径中没有加入需要依赖的 JARs,使用了 provided (仅编译时)依赖。而有时候,在 Android 上这些代码的依赖在运行时并不会被真正的调用。...另外这三个 keep 规则也各有一个不同的版本支持仅保留混淆(重命名),不保留压缩。您可以在 ProGuard 官网的表格看一下概览。...当 ProGuard 移除过少的类 所有应用都可以使用 Android 内置的 ProGuard 的一些安全的默认规则,保留 View 的 getter 和 setter 方法,因为他们通常会被反射来访问...不过有个更好的方法,第三方库的维护者们如果发布的库是 AAR ,那么可以指定规则打包在 AAR 中并会在应用构建时自动暴露给构建系统,通过添加下面几行代码到库模块的 build.gradle 文件中:

    2.6K40

    Gradle必知必会的实战技巧

    Library模块Gradle代码复用 资源文件分包 AAR依赖与源码依赖快速切换 Gradle依赖树查询 有时我们在分析依赖冲突时,需要查看依赖树,我们常用的查看依赖树的命令为 gradlew app...build.gradle中引入 apply from 'greendao-config.gradle' 这样做主要有2个优点 单一职责原则,将greendao的相关配置封装在一个文件里,不与其他文件混淆...我们可以做一个 basic 抽取,同样将共有参数/信息提取到 basic.gradle 中,每个 module apply,这样就是减少了不少代码量 apply plugin: 'com.android.library...在 main 目录下新建 res_core, res_feed(根据业务模块命名)等目录,在res_core中新建res目录中相同的文件夹:layout、drawable-xxhdpi、values等...,不必像以前一样一个个去找 AAR依赖与源码依赖快速切换 当我们的项目中Module越来越多,为了加快编译速度,常常把Module发布成AAR,然后在项目中直接依赖AAR 但是我们有时候又需要修改AAR

    1.4K20

    React Native Upgrade

    考虑到我们的RN版本有点老,问题较多,所以最近对RN进行一次升级,升级到0.44.0版本,并对Android和iOS的RN模块进行代码改造。...期间我主要是完成Android和iOS端RN模块代码的改造工作,另一位前端同学配合一起解决升级过程出现的问题。...2.更新RN的aar文件之后,除了需要修改部分API的调用方式之外,还要修改gradle脚本中依赖库的版本号以及混淆规则!...:r174650' //import RN aar compile(name: 'react-native-0.44.0', ext: 'aar') 混淆规则 (注意最后一句,不加会产生问题,不过我觉得这可能不是解决问题最好的方式...) 混淆内容较多,请看这个gist 3.默认情况下,以上编译操作生成的aar文件中只包含armeabi-v7a和x86两种ABI下的so文件,如果运行时提示找不到so文件,那么可能就是你的abiFilter

    1.5K20

    Android 安装包优化】资源混淆 ( 资源混淆效果 | APK 构建流程简介 | 资源 ID 组成 )

    文件的大小 ; 下面的 APK 安装文件就是进行资源混淆 , 其中的 r 文件 , 就是混淆后的资源文件 ; 进入 r 文件内部 , 可以看到很多无意义无规则的目录 , 这是混淆后的资源文件 ;...二、APK 构建流程简介 ---- APK 构建流程 官方文档参考 : https://developer.android.google.cn/studio/build 应用模块 ( Application...依赖库模块 ( Library Modules ) Android 依赖库包 ( AAR Libraries ) Java 依赖库 ( JAR Libraries ) ; 应用模块 和 依赖库 放在一起进行编译...混淆效果 ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密...( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 ) 【Android 安全】DEX 加密 ( Proguard 混淆 |

    1.2K20

    Flutter技术与实战(6)

    而稳定的直观表现就是对外暴露的接口很少发生变化,要做到这一点,需要我们提升对功能的抽象总结能力,在组件封装时做好功能抽象和接口设计,将所有可能发生变化的因子都在组件内部做好适配,不要暴露给它的调用方。...一旦这些组件的内部实现和外部接口发生变化,整个 App 就会陷入不稳定的状态,即所谓牵一发而动全身。...比如,在网络引擎中为接口请求增加通用参数,或者是集中拦截错误等。...构建产物应该如何封装 我们都知道,模块工程的 Android 构建产物是 aar,iOS 构建产物是 Framework。...而在“如何在原生应用中混编Flutter工程”和“如何构建高效的Flutter App打包发布环境”中,介绍了不带插件依赖的模块工程构建产物的两种封装方案,即手动封装方案与自动化封装方案。

    2.8K21

    Android模块化探索抽取 basic 简化子 module 冗余

    前言 Android 的历史中,各种各样的技术一波接着一波,模块化,插件化,组件化等等。可怜的我,还依然观望,停滞不前。 接着项目重构的机会,果断先从模块化入手,后续渐渐转移阵地,开搞。...区别: proguardFiles: 配置混淆规则文件,只有 minifyEnabled 设置为 true 的时候会使用这个参数,文件中需要申明哪些文件不被优化和混淆。...consumerProguardFiles: 描述:这个属性只作用于我们创建的 library 中,包括我们以aar形式导入的 library ,或是直接创建的 library。...它的作用是,负责该 library 被进行编译时的混淆规则,我们在主 App 的模块下则可以不用再管理各个 library 的混淆规则,会直接使用各个 library 的混淆规则文件。...值得一提:这个属性 和 proguardFiles 的区别在于,consumerProguardFiles 会被主 App 模块作为混淆文件使用导入,而 proguardFiles 则不会。

    86231

    构建属于自己的Flutter混合开发框架

    比如,在网络引擎中为接口请求增加通用参数,或者是集中拦截错误等。...1,Dart代码封装 对于插件工程的 Dart 层代码而言,由于它仅仅是原生工程的代码宿主代理,所以这一层的接口设计比较简单,只需要提供一个可以接收请求 URL 和参数,并返回接口响应数据的方法即可 ,...构建产物封装 我们都知道,模块工程的 Android 构建产物是 aar,iOS 构建产物是 Framework。...所以,如果插件工程本身存在原生依赖( flutter_plugin_network 依赖 OkHttp ),我们是无法通过 aar 去告诉原生工程其所需的原生依赖的。...总结 众所周知,Flutter 模块工程的原生组件封装形式是 aarAndroid)和 Framework(Pod)。

    1.5K10

    咋设计SDK?看这个基础教程攻略!

    AAR 名字来源于 Android Archive,见名知义,是一个 Android 库项目的二进制归档文件,使用 Android Studio ,非常简单可以生成一个 AAR 文件。...不过,Android 库将编译为您可以用作 Android 应用模块依赖项的 Android ARchive (AAR) 文件,而不是编译为在设备上运行的 APK。...与 JAR 文件不同,AAR 文件会为 Android 应用提供以下功能: AAR 文件可以包含多项 Android 资源和一个清单文件,让您除了能够在 Java 类和方法中进行捆绑以外,还能够在布局和可绘制对象等共享资源中进行捆绑...; AAR 文件可以包含 C/C++ 库,供应用模块的 C/C++ 代码使用。...最后注意事项 — 混淆 基于代码保护的目的,Gradle 打包默认会根据 build.gradle 和 proguard-rules.pro 配置的混淆规则,来对代码进行一个混淆, 如果 library

    94850

    如何设计编写一个 SDK

    AAR 名字来源于 Android Archive,见名知义,是一个 Android 库项目的二进制归档文件,使用 Android Studio ,非常简单可以生成一个 AAR 文件。...不过,Android 库将编译为您可以用作 Android 应用模块依赖项的 Android ARchive (AAR) 文件,而不是编译为在设备上运行的 APK。...与 JAR 文件不同,AAR 文件会为 Android 应用提供以下功能: AAR 文件可以包含多项 Android 资源和一个清单文件,让您除了能够在 Java 类和方法中进行捆绑以外,还能够在布局和可绘制对象等共享资源中进行捆绑...; AAR 文件可以包含 C/C++ 库,供应用模块的 C/C++ 代码使用。...最后注意事项 — 混淆 基于代码保护的目的,Gradle 打包默认会根据 build.gradle 和 proguard-rules.pro 配置的混淆规则,来对代码进行一个混淆, 如果 library

    1.3K50

    Android中R文件ID值

    我们带着问题阅读文章进行答案的探索(Android中资源属于一个大模块,我们本地只讨论其中与R文件相关的部分)。...知识回顾 在代码中访问资源 您可以以方法参数的形式传递资源 ID,进而在代码中使用资源。...【应用程序所有模块中的资源类型名称,按照字母排序之后。值是从1开支逐渐递增的,而且顺序不能改变(每个模块下的R文件的相同资源类型id值相同)。...源码依赖的 Lib 库的 R 文件会重新在 app 模块的 build 目录中重新生成一个相同的R 文件只不过 资源ID 前面添加了 final 关键词变成了常量; aar 依赖的 Lib 库的R 文件会更具...为什么 aar 或者 lib库 中使用资源的 class 没有进行 ID值 的内联? R文件 可以混淆么,有什么好处或者什么坑?

    2.7K40
    领券