play-services-base 和 support-v4 双方法计数
play-services-base and support-v4 double method count
根据 methods.com play-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 插件的结果:
方法计数并不是严格意义上的相加。 64k方法限制是对dex文件中method_id_item列表条目数的限制。这是在 dex 文件中任何地方引用的唯一方法 ids(class 名称 + 方法名称 + 参数 + return 类型)的列表。因此,从两个库中引用的任何方法都将在最终的 dex 文件中进行去重,并且两者贡献的方法总数将略少于各个库的 15k + 9k。
目前AndroidStudio稳定版暂无此功能
测试版中有测试版分析。
但是你可以使用一些工具来计算方法:
- dexcount-gradle-plugin 报告每次构建时您的 APK 或 AAR 中方法引用的数量
- dex-method-counts 是一个命令行工具,用于统计 APK 中方法引用的数量
- www.methodscount.com 是一项网络服务,它将计算您上传的任何 APK 中的方法引用。
你也可以使用这个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 文件尽可能小
根据 methods.com play-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 插件的结果:
方法计数并不是严格意义上的相加。 64k方法限制是对dex文件中method_id_item列表条目数的限制。这是在 dex 文件中任何地方引用的唯一方法 ids(class 名称 + 方法名称 + 参数 + return 类型)的列表。因此,从两个库中引用的任何方法都将在最终的 dex 文件中进行去重,并且两者贡献的方法总数将略少于各个库的 15k + 9k。
目前AndroidStudio稳定版暂无此功能
测试版中有测试版分析。
但是你可以使用一些工具来计算方法:
- dexcount-gradle-plugin 报告每次构建时您的 APK 或 AAR 中方法引用的数量
- dex-method-counts 是一个命令行工具,用于统计 APK 中方法引用的数量
- www.methodscount.com 是一项网络服务,它将计算您上传的任何 APK 中的方法引用。
你也可以使用这个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 文件尽可能小