ChatGPT解决这个技术问题 Extra ChatGPT

APK 文件在磁盘上不存在

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

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

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

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

A
Askr

单击此选项可解决错误:

https://i.stack.imgur.com/2KSyU.png


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

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

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

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

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

https://i.stack.imgur.com/9YoVI.png

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


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

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


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

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

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

构建 -> 清理项目

检查构建变体

重新启动 Android Studio(如您所述)

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

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

例如:

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

签出特定提交(使其与头部分离): git checkout [commit_hash] Run project Android Studio 告诉: APK 文件 /Users/MyApplicationName/app/build/outputs/apk/app-debug-HEAD.apk 没有进入磁盘存在的目录,有一个文件实际命名为:app-debug-(HEAD.apk (带一个额外的括号) Run git branch *(HEAD detached at 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 名称中添加了应用程序版本,但应用程序版本具有 xyz 格式和“。”命名中的(点)导致错误。所以别忘了除了apk之前的那个点之外的其他点:)
R
Rim Gazzah

确保路径中没有撇号或 &


'&' 是让我无法编译的原因。谢谢@Rim Gazzeh
I
Iman Marashi

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

https://i.stack.imgur.com/N1qMW.png


u
user213493

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


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

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

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

然后再次运行您的项目。


在 Studio v3.1.1 中,文件 -> 将项目与 Gradle 文件同步。你可以走了
然后在顶部工具栏(带有图标)的字段中,在下一个从锤子图标中,您必须在配置下拉列表中返回“应用程序”
A
Androiderson

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

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

gradlew assembleDebug

更新

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


但这仅适用于一个构建?如果您进行进一步的更改并按下“播放”按钮,它只会推送旧的 apk 而不会为更改而重建。太烦人了,他们在想什么
I
Immortal Code

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


是的,理想情况下,Android Studio 应该足够聪明,以防止用户在其文件路径中使用特殊字符。或者更好的是我自己应该遵循良好的编程实践:)
M
Mun0n

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


J
Jean-Marc Delafont

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

$ cd path_to_you_project
$ touch build.gradle

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


L
Lou Morda

我的问题是我将版本号附加到 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?
K
Kadir altınok

Build ---> Build APK(s) 并确保它有效


d
dvrm

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


A
AnZ

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

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


u
u_pendra

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


M
MiguelSlv

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

我在这里从 Run->Edit Configurations 中删除了配置:

https://i.stack.imgur.com/blhP0.png

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


然后你需要点击 File / Re-Import Gradle 项目。这将重新创建已删除的运行配置。
G
GiridharaSPK

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

他们都没有为我工作。

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

或者简单地删除包含 apk 和 output.json 文件的文件夹(在调试/发布的情况下)


S
Simon PA

gradle 1.5面临同样的问题

我不得不清理构建文件:

构建 -> 清理项目

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

构建 -> 构建 APK

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


C
Catalin Clabescu

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


O
Orientos

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


I
Ian Spencer

我的问题是在文件名中包含分钟数 - 当生成的文件为 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 的这一部分已经更改了几次,现在很可能是过时的代码。
B
Boldijar Paul

对我来说,问题是它以某种方式真的找不到 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 上。


G
Gerardo Suarez

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


凤清云

我将 build.gradle 文件更改了一些信息,然后单击“立即同步”,就可以了。


C
Community

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

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


A
Amgad

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

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

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

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

https://i.stack.imgur.com/3nPDu.png


D
Dmytro Karataiev

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


兰坡阳

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