我正在开发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 - 没有发生任何事情,点击用户应用程序内的活动名称(当他导入时) - 可以看到源代码。
谢谢,
答案 0 :(得分:8)
由于您没有典型的库,因此不应包含典型的库示例。
首先,您需要启用Proguard执行,更改此行:
minifyEnabled true
其次,您不希望保留所有公共类,而只保留活动:
-keep class LibraryActivityName { public protected <methods>; }
如果我正确理解你的问题,其余的类可以完全混淆,所以除非你在某处使用反射,否则不需要进一步配置。
如果您将混淆的类重新打包到内部包或使用
的内容中也会很好 -repackageclasses my.library.package.internal
可能还需要
-allowaccessmodification
顺便说一句。 ProGuard不会混淆代码本身,只会混淆类/方法名称。