即时运行抛出DexIndexOverflowException

时间:2016-05-22 11:41:24

标签: android android-studio android-gradle

在我的项目中 targetSdkVersion 设置在 21 下方时,gradle build正常运行并且项目正常运行。这是build.gradle文件:

 defaultConfig {
        applicationId "com.air"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }

但是当 targetSdkVersion 设置为 23 且启用了即时运行时,它会抛出此异常:

  

com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]中:65536

为什么?

Instant Run对我来说有点混乱。我不清楚它在Android Studio中是如何工作的。

3 个答案:

答案 0 :(得分:2)

Instant Run通过执行热插拔,热交换或冷交换,将更新的代码和资源推送到连接的设备或模拟器。它会根据您所做的更改类型自动确定要执行的交换类型。

https://developer.android.com/studio/run/index.html#instant-run

答案 1 :(得分:2)

而不是构建新的APK,它只推送那些新的更改,在某些情况下,应用甚至不需要重新启动,但会立即显示这些代码更改的效果。

Instant Run通过执行热插拔,热交换或冷交换,将更新的代码和资源推送到连接的设备或模拟器。

https://developer.android.com/studio/run/index.html

答案 2 :(得分:1)

每次更改应用程序的代码时,都不需要完全构建和重新部署apk,从而实现快速开发。它仅推送所做的更改并立即使用它们。

有三种类型的掉期 - HOT,WARM和COLD 。 (按照增加的时间顺序反映变化)

时会触发 HOT SWAPS

  

更改现有实例方法或静态的实现代码   方法

时会触发

WARM SWAPS

  

更改或删除现有资源

时会触发

COLD SWAPS

  

结构代码更改

要了解确切行为和不同情况,请参阅the official documentation