Android 应用启动缓慢 - dex2oat Zip 不存在。已取消 - Gradle 2.10

Android App starting slow - dex2oat Zip is absent. Canceled - Gradle 2.10

我写了一个 Android 应用程序,到目前为止运行良好。 然后我添加了 Google 云消息传递 (GCM) 的功能。我使用了 Google 的演示项目,它似乎添加了分析和应用程序索引等。

现在可以按预期启动应用程序,但需要花费大量时间。日志显示许多这样的消息:

I/dex2oat: ----------------------------------------------------
I/dex2oat: <SS>: S T A R T I N G . . .
I/dex2oat: <SS>: Zip is absent. Canceled.
I/dex2oat: /system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --instruction-set=arm --instruction-set-features=div --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --dex-file=/data/data/world.b2g.b2gether/files/instant-run/dex/slice-com.google.android.gms-play-services-measurement-8.4.0_d76b40d326ea93493481fa158b18846c1c4627dd-classes.dex --oat-fd=29 --art-fd=-1 --oat-location=/data/data/world.b2g.b2gether/cache/slice-com.google.android.gms-play-services-measurement-8.4.0_d76b40d326ea93493481fa158b18846c1c4627dd-classes.dex --runtime-arg -Xms64m --runtime-arg -Xmx512m
I/dex2oat: dex2oat took 288.616ms (threads: 4)
I/dex2oat: ----------------------------------------------------
I/dex2oat: <SS>: S T A R T I N G . . .
I/dex2oat: <SS>: Zip is absent. Canceled.
I/dex2oat: /system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --instruction-set=arm --instruction-set-features=div --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --dex-file=/data/data/world.b2g.b2gether/files/instant-run/dex/slice-com.google.android.gms-play-services-maps-8.4.0_36e4d7c4ee371ae72ff4fba4383d7535cc7f3d3a-classes.dex --oat-fd=29 --art-fd=-1 --oat-location=/data/data/world.b2g.b2gether/cache/slice-com.google.android.gms-play-services-maps-8.4.0_36e4d7c4ee371ae72ff4fba4383d7535cc7f3d3a-classes.dex --runtime-arg -Xms64m --runtime-arg -Xmx512m
I/dex2oat: dex2oat took 321.095ms (threads: 4)
I/dex2oat: ----------------------------------------------------
I/dex2oat: <SS>: S T A R T I N G . . .
I/dex2oat: <SS>: Zip is absent. Canceled.
I/dex2oat: /system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --instruction-set=arm --instruction-set-features=div --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --dex-file=/data/data/world.b2g.b2gether/files/instant-run/dex/slice-com.google.android.gms-play-services-location-8.4.0_298f1e5056d6eea423c13052ef0c9136963ce27b-classes.dex --oat-fd=29 --art-fd=-1 --oat-location=/data/data/world.b2g.b2gether/cache/slice-com.google.android.gms-play-services-location-8.4.0_298f1e5056d6eea423c13052ef0c9136963ce27b-classes.dex --runtime-arg -Xms64m --runtime-arg -Xmx512m
I/dex2oat: dex2oat took 298.720ms (threads: 4)
I/dex2oat: ----------------------------------------------------
...

似乎缺少某些包。 由于我不需要任何这些功能(地图和 GCM 除外),所以我在 Android Studio 中停用了 Analytics、Authentication... 选项。然而,这些消息仍然出现。

会不会是因为我应用了build.gradle文件中的服务?

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('libs/greendao-2.1.0.jar')
    compile project(':volley')
    compile 'com.android.support:support-v13:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.google.android.gms:play-services-gcm:8.4.0'
    compile 'com.google.android.gms:play-services-maps:8.4.0'
    compile 'com.google.android.gms:play-services-location:8.4.0'
}

apply plugin: 'com.google.gms.google-services'

应用里gradle配置我也写了

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        classpath 'com.google.gms:google-services:2.0.0'
    }
}

------------------------ 编辑:------------ --------------

原来好像是gradle的错

我将问题追溯到更新到新的 Android Studio 时。有一次我不得不从 Gradle 2.8 切换到 Gradle 2.10。如果我将它更改为 Gradle 2.8,这个问题就消失了。不幸的是 Android Studio 告诉我现在必须更新到 2.10。

那我该怎么办呢?

------------------------编辑07.June.2016:-------- --------------

似乎随着 Android Studio 2.1.2 的新更新,此错误已修复(或者至少我不再看到此消息)

终于找到答案了。问题真的是Gradle。 但不是新版本本身。更多的是即时构建。

我学到了什么:

问题似乎是在启用 Instant 运行 后找不到一些 "slices" 框架。这也会影响 phone when 运行 独立于编译器的应用程序(例如,如果通过 App Drawer 启动)。 似乎已经编译的库必须再次 searched/linked/compiled 。 只有 Gradle 2.10 或更高版本才会发生这种情况的原因不是版本本身,而仅仅是 Gradle 2.8 不支持新功能。

解决方法:

目前最好的解决方法是停用以下功能:

Settings/Build,执行,Deployment/Instant运行->启用即时运行热插拔代码

>> 编辑: Android Studio 2.1 的更新似乎并没有解决我的这个问题。

我也运行遇到这个问题。 我的应用程序加载速度太慢。 我检查了下面的 logcat。 I/dex2oat:dex2oat 耗时 288.616 毫秒 取消勾选作者提到的选项后问题就解决了