Android ProGuard如何隐藏/混淆导出库的源代码

时间:2016-08-26 13:51:14

标签: android proguard android-proguard

我正在开发Android库,我想隐藏/混淆库的源代码实现。

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

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

所以我需要在库项目中保留入口点Activity的名称,这就是全部。

当我使用默认的ProGuard设置时:

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

以及suggested example for library - 没有发生任何事情,点击用户应用程序内的活动名称(当他导入时) - 可以看到源代码。

谢谢,

1 个答案:

答案 0 :(得分:8)

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

首先,您需要启用Proguard执行,更改此行:

 minifyEnabled true

其次,您不希望保留所有公共类,而只保留活动:

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

如果我正确理解你的问题,其余的类可以完全混淆,所以除非你在某处使用反射,否则不需要进一步配置。

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

的内容中也会很好
 -repackageclasses my.library.package.internal

可能还需要

 -allowaccessmodification

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