当前位置: 首页 > 知识库问答 >
问题:

为什么proguard不能混淆一些包私有类?

宰修能
2023-03-14
-keep public class com.mylib.mypackage.** {
    public protected *;
}

现在,在这个包中还有许多包私有类,这些类不应该被该规则选择。这些类中的一些实际上被混淆了,无论是在它们自己的名称还是它们的成员名称中,这很好。

相反,有一些实现公共接口的类,它们的类名不会被混淆,而我希望它们应该被混淆。为了完整起见,当它们的成员名不是接口的一部分时,它们的成员名会被有效地混淆。

示例:

/* package */ class InternalComponent implements ExternalInterface {

  // ExternalInterface is kept: Ok
  // InternalComponent is kept: don't like, I'd like it renamed

  @Override
  public void ExternalMethod() {
    // this is kept: Ok
  }

  public void InternalMethod() {
    // this is renamed: Ok
  }
}

我想强调的是,internalcomponent是在其他(保留)类中创建的,并且只通过externalinterface返回给客户端代码。

如果可能的话,我如何也混淆它们的类名?

-keep public class !com.mylib.mypackage.**.internal.*, com.mylib.mypackage.** { 
    public protected *;
}

共有1个答案

廖诚
2023-03-14

你在做一个Android库项目吗?大概是的。

为了达到您的目的,恐怕您需要将您的包裹重新组织成以下内容:

公共接口

com.my.package.apiforusers
com.my.package.apiforusers.internal
-keep public class com.my.package.apiforusers.** { public *; }
 类似资料:
  • 问题内容: 我在AndroidStudio 1.2.1.1和Gradle 1.2.3中使用了ProGuard。 My Gradle的发布版本的配置如下: 我希望混淆类的私有字段。 到目前为止,这是我的proguard配置文件(经过多次尝试): 但是在从AndroidGuard 反编译后,我最终得到了: 我知道这种混淆的使用是有限的,但是我想由ProGuard重命名。怎么做? 这是refcard。

  • 本文向大家介绍Android 一些常用的混淆Proguard,包括了Android 一些常用的混淆Proguard的使用技巧和注意事项,需要的朋友参考一下 一些公共的模板 一些自定义的模板 aar中增加独立的混淆配置 检查混淆和追踪异常 开启 Proguard 功能,则每次构建时 ProGuard 都会输出下列文件: dump.txt 说明 APK 中所有类文件的内部结构。 mapping.txt

  • 我尝试在android studio中使用Proguard,但Proguard似乎没有混淆类名,例如,我的应用程序结构和配置: 和配置 但当我尝试在应用程序中触发异常时: ADB控制台中列出了异常: 只有方法被混淆了,MainActivity.class没有

  • 我对混淆有问题。为了获得更好的想象力: JAVA代码 本机代码 在我想发布一个混淆版本之前,一切都很好。这个类中的Java类(例如)和方法的名称被proGuard重命名为“a”和“a()”(这可能并不总是相同的),但在本机代码中,方法和类的原始名称保持不变,因为它被硬编码为字符串,如下所示: ...有没有办法动态设置方法名?

  • 我正在努力解决JavaFX应用程序的模糊问题。以本项目为基础: Proguard配置文件:-dontoptimized-dontshrink 有人有JavaFX模糊处理的经验吗?

  • 看起来在Android Studio中创建的任何APK文件都可以通过www.limelect轻松反编译。com/android/utility快速反向工程APK文件。 有人成功地在Android Studio中混淆了他们的APK文件吗? 在谷歌,似乎没有人对此发表评论,尽管我试图用谷歌群组向Android工具团队的任何人发送信息。 我能够建立- 文件生成正常,但源Java文件很容易反编译和检查。