【问题标题】:Can ProGuard change access modifers to package-private?ProGuard 可以将访问修饰符更改为包私有吗?
【发布时间】:2016-03-15 03:01:38
【问题描述】:

是否有可能使用 ProGuard 将所有混淆的类移动到一个命名包中,并将它们的公共或受保护方法或成员变量更改为包保护?

我知道您可以使用 -repackageclasses 来移动类,但似乎 -allowaccessmodification 将访问修饰符更改为公共。 目标是防止我的图书馆的用户能够使用除了公开的公共 API 之外的任何东西。任何帮助表示赞赏。

编辑:我的意思是包私有而不是包保护。

【问题讨论】:

  • 可能值得建立一个启用 ProGuard 的 Hello World 项目并在 GitHub 上共享?当人们可以分叉并尝试他们的想法时,它会减少摩擦以提供帮助?

标签: java proguard android-proguard


【解决方案1】:

我认为你不能,我认为你也不应该。当类被编译并且代码不会改变时,放宽对象/方法限定符不会改变访问模式;换句话说,如果限定符更改为public,成功调用protected 方法/对象的对象仍然可以访问它。反之则不然;变成protectedpublic 对象/方法可能会突然变得对调用对象不可见/不可访问 - 呈现编译错误的代码。我以前用过 ProGuard,但我的答案是基于逻辑而不是实验。

【讨论】:

  • 我的意思是包私有不受保护。我假设(我可能是错的)我们可以创建一个像罐子一样密封的 aar。如果是这种情况,那么不在 aar 中的任何类都无法访问包私有成员。
猜你喜欢
  • 2017-12-22
  • 2023-03-10
  • 2014-08-27
  • 2013-11-10
  • 2011-04-18
  • 2011-01-31
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多