【问题标题】:Can't upload Android app to device (stale dexed jars)无法将 Android 应用上传到设备(陈旧的 dexed jar)
【发布时间】:2014-08-25 19:49:45
【问题描述】:

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

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

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

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

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

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

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

我能做什么?

【问题讨论】:

  • “未知故障”看起来没有帮助。你有root设备吗?
  • 不,它没有root。我已经恢复出厂设置了,问题依旧。
  • 先换个手机试试看是手机问题还是软件问题。
  • 我正在尝试另一部手机进行测试。同时,我尝试了模拟器,它确实可以使用它。
  • @Guilherme 你找到工作了吗?请与我分享我也面临同样的问题。谢谢

标签: android android-studio


【解决方案1】:

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

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

【讨论】:

  • 谢谢。就我而言,即时运行已被禁用。我将 AVD 的内部存储从 800 Mb 增加到 1600 Mb,擦除数据并安装 apk。
  • 正确,当我第一次尝试在电视 AVD 上运行该应用程序时,对我有用
  • 为了解决这个问题,我不得不将内部存储(工作室管理)从 100MB 增加到 500MB。
  • 这行得通!谢谢
  • 我在 Nexus 5 API 21 模拟器上再次遇到了这个异常。将 AVD 的内部存储从 800 Mb 增加到 1600 Mb,重新启动模拟器并安装 apk。
【解决方案2】:

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

可能是 Android Studio 2.0 预览版的即时运行功能中的一个错误。

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

ps:如果你没有找到 Instant run,它在:

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

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

【讨论】:

  • 这对我也有用。我正在使用AS 2.0 Preview 3b
  • 同样,我解决了所有问题和解决方案,救命!
  • 为此浪费了将近一天的时间!!非常感谢。
  • 就是这样。但仅限于特定设备。
  • 对于 windows 和 linux 用户,没有Preferences 选项。 Preferences 菜单选项在File > Settings 下被称为Settings
【解决方案3】:

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

【讨论】:

  • 我按照建议禁用了 Instant Run,但情况保持不变。我擦除了我的 AVD 上的数据,它就像一个魅力一样有效。我再次启用了即时运行,并且仍在工作。 Android Studio 2.1(自 2016 年 4 月 22 日起)。 :-)
【解决方案4】:

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

Reference

【讨论】:

  • 解决了我的问题
  • 该死,你说得对。除了Cold Boot,我做了所有事情,但它仍然没有用。需要这样做才能解决问题。
  • 这解决了问题!!! +1 第一次在旧 android 版本的模拟器中运行时遇到了这个问题。
  • 这肯定解决了问题,应该标记为正确答案。
【解决方案5】:

我发现 dex 文件变得比缓冲区大,尽管它包含的方法少于 64k。然后我启用了 ProGuard,它对减少 dex 文件大小有很大帮助。

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

【讨论】:

  • 您好,我遇到了与这个问题完全相同的问题,但是这个被接受的答案并没有给我一个我能理解的解决方案。您是否有可能以某种方式打开此答案,例如可以在不使用 3rd 方应用程序的情况下以某种方式解决此问题,并且 ProGuard 提示在生产版本中似乎是可行的,但是什么将有助于我调试我的应用程序?简而言之,如何解决我刚刚开始制作并且离生产还很远的应用程序中出现的这个问题?
  • @ghoulfolk 你有没有为这个问题找到替代解决方案?请告诉我我从昨天开始搜索。
  • 嗨@Programmer,是的,我发现我的问题是由较旧的 SDK Build Tools 版本引起的(我使用 Android Studio 作为我的 IDE),请参阅下面的答案以获得可能的帮助。我了解到让 IDE 和构建工具保持最新,然后清理项目似乎已经解决了我的问题。
  • @ghoulfolk 谢谢。我正在使用 sdk 构建工具 21。但仍然出现此错误。这个问题出现在设备 2.3.x 版本上。
  • @Guiherme 我听从了你的回答。我在终端中找到了“整体方法计数:24474”。现在下一步是什么?请帮忙!
【解决方案6】:

我发现我的问题是由旧的 SDK Build Tools 版本引起的,导致清理失败。我将我的 SDK 构建工具升级到最新版本,并且在清理工作之后,我不再收到过时的 dexed jars 错误。希望这能帮助其他人解决这个问题。

【讨论】:

  • 这对我有用。如果您遇到此错误,只需运行 SDK 管理器并安装构建工具。在重新启动 android studio 而不重新安装它们时,它实际上提示我这样做,所以只需重新启动 AS 并按照提示操作即可。
【解决方案7】:

这对我有用:

在 Android Studio 中,这可以通过点击 Build > Clean 来完成 项目SysadminTips

【讨论】:

    【解决方案8】:

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

    2.) 您可以配置您的应用程序以支持 multidex。请参考此链接以使用它: https://developer.android.com/tools/building/multidex.html

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

    @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:从代码中取出文字说明。

    【讨论】:

      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

          我所做的是修改 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'
              }
          }
          

          然后重建和部署!

          【讨论】:

          • 我有同样的问题,这个解决方案不起作用。
          【解决方案12】:

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

          所有的功劳和感谢为救命稻草https://stackoverflow.com/a/34192979/1413998

          【讨论】:

            【解决方案13】:

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

            【讨论】:

              【解决方案14】:

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

              您也应该使用progaurd 进行调试。 只需将 buildtypes 添加到您的主 gradle 文件中即可:

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

              【讨论】:

                【解决方案15】:

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

                【讨论】:

                  【解决方案16】:

                  我尝试了以下方法

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

                  但没有任何效果。

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

                  您可以在此位置找到模拟器文件。

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

                  谢谢。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-06-17
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多