【问题标题】:The APK file does not exist on diskAPK 文件在磁​​盘上不存在
【发布时间】:2016-03-06 12:32:41
【问题描述】:

当我在 Android Studio 上尝试调试应用程序时,会给出以下日志输出:

APK 文件 /Users/MyApplicationName/app/build/outputs/apk/app-debug.apk 没有 存在于磁盘上。

我重新启动了 Android Studio,但我无法解决这个问题。我该如何解决? 谢谢你

【问题讨论】:

  • 我该如何解决?编译一个apk
  • @TimCastelijns 我真的想知道 Android Studio 是否不够智能,无法将创建调试 apk 任务包含到 deb 应用程序任务中。应该为此制作 Gradle。
  • @Trilarion 默认情况下,AS 执行 gradle 的 assembleDebug 任务,该任务编译调试 apk。这里好像有问题,需要手动编译
  • 添加 Gradle Make-Aware 为我解决了这个问题。 stackoverflow.com/a/25871525/1712417
  • 尝试添加“Gradle Make-Aware”stackoverflow.com/questions/18256177/…

标签: android android-studio apk


【解决方案1】:

点击此选项解决错误:

【讨论】:

  • 项目目录名中的特殊字符也会抛出这个错误。
  • 这对我根本不起作用。我会建议答案解释为什么它们应该起作用,而不是仅仅告诉读者该做什么,以便他们以后可以理解/避免/解决这些错误。
  • 您能解释一下这究竟是做什么的以及为什么会出现这个问题吗?
  • btw “特殊字符”还包括数字。这太荒谬了,浪费了很多时间。 掌心 :)
  • 该按钮在最新版本的 Android Studio 上不存在,但我相信它是“使用 Gradle 文件同步项目”选项,它确实对我有用。
【解决方案2】:

如果您在更新到 Android Studio V 3.1 后遇到此问题,请尝试以下操作。

当我更新到 Android Studio 3.1 时,我也遇到了同样的问题。我在这里找到的所有其他解决方案都是非常手动的,因为您每次都必须清理和重建,这根本不好。但是感谢Iman Marashi在这里的回答,我能够解决它。

转到运行 -> 编辑配置...

确保在启动前部分有“Gradle-aware Make”:

要添加它,请单击+符号并选择Gradle-aware Make,然后会出现一个弹出窗口,只需将文本字段留空并单击OK strong> 和 OK

【讨论】:

  • 这是最近 3.1 更新的修复。对我来说,这个问题的第一个症状是 APK 没有“响应”代码的变化。我现在很清楚,新的 APK 根本没有正确构建。
  • 这个答案可以为我解决。我更新了 3.1 并收到此错误。
  • 陛下是救命稻草。
  • 哇!你应该为此获得 1000 张赞成票! Android Studio 值得 1000 票反对!
  • 谢谢,这绝对是正确的答案,应该被接受
【解决方案3】:

就我而言,执行“使用 Gradle 文件同步项目”会有所帮助。重启 Andoid Studio 和清除缓存都没有做任何事情。

【讨论】:

  • 谢谢。它也对我有帮助。重新启动 Andoid Studio 和清除缓存都没有帮助。
  • 在更改了与我的正常 build.gradle 不同的文件中的命名脚本后为我做了诀窍,所以 Android Studio 没有自动接受更改并提示我同步。
  • 这才是真正的答案。
  • File -> Sync Project with Gradle Files stackoverflow.com/a/19932896/2527204
  • 在尝试运行单元测试时遇到此问题。它要求设备运行单元测试。
【解决方案4】:

如果你只想知道结论,请到最后一节。谢谢。

通常在构建项目失败时,您可以尝试一些常见的技巧:

  • 构建 -> 清理项目
  • 检查构建变体
  • 重启 Android Studio(如您所述)

但要更具体地解决您的问题 - 当 Android Studio 无法在磁盘上找到 APK 文件时。说明Android Studio实际上已经成功构建了项目,也生成了APK,但是由于某种原因,Android Studio无法找到该文件。

在这种情况下,请根据日志检查打印的目录。很有帮助。

例如:

使用 Android Studio 2.0 预览版(内部版本 143.2443734)。

  1. 签出到特定提交(使其与头部分离):git checkout [commit_hash]
  2. 运行项目
  3. Android Studio 提示:APK 文件 /Users/MyApplicationName/app/build/outputs/apk/app-debug-HEAD.apk 磁盘上不存在
  4. 进入目录,有一个文件实际命名为:app-debug-(HEAD.apk(多加括号)
  5. 运行 git 分支

    *(HEAD 在 1a2bfff 分离)

所以在这里你可以看到,由于我的 gradle 构建脚本的错误,文件命名有些错误。

以上示例只是可能导致相同问题的一种情况,但不一定与您的根本原因相同。

因此,我强烈建议您检查目录(找出不同之处),并检查您的 build.gradle 脚本(您可以更改 apk 名称在那里,如下所示):

applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def newFileName = "whatever you want to name it";
            def apk = output.outputFile;
            output.outputFile = new File(apk.parentFile, newFileName);
        }
    }

