【问题标题】:Eclipse to Android Studio ImportEclipse 到 Android Studio 导入
【发布时间】:2016-09-22 14:35:49
【问题描述】:

按照 Android 官方网站的建议,我正在将所有源代码移至 AS。不过,体验不是很好。如here 所述,它非常缓慢。但这不是我现在的终极问题。

我已经解决了很多问题,比如将compileSdkVersion更新为23,这样99这样的错误:

错误:(13) 检索项目的父项时出错:未找到与给定名称“android:TextAppearance.Material.Inverse”匹配的资源。

可以纠正。但随着我的进展,问题不断出现。现在我有这个 64k Dex 问题。

错误:.dex 文件中的方法引用数不能超过 64K。 通过https://developer.android.com/tools/building/multidex.html了解如何解决此问题

我在使用 Eclipse 时从未遇到过 Dex 问题。我在 AS 中的源代码与 Eclipse 中的源代码完全相同。唯一的区别是那些只需要在 AS 上工作的 gradle 更改。知道为什么会突然出现Dex 问题吗?如果我将multiDexEnabled 设置为true,会有什么影响?

【问题讨论】:

  • 不幸的是(我知道这并没有什么帮助)迁移过程很复杂,部分原因是 gradle 和项目结构的变化。 Gradle 很可能会引入新的“问题”。我建议在这里查看developer.android.com/studio/build/multidex.html
  • 看看你的依赖。几年前,我在一个项目中遇到了 64k dex 问题,发现我包含的依赖项非常大,不需要全部。刚开始用的时候被 gradle 和 AS studio 有点反感,但是现在后面的版本有热部署,我可以做个 UI 代码更改,点击调试按钮,然后在模拟器上运行几下秒。在 Eclipse 中永远不会发生的事情。
  • 您可能会发现这个article 很有帮助,我认为之前的建议是从中汲取的。如果您需要审核您的项目,他们创建了一个 dexinfo gradle plugin 来帮助完成该过程。

标签: android eclipse android-studio


【解决方案1】:

首先,确保在导入后重建项目(Build - Clean,Build - Rebuild Probject)。使用限制方法参考解决此问题:

android {

    defaultConfig {
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
    }

  dependencies {
      compile 'com.android.support:multidex:1.0.0'
}

并且还更新了您在 java 中的 Application.class 以支持 MultiDex。查看完整信息here

更新:

这个选项在 Eclipse 上被忽略,因为方法引用限制可以从环境中计算出来(就像我们的例子中的 AS)。为什么这个选项不包含在 Gradle 构建中 - 仍然存在疑问...

Android 应用程序 (APK) 文件包含 Dalvik Executable (DEX) 文件形式的可执行字节码文件,其中包含用于运行您的应用程序的编译代码。 Dalvik Executable 规范将单个 DEX 文件中可以引用的方法总数限制为 65,536 个,包括 Android 框架方法、库方法和您自己代码中的方法。在计算机科学的上下文中,术语 Kilo,K,表示 1024(或 2^10)。因为 65,536 等于 64 X 1024,所以此限制称为“64K 参考限制”。

Source AS Doc

【讨论】:

  • 你知道为什么在 AS 中突然出现这个 Dex 问题吗?
  • @user1506104 更新问题。
【解决方案2】:

我怀疑您的 dex 错误是库增长的结果,但没有更多信息,这很难调试。最新版本的 Android Studio (2.2) 提供了一个 APK 分析工具,使 dex 限制更加透明。

在使用 Google Play 服务 API 时,您应该仔细检查以确保您只包含与这些指令一起使用的 API compile 'com.google.android.gms:play-services-fitness:9.6.1' 而不是包括所有内容 (full list)。

如果您需要当时已经依赖的所有库,这通常通过在您的开发环境中启用 multidex 来解决(需要使用具有 L 或更高版本的设备或模拟器进行开发),然后在您的发布版本中使用 minificationEnabled这样您的发行版 APK 中就不需要 multidex。这导致快速调试构建和非 multidex 发布构建的组合,以防止发布构建的启动时间缓慢。

更多信息: 当您在调试构建中使用本机 multidex(需要将 minSdk 设置为 L 或更大)时,它会导致更快的增量构建,因为模块和库部署为单独的 dex 文件并且部署之间的处理更少。

当您在发布版本中使用 minificationEnabled 时,它通常会消除对第二个 dex 文件的需要,因为您不使用的依赖项中的方法会被修剪掉。这通常会导致单个 dex 抵消 multidex 的负面影响(复制 N+1 个 dex 文件对

【讨论】:

  • 迄今为止最好的答案。 (除非在 22 小时内出现更好的答案,否则这个答案值得赏金。)谢谢。 ;)
【解决方案3】:

当您在项目中使用大量库时会出现 Multidex 问题。如果您的应用程序的代码有超过 64k 的方法,那么它就会发生。

当您的应用程序及其引用的库达到某个特定值时 大小,您会遇到构建错误,表明您的应用已达到 Android 应用构建架构的限制。

您可以参考一些链接,例如:

How to enable multidexing with the new Android Multidex support library

http://www.rapidvaluesolutions.com/tech_blog/multidex-issue-or-building-application-over-65k-methods/

https://mutualmobile.com/posts/dex-64k-limit-not-problem-anymore-almost

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 2014-01-12
    • 2016-04-29
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多