当前位置: 首页 > 面试题库 >

在proguard中,如何保留一组类的方法名称?

哈朗
2023-03-14
问题内容

我正在使用proguard混淆我的android应用程序。android应用程序包含一些本机代码,这些代码使回调到完全限定的java方法。我不必混淆这些类及其方法的名称。下面正确地保留了类名,但没有保留方法名。

-keep public class com.me.dontobf.*
-keepnames public class com.me.dontobf.*

问题答案:

对于本机方法:ProGuard手册>示例>处理本机方法

# note that <methods> means any method
-keepclasseswithmembernames,includedescriptorclasses class * {
    native <methods>;
}

在这种情况下,对于回调方法:ProGuard手册>示例>处理回调方法

-keep class mypackage.MyCallbackClass {
    void myCallbackMethod(java.lang.String);
}

或者,例如,如果所有公共方法都可能是回调方法:

-keep class mypackage.MyCallbackClass {
    public <methods>;
}

您可能还需要保留方法描述符中出现的所有程序类。



 类似资料:
  • 想要更改包名,但需要保持类名不变。知道吗?

  • 问题内容: 您好,我正在编写一个Android应用程序,并且已经设置了Proguard来混淆我的应用程序。但是,我使用类加载器为应用程序动态加载了不同的扩展。问题在于,如果更改了它们的名称,它们将无法正确加载。如何防止Proguard混淆特定的类名? 问题答案: 使用proguard.cfg中的选项 请参阅手册 https://www.guardsquare.com/en/proguard/man

  • 问题内容: 我在proguard配置中添加了以下行: 但是现在proguard不会从结果中删除我的课程。我希望将其删除。 如何排除某个给定的班级? 谢谢 问题答案: 您可以使用以下规则:

  • 下面的这些名称不能在非方括号语法中被用作顶层变量 (比如 .vars["in"]),因为这是FTL中的关键字: true:布尔值"true" false:布尔值"false" gt:比较运算符"大于" gte:比较运算符"大于或等于" lt:比较运算符"小于" lte:比较运算符"小于或等于" as:由少数指令使用 in:由少数指令使用 using:由少数指令使用

  • 我使用ProGuard混淆了我的代码。在代码中,我希望用下面的代码从指定的包中读取所有类。 com/test/ui/controller/b.class com/test/ui/controller/d.类 当我用一个未混淆的jar运行相同的代码时,下面是输出。包级别保存在jar中。你知道我如何告诉Proguard通过保持包级别来创建jar吗? com/test/ui/controller/d.类

  • 为了便于编程,CodeIgniter 使用了一些函数、方法、类 和 变量名来实现。 因此,这些名称不能被开发者所使用,下面是不能使用的保留名称列表。 控制器名称 因为你的控制器类将继承主程序控制器,所以你的方法命名一定不能和 主程序控制器类中的方法名相同,否则你的方法将会覆盖他们。 下面列出了已经保留的名称,请不要将你的控制器命名为这些: CI_Controller Default index 函