Android ProGuard 如何 hide/obfuscate 导出库的源代码
Android ProGuard how to hide/obfuscate source code of exported library
我正在开发 Android 库,我想 hide/obfuscate 该库的源代码实现。
用户项目应用程序使用库的方式是:
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>; }
如果我正确理解你的问题,剩下的 class 可以完全混淆,所以应该不需要进一步配置,除非你在某处使用反射。
如果您将混淆后的 classes 重新打包到内部包或使用
的东西中,这也很好
-repackageclasses my.library.package.internal
这可能还需要
-allowaccessmodification
顺便说一句。 ProGuard 不会混淆代码本身,只会混淆 class / 方法名称。
我正在开发 Android 库,我想 hide/obfuscate 该库的源代码实现。
用户项目应用程序使用库的方式是:
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>; }
如果我正确理解你的问题,剩下的 class 可以完全混淆,所以应该不需要进一步配置,除非你在某处使用反射。
如果您将混淆后的 classes 重新打包到内部包或使用
的东西中,这也很好 -repackageclasses my.library.package.internal
这可能还需要
-allowaccessmodification
顺便说一句。 ProGuard 不会混淆代码本身,只会混淆 class / 方法名称。