当我添加一个方法时,为什么dex方法计数加3?

时间:2016-03-14 03:18:24

标签: android-proguard android-multidex

我添加了一个方法

public static void cancelAll(RequestQueue queue,@NonNull final Object tag){
        queue.cancelAll(new RequestQueue.RequestFilter() {
            @Override
            public boolean apply(Request<?> request) {

                Object oldTag = request.getTag();
                if(tag == null || oldTag == null){
                    return false;
                }
                if(oldTag instanceof Integer && tag instanceof Integer){
                    return (int)oldTag == (int)tag;
                }else if(oldTag instanceof String && tag instanceof String){
                    return ((String) tag).equalsIgnoreCase((String)oldTag);
                }
                return false;
            }
        });
    }

dex方法计数加3。

我认为他们是取消所有并申请。第三个是什么?

BuildType是release.And我使用proguard。

将buildType设置为debug时也是如此。

1 个答案:

答案 0 :(得分:0)

您引用的dex方法计数指定单个dex中引用的方法总数,而不仅仅是声明的! 因此,您的问题不容易回答。

为什么不使用带有和不带此方法的dextra工具转储所有方法名称,然后对输出进行差异化?
例如:

./dextra -M classes.dex

将以下列格式输出所有引用的method_ids列表:

Method (0): <init>  Access Flags: 0x0    Params: () Returns: V
Method (1): attachBaseContext   Access Flags: 0x0    Params: (Landroid/content/Context;)    Returns: V
Method (2): getClassLoader  Access Flags: 0x0    Params: () Returns: Ljava/lang/ClassLoader;
...