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

mic*_*ael 4 android proguard android-proguard

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

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

startActivity( new Intent(context, LibraryActivityName.class) );
Run Code Online (Sandbox Code Playgroud)

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

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

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

以及建议示例 - 没有发生任何事情,通过单击用户应用程序内的活动名称(当他导入它时) - 可以看到源代码.

谢谢,

T. *_*art 8

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

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

 minifyEnabled true
Run Code Online (Sandbox Code Playgroud)

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

 -keep class LibraryActivityName { public protected <methods>; }
Run Code Online (Sandbox Code Playgroud)

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

如果将混淆的类重新打包到内部包或使用的东西中,也会很好

 -repackageclasses my.library.package.internal
Run Code Online (Sandbox Code Playgroud)

这可能也需要

 -allowaccessmodification
Run Code Online (Sandbox Code Playgroud)

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