APK 文件在磁​​盘上不存在

Posted

技术标签:

【中文标题】APK 文件在磁​​盘上不存在【英文标题】:The APK file does not exist on disk 【发布时间】: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 为我解决了这个问题。 ***.com/a/25871525/1712417 尝试添加“Gradle Make-Aware”***.com/questions/18256177/… 【参考方案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 ***.com/a/19932896/2527204 在尝试运行单元测试时遇到此问题。它要求设备运行单元测试。【参考方案4】:

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

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

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

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

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

例如:

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

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

    运行 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 目录)。 事实上:你不应该改变这个文件,只能通过这个来获得同步提示,然后同步项目。

【讨论】:

以上是关于APK 文件在磁​​盘上不存在的主要内容,如果未能解决你的问题,请参考以下文章

我如何编写和使用@types 或DefinitelyTyped 上不存在的自定义声明文件?

类型 IInstance 上不存在 typescript 文件属性 selectpicker 中的错误

Bigquery java api 无法加载数据 - “文件在云上不存在”

TypeScript:类型“”上不存在属性

类型 IDBIndex 上不存在属性 getAllKeys

“FetchPeriod”类型上不存在属性“状态”