添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在Android中使用Proguard不混淆接口方法及其参数?

16 人关注

我有以下代码。

public class MyClass {
    public void method1(Integer marks) {
    private String method3(String name){
    public interface interface1 {
        void method4(Integer ID);
        void method5(Integer rate, boolean status);

我曾使用过progaurd-rules.pro

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keepparameternames
-keep public class *
-keepclassmembers public class *{
   public *;
-keep public interface packageName.MyClass$interface1 { *; }

混淆的代码如下。

public class MyClass {
    public void method1(Integer marks) {
    private String a(String var1){
    public interface interface1 {
        void method4(Integer var1);
        void method5(Integer var1, boolean var2);

I want the interface methods variables (ID, rate & status) not to obfuscate. i.e as below

public interface interface1 {
    void method4(Integer ID);
    void method5(Integer rate, boolean status);

这怎么可能呢?

4 个评论
我不知道这是否对你有帮助。 stackoverflow.com/questions/30526173/...
@ user3796318 Thank you. I am able to do this with classes & it's methods and fields. But got problem while handling Interface. I'm glad if you share any idea of keeping parameters inside interface.
你好,你的问题解决了吗?@Han
如果你使用-dontobfuscate?还是你只想让这个特定的方法不被混淆?
android
obfuscation
android-proguard
Pushpa
Pushpa
发布于 2016-02-09
4 个回答
andrei_zaitcev
andrei_zaitcev
发布于 2017-03-04
已采纳
0 人赞同

你可以通过向 -keepattributes 添加额外的标志来保留方法的参数。它们看起来像这样。

-keepattributes LocalVariableTable,LocalVariableTypeTable

不幸的是,这不仅在你想要的界面中,而且在整个项目中都保持了参数的模糊性。也许这对你来说很好。

如果你使用的是与Android SDK一起运送的默认proguard配置,那么你也可以使用一个特殊的注解来防止某些类被混淆。Check it out.

我只想保留我在接口中定义的函数中的参数名称,整个项目的其他部分仍应尽可能地被混淆。
Kuldip Sharma
Kuldip Sharma
发布于 2017-03-04
0 人赞同
public interface SSOListener {
    void sendDataToAnalytics(String event, JSONArray object);
// In my case JsonArray was obfuscated.
Solution :
-keep class org.json.JSONArray**, ** {
    protected <fields>;
    public <fields>;
    <methods>;
    
请在你的代码中加入一些解释,以便其他人可以从中学习。
scottyab
scottyab
发布于 2017-03-04
0 人赞同
-keepattributes LocalVariableTable,LocalVariableTypeTable

上述的keepattributes对我来说并不奏效。但是-keepparameternames却做到了。我把它添加到我们的Android库使用的内部Proguard配置中。其他非Keot类的参数仍然是模糊的。

注意:我使用R8来实际混淆,这是使用Android Gradle插件时的默认情况。since 3.4.0此外,我们正在执行源码和目标的兼容性,以达到1.8(由于不相关的okhttp依赖性)。

Abhishek Aryan
Abhishek Aryan
发布于 2017-03-04
0 人赞同

ProGuard使用Java字节码的命名惯例,在类文件名和堆栈跟踪中可以看到。因此。

-keep public interface com.somepackage.SomeClass$someInterface {*;}