【问题标题】:play-services-base and support-v4 double method countplay-services-base 和 support-v4 双重方法计数
【发布时间】:2017-01-09 00:19:46
【问题描述】:

根据methods.complay-service-base一共有15k个方法。但是,我已经在我的build.gradle 中包含了 Android support-v4(~9k 方法)。无论如何要确保我的应用程序中的总方法计数是 15k 而不是 24k = 15k + 9k?

我的 build.grade:

...
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'
    androidTestCompile('com.android.support.test:runner:0.5') {}
    androidTestCompile 'com.android.support.test:rules:0.5'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') {
        exclude group: 'com.android.support', module: 'design'
        exclude group: 'com.android.support', module: 'appcompat'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude module: 'recyclerview-v7'
        exclude module: 'support-annotations'
    }
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    compile('com.crashlytics.sdk.android:crashlytics:2.6.1@aar') {
        transitive = true;
    }
    compile('com.android.support:appcompat-v7:23.4.0') {
        force true
    }
    compile('com.android.support:support-v4:23.4.0') {
        force = true;
    }
    compile('com.android.support:recyclerview-v7:23.4.0') {
        force = true;
    }
    compile('com.android.support:cardview-v7:23.4.0') {
        force = true;
    }
    compile('com.android.support:design:23.4.0') {
        force = true;
    }
    apt 'com.jakewharton:butterknife-compiler:8.2.1'
    compile 'com.android.support:percent:23.4.0'
    compile 'com.loopj.android:android-async-http:1.4.9'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.google.android.gms:play-services-base:9.2.0'
    compile 'com.google.android.gms:play-services-location:9.2.0'
...
}
...

Android 插件的结果:

【问题讨论】:

  • 从 android studio beta 分析 apk 函数中检查实际方法数。

标签: android gradle google-play-services android-support-library dex


【解决方案1】:

Android Studio 稳定版目前没有这个功能。
测试版中有一个测试版分析。

但是你可以使用一些工具来计算方法:

你也可以使用这个gradle插件来统计方法:

   apply plugin: 'com.android.application'
    apply plugin: 'com.getkeepsafe.dexcount'

    buildscript {
        repositories {
            mavenCentral() // or jcenter()
        }

        dependencies {
            classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.5.5'
        }
    }

但是,您可以通过使用拆分 support-v4 libraries 和新的 24.2.0 来使您的 APK 文件尽可能小

【讨论】:

    【解决方案2】:

    方法计数并不是严格意义上的加法。 64k方法限制是对dex文件中method_id_item列表条目数量的限制。这是 dex 文件中任何地方引用的唯一方法 ID(类名 + 方法名 + 参数 + 返回类型)的列表。因此,从这两个库引用的任何方法都将在最终的 dex 文件中进行重复数据删除,并且两者贡献的总方法计数将略低于各个库的 15k + 9k。

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 1970-01-01
      • 2018-12-24
      • 2018-05-28
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 2019-03-27
      • 2019-03-29
      相关资源
      最近更新 更多