【问题标题】:INSTALL_FAILED_DEXOPT Error in Android 5.0 in Release modeAndroid 5.0 发布模式下的 INSTALL_FAILED_DEXOPT 错误
【发布时间】:2015-12-25 19:21:05
【问题描述】:

INSTALL_FAILED_DEXOPT 有一个奇怪的问题。 这发生在模拟器中的 android 5.0 设备以及设备中。 奇怪的是,它在 Debug 模式下构建变体时效果很好。

如果我更改为 Release,我只会在 5.0 设备上收到此异常。我已经彻底浏览了 google 中提供的所有链接。

  1. 擦除数据

  2. 买了一个新设备,我可以第一次安装,但我仍然面临同样的问题。

  3. 项目有 multidex 支持:- 在 gradle 中为 true

  4. 还尝试将 SDK 工具版本和构建工具版本更改为最新版本,即 24.4.0。

我用这个设备

当我在发布模式下构建时,我得到了这个错误

在控制台中

这些是我们使用的构建类型。

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        signingConfig signingConfigs.release
    }


    debug {
        applicationIdSuffix ".debug"
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        signingConfig signingConfigs.debug
    }


}

使用的 SDK 工具图片:

我可以向您保证,从未安装过该设备的构建版本。如果已安装,我已清除所有内容。

这个世界上有人能帮我解决这个问题吗?因为它让我们发疯.....

【问题讨论】:

  • 您是否都使用外部预建库(不是游戏依赖项)?如果是这样,它们是 jar 还是 aar 形式?
  • 请在安装失败时发布logcat
  • 您可以发布build.gradle 代码吗?尤其是带有debugrelease 变体的buildTypes 元素。
  • @LarrySchiefer 我们使用外部 jar 和模块依赖项
  • @AbhishekV 请检查问题。我已编辑

标签: android gradle android-sdk-tools google-groups android-multidex


【解决方案1】:

此问题可能是由于 Android Studio 和项目之间的 sdks 不匹配造成的。该项目使用的是旧的 sdk,一旦我使它们相同,我就清理并重建了项目,一切都很好。

【讨论】:

  • 嗨,我们给所有的 sdk 都没有不匹配。
【解决方案2】:

请查看您的应用是否被错误地安装在您手机的访客帐户中。

如果是,则从那里卸载或删除它。

对您手机中的所有用户帐户执行此操作。

附加提示:-

构建 -> 清理项目构建 -> 重建项目

【讨论】:

  • 你把我的评论变成了答案:D 玩得很好
  • 对不起,我没有看到你的评论,你的评论被隐藏了。我之前遇到过同样的问题并回答过这类问题
  • @Marko 看到这个链接,我在stackoverflow.com/questions/32910041/…之前回答过这些问题@
  • 别担心,我以为你错过了。不想发布它作为答案,因为它是一个长镜头。让我们希望它有所帮助:)
  • @Marko 感谢您的理解 :-) 请看我的 cmets。
【解决方案3】:

这可能是由于您的模块和项目构建文件中的 Gradle 构建工具版本不同。确保他们在两个文件中使用相同的版本,清理并再次构建,应该没问题。

【讨论】:

  • 我们只在主项目中使用...而不是在模块中
【解决方案4】:

当您安装调试/发布 apk 而 relese/调试 apk 已安装在您的设备/模拟器中时,可能会出现此问题。意味着如果您在发布 apk 存在时安装调试 apk,或者如果您在调试时安装发布 apk apk 是存在的。所以 unnatall 的 apk 并再次安装它

【讨论】:

    【解决方案5】:

    从 Android SDK 和 AVD Manager 重新启动模拟器并选择擦除用户数据选项为我解决了这个问题。

    【讨论】:

      【解决方案6】:

      听起来 multidex 可能是您的问题。 Android 在 Lollipop 设备上本机处理此问题(这可能说明某些设备行为正确,但其他设备有问题),但在旧设备上使用 multidex 库,这可以解释为什么旧设备行为一致(请参阅http://developer.android.com/tools/building/multidex.html)。

      您是否足够接近 65k 的限制,您可以使用 ProGuard 或暂时删除您的依赖项之一,这样您就不需要 multidex?尽管有一个库支持它,但通常最好减少方法计数,这样您就不需要它了。我知道某些应用可能确实需要它,但值得先检查一下。

      另外,使用精细的 Google Play 服务模块进行调查。如果您要引入所有 GMS,切换到粒度包含可以显着减少您的方法数:http://android-developers.blogspot.com/2014/12/google-play-services-and-dex-method.html

      【讨论】:

        【解决方案7】:

        尝试卸载此应用以及在您的设备上拥有您签名的所有其他应用。清理您的项目并重新启动安装。此外,您应该考虑通过 ADB 的其他方式安装您的应用,例如使用 Dropbox。

        【讨论】:

          【解决方案8】:

          我在手机中测试代码时遇到了同样的问题。我按照以下步骤操作

          1. 清理并构建代码
          2. 将 Android Studio 升级到最新版本

          它解决了我的问题,请检查您的情况。

          【讨论】:

            【解决方案9】:

            当APK安装到Android上时,操作系统会执行dex2opt进行优化。 INSTALL_FAILED_DEXOPT 错误信息表示您的设备无法优化 dex 文件。

            这个问题通常是由于 dex 文件的大小而发生的。通常,发生这种情况时,您可以在 Android 监视器中找到LinearAlloc Limit 警告或错误消息。如果是 dex 大小的问题,请将其添加到您的 build.gradle 文件中:

            afterEvaluate {
                tasks.matching {
                    it.name.startsWith('dex')
                }.each { dx ->
                    if (dx.additionalParameters == null) {
                        dx.additionalParameters = []
                    }
                 
                     // To avoid linearAlloc limit problem on Gingerbread and below
                     dx.additionalParameters += "--set-max-idx-number=50000"
                     dx.additionalParameters += "--minimal-main-dex"
                }
            }
            

            另外,请务必关闭 Instant Run。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-15
              • 2012-05-19
              • 2019-07-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-03-05
              相关资源
              最近更新 更多