为什么? AndroidStudio+Gradle = 46000 方法计数 VS Eclipse+Ant = 43000 方法计数
WHY? AndroidStudio+Gradle = 46000 method count VS Eclipse+Ant = 43000 method count
我正在使用带有 Google Play Services 7.5、Android 21 和支持 v4 库的混淆器编译一个项目。如果我用 android studio 编译它,我的方法数比用 eclipse 编译它要多。我将一个名为 dex-method-count 的程序用于两个程序生成的两个 apk 中,我发现这是原因:
Android工作室+gradle:
support: 5416
v4: 2755
app: 594
content: 33
graphics: 96
drawable: 96
internal: 74
view: 74
media: 123
session: 60
os: 13
text: 17
util: 166
view: 1024
accessibility: 204
widget: 615
v7: 2661
app: 232
appcompat: 1
internal: 1757
app: 77
text: 3
transition: 1
view: 628
menu: 536
widget: 1047
view: 24
widget: 647
Eclipse + Ant:
support: 2073
v4: 2073
app: 549
content: 21
media: 123
session: 60
os: 11
util: 157
view: 757
accessibility: 204
widget: 455
正如您在第一个选项中看到的,它添加了很多支持 v7 的方法,为什么?如何避免这种情况?
谢谢
PD:我为库和应用程序构建 gradle 个文件:
apply plugin: 'com.android.library'
android {
compileSdkVersion 'Google Inc.:Google APIs:22'
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 10
targetSdkVersion 10
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:22.2.1'
compile 'com.google.android.gms:play-services:7.5.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
应用程序:
apply plugin: 'com.android.application'
android {
compileSdkVersion 'Google Inc.:Google APIs:22'
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.launcher"
minSdkVersion 10
targetSdkVersion 10
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}
}
dependencies {
compile project(':caponateLibrary')
compile 'com.google.android.gms:play-services:7.5.0'
}
com.google.android.gms:play-services
依赖于 com.google.android:wearable
和 com.google.android:play-services-cast
。每个都依赖于 v7
支持库(分别为 recyclerview-v7
和 mediarouter-v7
)。
除非您几乎使用了 Play 服务 SDK 中的所有内容,否则使用更细粒度的依赖项会更好地为您服务(请参阅 "Selectively compiling APIs into your executable" 上的 this page)。这不仅会摆脱一堆 Play 服务膨胀,而且可能会摆脱您的 v7
方法,具体取决于您使用的是哪些 Play 服务。
顺便说一句,compileSdkVersion 'Google Inc.:Google APIs:22'
是没有意义的,除非您仍在使用 Maps V1,这在现阶段是相当令人惊讶的。 compileSdkVersion 22
会是更好的选择。
我正在使用带有 Google Play Services 7.5、Android 21 和支持 v4 库的混淆器编译一个项目。如果我用 android studio 编译它,我的方法数比用 eclipse 编译它要多。我将一个名为 dex-method-count 的程序用于两个程序生成的两个 apk 中,我发现这是原因:
Android工作室+gradle:
support: 5416
v4: 2755
app: 594
content: 33
graphics: 96
drawable: 96
internal: 74
view: 74
media: 123
session: 60
os: 13
text: 17
util: 166
view: 1024
accessibility: 204
widget: 615
v7: 2661
app: 232
appcompat: 1
internal: 1757
app: 77
text: 3
transition: 1
view: 628
menu: 536
widget: 1047
view: 24
widget: 647
Eclipse + Ant:
support: 2073
v4: 2073
app: 549
content: 21
media: 123
session: 60
os: 11
util: 157
view: 757
accessibility: 204
widget: 455
正如您在第一个选项中看到的,它添加了很多支持 v7 的方法,为什么?如何避免这种情况?
谢谢
PD:我为库和应用程序构建 gradle 个文件:
apply plugin: 'com.android.library'
android {
compileSdkVersion 'Google Inc.:Google APIs:22'
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 10
targetSdkVersion 10
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:22.2.1'
compile 'com.google.android.gms:play-services:7.5.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
应用程序:
apply plugin: 'com.android.application'
android {
compileSdkVersion 'Google Inc.:Google APIs:22'
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.launcher"
minSdkVersion 10
targetSdkVersion 10
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}
}
dependencies {
compile project(':caponateLibrary')
compile 'com.google.android.gms:play-services:7.5.0'
}
com.google.android.gms:play-services
依赖于 com.google.android:wearable
和 com.google.android:play-services-cast
。每个都依赖于 v7
支持库(分别为 recyclerview-v7
和 mediarouter-v7
)。
除非您几乎使用了 Play 服务 SDK 中的所有内容,否则使用更细粒度的依赖项会更好地为您服务(请参阅 "Selectively compiling APIs into your executable" 上的 this page)。这不仅会摆脱一堆 Play 服务膨胀,而且可能会摆脱您的 v7
方法,具体取决于您使用的是哪些 Play 服务。
顺便说一句,compileSdkVersion 'Google Inc.:Google APIs:22'
是没有意义的,除非您仍在使用 Maps V1,这在现阶段是相当令人惊讶的。 compileSdkVersion 22
会是更好的选择。