无法将 Android 应用程序上传到设备(过期的墨水罐)

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

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

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

要卸载现有应用程序吗?

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

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

该应用程序似乎是卸载,是没有跟踪它下管理应用程序。
我无法上传应用程序。我试图清理项目和重建,但它不工作。

我能做什么?

40433 次浏览

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

应用程序 Dex-method-count 方法-计数不仅检查方法的数量,而且还检查它们属于哪个包,从而大大有助于调试 dex 文件

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

然后重建和部署!

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

这对我很有效:

在 Android Studio 中,这可以通过点击 < strong > Build > Clean 来完成 项目 . 系统管理小贴士

我发现我的问题是由旧的 SDK 构建工具版本引起的,它导致 Clean 失败。我升级了我的 SDK 构建工具到最新版本,在清理工作,我不再收到陈旧的墨镜罐错误。希望这能帮助别人解决这个问题。

当 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);
}

修改我的版本:

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

希望能有帮助!

编辑: 从代码中取出文本解释。

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

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

也许这是 Android 工作室2.0预览版的即时运行特性中的一个 bug。

Instant Run 是 Android Studio 2.0中引入的一个新特性。

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

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

或者你可以在参数选项卡中搜索它。

如果您正在使用 Android 工作室2.0预览版,请禁用即时运行。

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

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

结果发现和即时运行没有任何关系。我所要做的就是增加 AVD 的内部存储,直到下面的通知消失。我还必须在更改值之后执行数据擦除操作。

enter image description here

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

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

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

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

在我的例子中,它是由一个名为“ dictionary.txt”的文件引起的,我只是删除了它并解决了这个问题。

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

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

参考文献

我试过以下方法

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

但都不管用。

然而,删除实际的模拟器文件对我来说确实是个技巧。

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

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

谢谢。