APK文件在磁盘上不存在


224

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

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

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


9
我该如何解决?编译apk
蒂姆(Tim)

1
@TimCastelijns我实际上想知道Android Studio是否不够智能,无法将create debug apk任务包含到deb应用程序任务中。为此应该做一个摇篮。
Trilarion

1
@Trilarion默认情况下,AS执行gradle的assembleDebug任务,该任务会编译调试apk。此处似乎有些错误,需要手动编译
蒂姆(Tim)

2
添加Gradle Make-Aware为我解决了此问题。stackoverflow.com/a/25871525/1712417
Iammesol 2015年

2
尝试添加“摇篮制作感知” stackoverflow.com/questions/18256177/...
安迪城

Answers:


463

单击此选项解决错误:

运行:视图>工具窗口> Gradle> [项目]>任务>构建>构建


6
您的项目目录名称中的特殊字符也会引发此错误。
NP

50
这根本不适合我。我建议提供解释它们为什么起作用的答案,而不仅仅是告诉读者该怎么做,以便他们以后可以理解/避免/解决这些错误。
person27年

3
您能解释一下这到底是做什么的,为什么会出现这个问题?
Hamidreza Sahraei

btw“特殊字符”还包括数字。这太荒谬了,浪费了很多时间。facepalm :)
alexr101 '18

5
该按钮在最新版本的Android Studio中不存在,但我相信它是“对带有Gradle文件的项目进行同步”选项,对我来说确实有用。
nasch

208

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

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

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

确保在“启动前”部分中具有“可识别Gradle的品牌”:

运行/调试配置

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


13
这是最新的3.1更新的修复程序。对我来说,此问题的第一个症状是APK无法“响应”代码更改。现在我很清楚,新的APK根本无法正常构建。
David Gay

这个答案可以为我解决。我更新了3.1,并收到此错误。
ZarNi Myo Sett

您是救命的人。
Joel Libby

哇!您应该为此获得1000票!Android Studio值得一千次否决!
1QuickQuestion '18

谢谢,这绝对是正确的答案,应该被接受
Petar Marijanovic

68

就我而言,执行“使用Gradle文件同步项目”很有帮助。重新启动Andoid Studio或清除缓存均无济于事。


1
谢谢。它也对我有帮助。重新启动Andoid Studio或清除缓存都无济于事。
ivan.panasiuk

更改命名脚本后,这个技巧对我有用build.gradle吗?
Magnus W

这是真正的答案。
azizbekian

3
File -> Sync Project with Gradle Files stackoverflow.com/a/19932896/2527204
Marlon

尝试运行单元测试时遇到此问题。它要求设备运行单元测试。
塞尔吉奥

34

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

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

  • 构建-> 清洁项目
  • 检查构建变体
  • 重新启动 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 branch

    *(HEAD在1a2bfff分离)

因此,在这里您可以看到,由于我的gradle build脚本的错误,文件命名有点不对。

上面的示例只是一种可能导致相同问题的场景,但不一定要与您的根本原因相同。

结果,我强烈建议您检查目录(以查找差异),并检查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);
        }
    }

2
我的问题是我在APK名称中添加了应用程序版本,但是该应用程序版本具有xyz格式和“。”。命名中的(点)引起了错误。因此,请记住除了apk之前的其他点:)
DraganescuValentin



17

通常在切换git分支时,我会遇到类似的问题。对于我来说,关闭Android Studio rm -rfv ~/Library/Caches/AndroidStudio*并重新启动Android Studio是需要解决的问题。


这种方法解决了我类似的问题。我在gradle构建中重命名apk文件以将版本号附加到该文件,试图调试我的主要活动是尝试运行错误的apk文件名(先前的版本号)。不知道什么时候开始的,但是直到它工作正常为止。
大卫

Android studio缓存这是很大的问题!
GeekHades

它是。我刚刚(再次)增加了我的内部版本号,这更改了apk文件名,再次出现了这个问题。
大卫

13

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

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

然后再次运行您的项目。


在Studio v3.1.1中,通过File->与Gradle文件同步项目。和你很好
Napolean '18

然后,在顶部工具栏(带有图标)中的一个字段中,在“锤子”图标旁边,您必须在配置下拉列表中返回“ app”(返回)
CodeToLife

11

年份是2018。AndroidStudio版本是3.2.0 alpha3,我们仍然遇到此问题。由于以上都不对我有用,这是我的2美分:

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

gradlew assembleDebug

更新

删除文件夹.AndroidStudio[version]并丢失所有偏好设置和缓存...似乎可以解决问题


1
但这仅适用于一个版本吗?如果您进行进一步的更改并按“播放”按钮,则它只会推送旧的APK,而不会为更改而重建。如此烦人,他们想的是wtf
相信

7

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


是的,理想情况下,Android Studio应该足够聪明,以防止用户在文件路径中使用特殊字符。或者更好的是,我本人应该遵循良好的编程习惯:)
不朽的代码

6

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


6

对于像Unix这样的用户(Linux / MacOs X),不是删除〜/ .gradle / caches /,而是在命令行中执行以下操作:

$ cd path_to_you_project
$ touch build.gradle

然后要求Android Studio构建APK,它将重置Gradle缓存本身。


5

我的问题是我将版本号附加到了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?
Dhrupal '16



2

如果您尝试了上述所有答案,但没有成功,请尝试禁用“即时运行”功能。毕竟,这帮助了我。

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


2

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


2

在我的情况下,问题是调试配置由于某种原因变得无效,即使测试方法名称,类或程序包没有更改。

我从运行->编辑配置中删除了配置,在这里:

在此处输入图片说明

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


然后,您需要单击文件/重新导入Gradle项目。这将重新创建已删除的运行配置。
Juan Ignacio Barisich

1

Gradle 1.5面临相同的问题

我不得不清理构建文件:

构建->清洁项目

并构建一个APK以强制Gradle文件的完整编译和同步:

建立->建立APK

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



1

我有同样的问题。这是由于路径中的名称错误。在这样的路径中有一个特殊的字符:C:\ User \ My App \ Projekte-Tablet&Handy我删除了“&”字符,它运行良好。


1

我的问题是在文件名中包含分钟-当生成的文件为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的这一部分已经更改了几次,因此现在可能已经过时了。
伊恩·斯宾塞

1

对我来说,问题是,尽管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副本的相对路径,然后

adb install -r <paste of relative path>

并且APK已安装且运行良好。对我来说,这个问题发生在OSX上。



1

同步,清理,重建和使缓存无效并重新启动

他们都没有为我工作。

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


0

我将build.gradle文件更改为一点信息,然后单击“立即同步”,确定。



0

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

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

文件夹“输出”的确有一个“ apk”文件夹。

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

运行gradle assembleRelease任务的步骤 然后将生成文件夹。


0

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


0

修改文件:build.gradle(应用程序目录)。实际上:您不应更改此文件,只能通过此操作获取同步提示,然后同步项目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.