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 - 如何允许第一次未授权请求然后再请求授权?

javascript - 我们如何使用 html 页面访问移动设备摄像头和麦克风

java - 在 Android 应用程序中使用 Gmail/Facebook 凭据注册

android - Android Studio 中的 Gradle 给出错误项目同步失败

android - 混淆器错误 : Unknown option '-optimizationpasses'

java - 正则表达式未按预期工作

android - 申请 child 监护

android - 在 Android 应用程序中与服务器同步

java - ProGuard 混淆、java、Google Gson 和通用集合——如何保留成员?

java - 使用 Proguard 后通过反射访问方法时出现 NoSuchMethodException