Android ProGuard 如何 hide/obfuscate 导出库的源代码

Android ProGuard how to hide/obfuscate source code of exported library

我正在开发 Android 库,我想 hide/obfuscate 该库的源代码实现。

用户项目应用程序使用库的方式是:

startActivity( new Intent(context, LibraryActivityName.class) );

所以我只需要在库项目中保留入口点的名称 Activity,仅此而已。

当我使用默认 ProGuard 设置时:

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

以及 suggested example for library - 没有任何反应,通过单击用户应用程序中的 Activity 名称(当他导入它时) - 可以看到源代码。

谢谢,

由于您没有典型库,因此不应包括典型库示例。

首先,你需要启用Proguard执行,修改这一行:

 minifyEnabled true

其次,您不想保留所有 public class,而只保留 activity:

 -keep class LibraryActivityName { public protected <methods>; }

如果我正确理解你的问题,剩下的 class 可以完全混淆,所以应该不需要进一步配置,除非你在某处使用反射。

如果您将混淆后的 classes 重新打包到内部包或使用

的东西中,这也很好
 -repackageclasses my.library.package.internal

这可能还需要

 -allowaccessmodification

顺便说一句。 ProGuard 不会混淆代码本身,只会混淆 class / 方法名称。