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


69

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

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

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

您要卸载现有的应用程序吗?

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

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

该应用似乎已被卸载,在“管理应用”下没有任何痕迹。
我无法上传该应用。我尝试清理项目并重建,但没有成功。

我能做什么?


“未知失败”看起来没有帮助。您是否已扎根设备?
Yuraj 2014年

不,它不是扎根的。我已将其重置为出厂设置,问题仍然存在。
Guilherme 2014年

首先,尝试使用其他手机检查是否是手机或软件问题。
Yuraj 2014年

我正在尝试让另一部手机进行测试。同时,我尝试了模拟器,并且可以使用它。
Guilherme 2014年

@Guilherme你上班了吗?请与我分享我也面临着同样的问题。谢谢
程序员

Answers:


72

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

出现与Instant Run无关。我要做的就是增加AVD的内部存储空间,直到以下通知消失。更改值后,我还必须执行数据擦除。

在此处输入图片说明


4
谢谢。在我的情况下,“即时运行”已被禁用。我将AVD的内部存储空间从800 Mb增加到1600 Mb,擦除了数据并安装了APK。
CoolMind

正确,为我工作,因为我是第一次尝试在电视AVD上运行该应用程序
Golan Shay

对我来说,我必须将内部存储(由工作室管理)从100MB增加到500MB以解决此问题。
Afilu

这工作了!感谢
Ramya BA

1
我在Nexus 5 API 21模拟器上再次遇到此异常。将AVD的内部存储从800 Mb增加到1600 Mb,重新启动模拟器并安装apk。
CoolMind

28

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

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

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

ps:如果找不到即时运行,则可以在以下位置进行:

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

或者您可以在“首选项”标签中进行搜索。


这也对我有用。我正在使用AS 2.0 Preview 3b
Shubham A.

同样,在这里,我经历了所有问题和解决方案,挽救了生命!
yehyatt 2015年

浪费了将近一天!万分感谢。
Ankit Popli,2016年

就是这样 但仅在特定设备上。
ono 2016年

1
对于Windows和Linux用户,没有Preferences选择。在PreferencesSettingsFile > Settings
Thupten

24

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


1
我按照建议禁用了Instant Run,情况保持不变。我擦除了AVD上的数据,它像魅惑一样工作了。我再次启用了Instant Run,并且仍在工作。Android Studio 2.1(自2016年4月22日起)。:-)
monn3t

12

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

参考


解决了我的问题
罗伯特·刘易斯,

该死的,你说的对。除了,我已完成所有操作Cold Boot,但仍然无法正常工作。需要这样做以解决问题。
约书亚·品特(

这解决了问题!!!+1从字面上看第一次在旧的android版本的模拟器中运行此问题。
coolcool1994 '20

这绝对解决了问题,应标记为正确答案。
哈维尔·门

8

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

应用程序dex-method-counts不仅可以检查方法数量,还可以检查方法所属的程序包,对调试dex文件有很大帮助。


2
您好,我遇到了与该问题完全相同的问题,但是被接受的答案并没有给我提供我可以理解的解决方案。您是否可以以某种方式打开此答案,例如无需使用第三方应用程序就可以以某种方式解决此问题,并且ProGuard提示在生产版本中似乎可行,但这将有助于我调试自己的产品。应用程式?简而言之,如何解决这个在我刚开始制作的应用程序中出现的问题,而这个问题还远远没有投入生产?
ghoulfolk

@ghoulfolk您是否已获得此问题的替代解决方案?请告诉我我从昨天开始搜索。
程序员

嗨,@ Programmer,是的,我发现我的问题是由较旧的SDK Build Tools版本引起的(我使用Android Studio作为我的IDE),请参考下面的答案以获取可能的帮助。到目前为止,然后清理项目似乎已经解决了我的问题。
ghoulfolk

@ghoulfolk谢谢。我使用的是sdk构建工具21。但是仍然出现此错误。并且此问题在设备2.3.x版本上出现。
程序员

@Guiherme我跟随你的回答。我在终端中找到“总体方法计数:24474”。现在下一步是什么?请帮忙!
程序员

8

我发现我的问题是由旧的SDK Build Tools版本引起的,该版本导致清理失败。我将我的SDK Build Tools升级到了最新版本,并且在清理工作之后,不再收到过时的dexed jars错误。希望这将帮助其他在此问题上苦苦挣扎的人。


2
这对我有用。如果遇到此错误,只需运行SDK管理器并安装构建工具。重新启动android studio而不重新安装它们时,它实际上提示我这样做,因此只需重新启动AS并按照提示进行操作即可。
Riot Gos Woof 2015年


3

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

2.)您可以配置您的应用程序以支持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'
}

希望能帮助到你!

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


3

就我而言,是因为我的模拟器中充满了应用程序。我看到了模拟器有多少空间,几乎没有了,所以我删除了一些应用程序,这样我的问题就解决了


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'
}

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


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'
    }
}

然后重建并部署!


2
我有同样的问题,此解决方案不起作用。
Joaquin De La Sierra


0

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

您还应该进行progaurd调试。只需添加buildtypes到您的主要gradle文件:

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

0

就我而言,这是由名为“ dictionary.txt”的文件引起的。我只是删除它并解决了问题。


0

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


0

我尝试了以下

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

但没有任何作用。

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

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

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

谢谢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.