【讨论】:

  • 我的问题是我在 APK 名称中添加了应用程序版本,但应用程序版本具有 x.y.z 格式和“。”命名中的(点)导致错误。所以不要记住其他点,除了 apk 之前的那个 :)
【解决方案5】:

确保路径中没有撇号&

【讨论】:

  • '&' 是让我无法编译的原因。谢谢@Rim Gazzeh
【解决方案6】:

确保在启动前部分的运行/调试配置>>中有Grading-aware Make

【讨论】:

    【解决方案7】:

    我经常在切换 git 分支时看到类似的问题。对我来说,关闭 Android Studio rm -rfv ~/Library/Caches/AndroidStudio* 并重新启动 Android Studio 就是门票。

    【讨论】:

    • 我的类似问题通过这种方法解决了。我在 gradle 构建中重命名 apk 文件以将版本号附加到文件中,试图调试我的主要活动是试图运行错误的 apk 文件名(以前的版本号)。不知道什么时候开始的,但它工作正常,直到它没有。
    • Android studio 缓存是个很大的问题!
    • 是的。我刚刚(再次)增加了我的内部版本号,这改变了 apk 文件名,我又遇到了这个问题。
    【解决方案8】:

    在 Android Studio 3.1.1 中选择文件 |将项目与 Gradle 文件同步。

    在 Android Studio 3 中,选择文件 |同步。

    然后再次运行您的项目。

    【讨论】:

    • 在 Studio v3.1.1 中,文件 -> 将项目与 Gradle 文件同步。你很高兴
    • 然后在顶部工具栏(带有图标)的字段中,在下一个锤子图标中,您必须在配置下拉菜单中返回“应用程序”
    【解决方案9】:

    今年是 2018 年。Android Studio 版本是 3.2.0 alpha3,我们仍然遇到这个问题。由于上述方法都不适合我,这是我的 2 美分:

    每次发生这种情况时,我都会从命令行生成 apk:

    gradlew assembleDebug
    

    更新

    删除文件夹.AndroidStudio[version] 并丢失所有首选项和缓存...似乎可以解决问题

    【讨论】:

    • 但这仅适用于一个版本?如果您进行进一步更改并按下“播放”按钮,它只会推送旧的 apk 而不会为更改而重建。真烦人,他们在想什么
    【解决方案10】:

    就我而言,我在我的应用文件路径中使用了一个特殊字符。我关闭了 Android Studio 并从我的应用文件路径中删除了 ' 字符。当我重新打开该项目时,一切正常。

    【讨论】:

    • 是的,理想情况下,Android Studio 应该足够智能,以防止用户在文件路径中使用特殊字符。或者更好的是我自己应该遵循良好的编程实践:)
    【解决方案11】:

    我已经解决了使用顶部窗口中的 Build 选项和 Build APK 构建 apk 的问题。不需要做一些奇怪的事情。

    【讨论】:

      【解决方案12】:

      对于类 Unix 用户 (Linux/MacOs X),不要删除 ~/.gradle/caches/,在命令行中执行:

      $ cd path_to_you_project
      $ touch build.gradle
      

      然后让 Android Studio 构建 APK,它会自行重置 gradle 缓存。

      【讨论】:

        【解决方案13】:

        我的问题是我将版本号附加到 APK。更改版本号并重新同步 Gradle 为我解决了这个问题。

        def appendVersionNameVersionCode(variant, defaultConfig) {
            variant.outputs.each { output ->
                if (output.zipAlign) {
                    def file = output.outputFile
                    def removeApp = file.name.replace("app-", "")
                    def removeType = removeApp.replace("-release", "")
                    def fileName = removeType.replace(".apk", "." + defaultConfig.versionName + ".apk")
                    output.outputFile = new File(file.parent, fileName)
                }
        
                def file = output.packageApplication.outputFile
                def removeApp = file.name.replace("app-", "")
                def removeType = removeApp.replace("-release", "")
                def fileName = removeType.replace(".apk", "." + defaultConfig.versionName + ".apk")
                output.packageApplication.outputFile = new File(file.parent, fileName)
            }
        }
        

        【讨论】:

        • 你在 gradle 本身中调用了 appendVersionNameVersionCode 吗?
        【解决方案14】:

        构建 ---> 构建 APK 并确保它有效

        【讨论】:

          【解决方案15】:

          同步、清理、重建和使缓存失效并重新启动

          它们都不适合我。

          我已经删除了release文件夹和debug文件夹中的APK和output.json文件,然后尝试同步、清理和构建,结果正常。

          或者简单地说 删除包含 apk 和 output.json 文件的文件夹(在 debug/release 的情况下)

          【讨论】:

            【解决方案16】:

            文件 -> 使缓存无效/重新启动

            【讨论】:

              【解决方案17】:

              如果您尝试了上述所有答案,但均无效,请尝试禁用“即时运行”功能。经过所有尝试,这对我有所帮助。

              文件 -> 设置 -> 构建、执行、部署 -> 即时运行 -> 在此处取消选中复选框

              【讨论】:

                【解决方案18】:

                在清理构建后,我也遇到了这个问题。对我来说,解决方案是我只同步 gradle,它对我有用。

                【讨论】:

                  【解决方案19】:

                  在我的情况下,问题是调试配置变得无效不知何故,即使测试方法名称、类或包没有改变。

                  我从 Run->Edit Configurations 中删除了配置,在此处:

                  Android Studio 会自动创建一个新的。

                  【讨论】:

                  • 然后你需要点击 File / Re-Import Gradle 项目。这将重新创建已删除的运行配置。
                  【解决方案20】:

                  在 gradle 1.5 中遇到同样的问题

                  我必须清理构建文件:

                  构建 -> 清理项目

                  并构建一个 APK 来强制完整编译和同步 gradle 文件:

                  构建 -> 构建 APK

                  我仍然不知道为什么或如何发生。

                  【讨论】:

                    【解决方案21】:

                    如果您使用的是 Linux,请尝试将写入权限设置为 app/build 文件夹。

                    【讨论】:

                      【解决方案22】:

                      我有同样的问题。这是由于路径中的错误名称。路径中有一个特殊字符,如下所示: C:\User\My App\Projekte-Tablet&Handy 我删除了“&”字符,效果很好。

                      【讨论】:

                        【解决方案23】:

                        我的问题是在文件名中包含分钟数 - 当生成的文件为 appname_debug_0.9.0.1_170214_2217.apk 时,它会查找 appname_debug_0.9.0.1_170214_2216.apk,因此输出文件名代码(从其他地方获取)显然是从构建中的两个不同点。

                        applicationVariants.all { variant ->
                                variant.outputs.each { output ->
                                    def project = "appname"
                                    def SEP = "_"
                            //        def flavor = variant.productFlavors[0].name
                                    def buildType = variant.variantData.variantConfiguration.buildType.name
                                    def version = variant.versionName
                                    def date = new Date();
                                    def formattedDate = date.format('yyMMdd_HHmm')
                        
                                    def newApkName = project + SEP + /*flavor + */ SEP + buildType + SEP + version + SEP + formattedDate + ".apk"
                        
                                    output.outputFile = new File(output.outputFile.parent, newApkName)
                                }
                            }
                        

                        【讨论】:

                        • 这个块来自哪里?
                        • 当我第一次设置项目时,它来自其他一些堆栈交换线程(并且几乎不知道我在做什么 - 那里没有任何改变)。由于 Gradle 的这一部分已经更改了几次,现在很可能是过时的代码。
                        【解决方案24】:

                        对我来说,问题是它确实找不到apk,而apk存在。

                        The APK file /Users/Paul/AndroidStudioProjects/android-tv-launcher/ui/build/outputs/apk/nameofapk.apk does not exist on disk.
                        Error while Installing APK
                        

                        我所要做的就是右键单击 apk-copy 相对路径,然后

                        adb install -r <paste of relative path>
                        

                        apk 已安装,一切顺利。 这个问题发生在我的 OSX 上。

                        【讨论】:

                          【解决方案25】:

                          在 2018 年 5 月使用新的 Android Studio 3.1 解决。删除 app 文件夹中的 .gradle、.idea 和 build 目录。然后尝试再次运行它,您将不会看到错误。

                          【讨论】:

                            【解决方案26】:

                            我将build.gradle文件改了一点信息,然后点击“立即同步”,就ok了。

                            【讨论】:

                              【解决方案27】:

                              删除目录 ~/.gradle/caches/。在打开 Android Studio 时执行此操作是可以的。 (参考pm安装错误的包名) 在 Android Studio 上按“使用 Gradle 文件同步项目”图标 运行项目,远程路径就正确了。

                              参考答案@Android Studio gets package name wrong when running .apk

                              【讨论】:

                                【解决方案28】:

                                确保在您的日志中生成的路径中 - 在您的情况下:

                                /Users/MyApplicationName/app/build/outputs/apk/app-debug.apk

                                文件夹“outputs”确实有一个“apk”文件夹。

                                这是我的问题,如果不存在,您需要按照以下屏幕截图在 gradle 中运行“assembleRelease”任务;

                                然后将生成文件夹。

                                【讨论】:

                                  【解决方案29】:

                                  以上没有任何帮助,但我通过在“构建工具”面板中切换到另一种风格,然后切换回所需的风格来解决这个问题。

                                  【讨论】:

                                    【解决方案30】:

                                    修改文件:build.gradle(app 目录)。 事实上:你不应该改变这个文件,只能通过这个来获得同步提示,然后同步项目。

                                    【讨论】:

                                      猜你喜欢
                                      • 2016-06-03
                                      • 2017-02-07
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2017-02-04
                                      • 2018-09-21
                                      • 2015-10-13
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多