我正在开发 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 - 没有任何反应,通过单击用户应用程序中的 Activity 名称(当他导入它时)- 可以看到源代码。
谢谢,
最佳答案
由于您没有典型的库,因此不应包括典型的库示例。
首先需要开启Proguard执行,修改这一行:
minifyEnabled true
其次,您不想保留所有公共(public)类(class),而只保留 Activity :
-keep class LibraryActivityName { public protected <methods>; }
如果我正确理解你的问题,剩下的类可以被完全混淆,所以应该不需要进一步的配置,除非你在某处使用反射。
如果您将混淆后的类重新打包到内部包或使用其他东西,这也很好
-repackageclasses my.library.package.internal
这可能还需要
-allowaccessmodification
顺便说一句。 ProGuard 不会混淆代码本身,只会混淆类/方法名称。
关于Android ProGuard 如何隐藏/混淆导出库的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167966/