无法将Android应用上传到设备(陈旧的dexed jar)

我正在使用Android Studio开发这个应用程序,今天当我试图上传到我的设备来testing我有一个popup窗口说:

安装失败,因为设备可能具有与当前版本(dexopt错误)不匹配的陈旧分隔jar。 为了继续,你必须卸载现有的应用程序。

警告:卸载将删除应用程序数据!

你想卸载现有的应用程序?

它提供了两个选项,确定或取消。 点击确定后,在运行选项卡中显示以下消息:

DEVICE SHELL COMMAND: pm uninstall my.bundle.id
Unknown failure

该应用程序似乎被卸载,在pipe理应用程序下没有任何痕迹。
我无法上传应用程序。 我试图清理项目和重build,但没有奏效。

我能做什么?

我禁用了即时运行这个项目,并解决了问题。

也许这是Android studio 2.0预览即时运行function中的一个错误。

即时运行是Android Studio 2.0中引入的一项新function。

ps:如果你没有find即时运行,它在:

 Android Studio --> Preferences --> Build, execution, deploy --> Instant run. 

或者您可以在首选项标签中search它。

转到AVDpipe理器,然后在设备的操作部分select擦除数据。 这工作对我来说,希望它可以帮助….

我发现dex文件比缓冲区大,即使它包含less于64k的方法。 然后,我启用了ProGuard,并帮助大大减less了dex文件的大小。

应用程序dex-method-counts通过检查方法的数量,而不是检查它们属于哪个软件包,可以帮助您debuggingdex文件

我发现我的问题是由旧的SDK构build工具版本,导致干净失败。 我升级了我的SDK构build工具到最新的版本,在清理工作之后,我不再收到陈旧的dexed jars错误。 希望这会帮助别人为这个问题而努力。

这对我工作:

在Android Studio中,可以通过单击Build> Clean Project来完成。 SysadminTips

在Android Studio中,我也遇到了这个问题,从2.0版本的Preview 6一直到2.0 Beta 3,这里提到的解决scheme都没有为我工作。

变成与Instant Run毫无关系。 我所要做的只是增加AVD的内部存储空间,直到下面的通知消失。 我也必须在更改值后执行数据擦除。

在这里输入图像说明

在我的项目中,我通过更具体地了解我连接的Google Play服务的哪些部分,从而克服了这个问题。 特别是,我改变了

 dependencies { ... compile 'com.google.android.gms:play-services:8.4.0' } 

 dependencies { ... compile 'com.google.android.gms:play-services-maps:8.4.0' } 

在我的应用程序模块的build.gradle,因为我真正使用的是地图API。

我所做的是修改build.gradle(模块:应用程序)文件。

最初是这样

 buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 

我改变了

  buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 

然后重build和部署!

当您的dex文件变大,然后缓冲区大小(即包含超过65k的方法),则会发生此错误。 您可以通过两种方式避免此错误:1.)使用ProGuard删除未使用的代码 – 为您的应用程序configurationProGuard设置以运行ProGuard,并确保您已启用缩小版本版本。 启用收缩function可确保您不会将未使用的代码与APK一起发送。

2.)你可以configuration你的应用程序的multidex支持。 参考这个链接来使用它: https : //developer.android.com/tools/building/multidex.html

为了支持multidex,我在应用程序类中重写了这个方法:

 @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } 

并像这样修改我的build.gradle:

 android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { minSdkVersion 14 //lower than 14 doesn't support multidex targetSdkVersion 21 // Enabling multidex support. multiDexEnabled true } } dependencies { compile 'com.android.support:multidex:1.0.0' } 

希望能帮助到你!

EDITS:从代码中拿出文字说明。

在我的情况是因为我的模拟器充满了应用程序。 我看到了模拟器有多less空间,几乎没有,所以我删除了一些应用程序,并与此解决了我的问题

如果您使用的是Android Studio 2.0预览版,请禁用即时运行。

所有的信贷和感谢去救生员https://stackoverflow.com/a/34192979/1413998

没有答案没有解决我的问题

你也应该做progaurddebugging。 只需将buildtypes添加到主要的gradle文件即可:

 buildTypes { debug { // change release to debug minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } 

在我的情况下,这是由一个名为“dictionary.txt”的文件引起的。 我刚刚删除它,并解决了这个问题。