java - 混淆模块/库

标签 java android proguard obfuscation android-proguard

我有一个将被应用程序使用的库。该模块具有接口(interface)和辅助类。

我怎样才能混淆整个模块,但仍然允许访问所有这些接口(interface)和帮助类?

我试过这个:

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

然后我发现自己必须在 proguard 中的所有类上执行 --keep。有什么我可以添加到 pro guard 中的东西,这样我就可以保留所有这些接口(interface)/帮助类,并且仍然将其混淆?

最佳答案

如果你只想让你的库的公共(public) API 不被混淆,你需要指定这个公共(public) API。图书馆有多种方法:

  1. 为公共(public) API 和实际实现提供单独的包,例如com.example.library 包含公共(public) API,而 com.example.library.internal 包含隐藏的实际实现。

  2. 将实际的实现包设为私有(private)

ProGuard 规则将如下所示:

-keep public class com.example.library.* { public protected *; }

这将只在 com.example.library 包中保留公共(public)类及其公共(public)或 protected 方法/字段。

关于java - 混淆模块/库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041396/

相关文章:

java - 统计输入字符的次数--Do-While Loops Java

java - 根据各个字段的长度拆分字符串

java - 用 Java 编写视频文件

android - 在 ionic 中,将什么添加到位于 config.xml 文件中的描述和自动标记中。他们有什么用?

android - 如何在 Intellij 中自动构建和部署到多个 Android 设备

java - ProGuard 破坏 JavaFX 应用程序

java - Android Studio Proguard 运行失败

java - 具有可扩展服务的 Android 库模块

java - 为什么ProGuard输出的JAR文件中没有class文件?

android - 如何在 Android 设备上调试 http 调用?