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

4

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

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

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

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

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

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

除了库的建议示例外,什么也没有发生。当用户导入它时,通过在用户应用程序中点击活动名称,可以看到源代码。

谢谢。

1个回答

8

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

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

 minifyEnabled true

第二点,您不需要保留所有的公共类,只需保留活动(activity):
 -keep class LibraryActivityName { public protected <methods>; }

如果我理解你的问题正确,剩下的类可以完全混淆,因此不需要进一步配置,除非你在某个地方使用了反射。

如果您重新打包混淆后的类到内部包或其他位置,那也是很好的。

 -repackageclasses my.library.package.internal

这可能也需要

 -allowaccessmodification

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


谢谢,那么我如何完全混淆代码而不仅仅是名称? - michael
1
我不知道有任何免费或开源的解决方案可以以合理的质量混淆代码。您可以查看DexGuard(https://www.guardsquare.com/dexguard),这是ProGuard的商业版本,也提供代码混淆和类加密。 - T. Neidhart
谢谢,这意味着最佳实践就是让库执行基本的UI操作并将算法部分移动到后端(服务器)?然后您不必担心公开如何编写UI代码? - michael
1
这确实是更好的方法。 - T. Neidhart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接