发布模式下的Android 5.0中的INSTALL_FAILED_DEXOPT错误

时间:2015-09-28 13:57:25

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

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

如果我更改为Release I,则仅在5.0设备上获得此异常。我已经彻底浏览了谷歌中提供的所有链接。

  1. 擦除数据

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

  3. Project支持多索引: - gradle in gradle

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

  5. 我使用这个设备 enter image description here

    当我在发布模式下构建时,我得到此错误 enter image description here

    在控制台

    enter image description here

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

    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工具的图片:

    enter image description here 我可以向你保证,从来没有安装过该设备。如果已安装,我已经清除了所有内容。

    这个世界上的某个人能否帮我解决这个问题。因为它让我们疯狂......

10 个答案:

答案 0 :(得分:2)

当apk安装到android时,android执行dex2opt进行优化。 INSTALL_FAILED_DEXOPT错误消息意味着您的Android设备无法优化dex。这可以通过dex大小来实现。您可以在Android监视器中找到“LinearAlloc Limit”警告或错误消息。

如果是dex尺寸的问题。将此添加到配置。

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

}

和即时运行=开启关闭

答案 1 :(得分:0)

由于Android Studio与Project之间的sdks不匹配,可能会出现此问题。该项目使用了一个旧的SDD,一旦我将它们制作成相同,我就清理并重建了项目,一切都很顺利。

答案 2 :(得分:0)

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

如果是,则取消安装或从那里删除。

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

其他提示: -

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

听起来像multidex可能是你的问题。 Android在Lollipop设备上本地处理这个问题(这可能会导致某些设备行为正常,但其他设备有问题),但在旧设备上使用multidex库可以解释为什么旧设备表现一致(请参阅http://developer.android.com/tools/building/multidex.html)。 p>

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

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

答案 7 :(得分:-1)

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

  1. 清理并构建代码
  2. 将Android Studio升级到最新版本
  3. 它解决了我的问题,请检查你的情况。

答案 8 :(得分:-2)

当您安装调试/发布apk时,这个问题可能会发生,而你的设备/ emulator中已经安装了relese / debug。如果你正在安装调试apk,而apk版本存在,或者如果你正在安装release apk apk is exist.so uninatall apk并再次安装

答案 9 :(得分:-2)

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=65535"
        dx.additionalParameters += "--minimal-main-dex"
   }
}