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 中的错误