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

时间:2014-08-25 19:49:45

标签: android android-studio

我正在使用Android Studio开发此应用程序,今天当我尝试将其上传到我的设备进行测试时,我有一个弹出窗口说:

  

安装失败,因为设备可能有与当前版本不匹配的过时dexed jar(dexopt错误)。   要继续,您必须卸载现有的应用程序。

     

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

     

是否要卸载现有应用程序?

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

  

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

应用程序似乎已卸载,管理应用程序下没有任何痕迹 我无法上传该应用。我试着清理项目并重建,但它没有用。

我该怎么办?

15 个答案:

答案 0 :(得分:32)

我在Android Studio中也遇到过这个问题,从版本2.0预览版6一直到2.0 Beta 3,这里提到的解决方案都不适合我。

打开它与Instant Run无关。我所要做的就是增加AVD的内部存储空间,直到下面的通知消失为止。我还必须在更改值后执行数据擦除。

enter image description here

答案 1 :(得分:28)

我禁用了此项目的即时运行,问题解决了。

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

Instant Run是Android Studio 2.0中引入的新功能。

ps:如果你找不到即时跑,请点击:

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

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

答案 2 :(得分:15)

转到AVD Manager,然后在设备的操作部分中选择擦除数据。 这对我有用,希望它有所帮助......

答案 3 :(得分:8)

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

应用程序dex-method-counts有助于调试你的dex文件,不仅要检查方法的数量,还要检查它们属于哪个包

答案 4 :(得分:6)

我发现我的问题是由旧的SDK Build Tools版本引起的,导致Clean失败。我将我的SDK Build Tools升级到最新版本,然后清理工作,我不再收到陈旧的dexed jar错误。希望这能帮助其他人解决这个问题。

答案 5 :(得分:4)

这对我有用:

  

在Android Studio中,可以点击构建>来完成。清洁   项目即可。 SysadminTips

答案 6 :(得分:3)

在我的项目中,我通过更具体地说明我正在链接的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'
}

在我的app模块的build.gradle中,因为我真正使用的只是地图API。

答案 7 :(得分:2)

我所做的是修改了build.gradle(Module:app)文件。

最初是

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

我把它改成了

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

然后重建并部署!

答案 8 :(得分:2)

当您的dex文件变大但缓冲区大小(即包含超过65k方法)时,会发生此错误。您可以通过两种方式避免此错误: 1.)使用ProGuard删除未使用的代码 - 为应用程序配置ProGuard设置以运行ProGuard,并确保为发布版本启用了收缩功能。启用收缩可确保您不会使用APK发送未使用的代码。

2.。)您可以配置您的应用程序以支持多索引。请参阅此链接以使用它: 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'
}

希望它有所帮助!

编辑:从代码中取出文本说明。

答案 9 :(得分:2)

在我的情况下是因为我的模拟器充满了应用程序。我看到模拟器有多少空间,几乎没有任何东西,所以我删除了一些应用程序,并且我的问题得到了解决

答案 10 :(得分:0)

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

你也应该调试progaurd。 只需将buildtypes添加到您的主gradle文件中:

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我今天遇到了这个问题,找到了解决方案。看到模拟器有多少空间,几乎什么都没有,所以我删除了一些应用程序,问题解决了。谢谢

答案 13 :(得分:0)

这对我帮助了模拟器: 关闭模拟器。 工具> AVD管理器>选择仿真器设置>擦除数据>冷启动。 现在安装应用程序。

Reference

答案 14 :(得分:0)

我尝试了以下

  • 增加RAM
  • 增加模拟器的存储空间
  • 删除和添加模拟器
  • 使缓存无效并重新启动

但没有任何作用。

但是,删除实际的模拟器文件确实对我有用。

您可以在此位置找到仿真器文件。

C:\Users\<username>\.android\avd

谢谢。