2015-12-02 136 views
126

存在。当我试图在Android Studio中调试应用给出了这样的日志输出:APK文件磁盘上不

The APK file /Users/MyApplicationName/app/build/outputs/apk/app-debug.apk does not exist on disk.

我重新启动Android的工作室,但我解决不了这个问题。我该如何解决它? 谢谢

+6

*我怎样才能解决这个问题*编译apk –

+1

@TimCastelijns我真的不知道Android Studio是否不够智能,无法将创建调试apk任务包含到deb应用程序任务中。应该为此制作Gradle。 – Trilarion

+1

@Trilarion默认情况下,AS执行编译调试apk的gradle的assembleDebug任务。这里看起来有些不对,这需要手动编译 –

回答

365

单击此选项来解决错误:

enter image description here

+56

我希望我每次回来阅读时都能回复这个答案。 – mgarciaisaia

+6

项目目录名中的特殊字符也会引发此错误。 –

+0

我不知道,但这也适用于我。投票表示感谢! – patrickjason91

29

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

一般建设项目失败时,一些常用的技巧,你可以尝试:

  • 建设 - >清理项目
  • 检查构建变量
  • 重启 Android Studio中(如你所提到的)

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

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

例如:

借助Android工作室2.0预览(建立143.2443734)。

  1. 结帐到一个特定的提交(因此它被从头部卸下):git的结帐[commit_hash]
  2. 运行项目
  3. Android Studio中讲述:apk文件/用户/ MyApplicationName /应用/编译/输出/ APK/应用程序调试,HEAD.apk磁盘上不存在
  4. 进入目录,还有一个实际上命名的文件:应用程序 - 调试 - (HEAD.apk(带有一个额外的括号)
  5. 运行的Git分支

    *(HEAD在1a2bfff分离)

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

上面的示例只是一个可能导致相同问题的情况,但并非必须与您的问题相同。

因此,我强烈建议您到检查目录(找到差异),并检查您的构建。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

14

我通常看到一个类似的问题时,我切换的Git分支。对于我关闭Android Studio rm -rfv ~/Library/Caches/AndroidStudio*并重新启动Android Studio是门票。

+0

我的类似问题已通过此方法解决。 我在gradle build中重命名apk文件以将版本号附加到文件,试图调试我的主要活动是试图运行错误的apk文件名(以前的版本号)。不知道这是什么时候开始的,但直到没有时才能正常工作。 – David

+0

Android工作室缓存它是个很大的问题! – GeekHades

+0

就是这样。我只是(再次)增加了我的内部版本号,这改变了apk文件名,我又遇到了这个问题。 – David

29

在我的情况下,执行“与Gradle文件同步项目”帮助。无论是重新启动Andoid Studio还是清除缓存都不做任何事情。

+1

谢谢。它也帮助我。重新启动Andoid Studio和清除缓存都没有帮助。 –

+0

在更改命名脚本后,我改变了命名脚本,这个命令脚本与我的普通'build.gradle'文件不同,所以Android Studio没有自动选择更改并提示我进行同步。 – BadCash

+0

这是真正的答案。 – azizbekian

3

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

0

面临着同样的问题与gradle这个1.5

我不得不清理生成文件:

Build -> Clean project

,建设APK强制完成Gradle文件的编译和同步:

Build -> Build APK

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

0

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

0

我将build.gradle文件更改为litle信息,然后单击“立即同步”,就好了。

0

删除目录〜/ .gradle/caches /。在Android Studio打开时执行此操作即可。 (请参阅安装错误的软件包名称) 在Android Studio上按“与Gradle文件同步项目”图标 运行该项目,远程路径将正确。

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

5

对于Unix用户一样(的Linux/MacOS X系统),而不是删除〜/ .gradle /缓存/,在命令行中执行:

$ cd path_to_you_project 
$ touch build.gradle 

然后问过Android Studio要构建APK,它将自己重置gradle缓存。

3

我的问题是我将版本号追加到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) 
    } 
} 
+0

你有没有在gradle中调用appendVersionNameVersionCode? – Dhrupal

1

文件 - >的Invalidate缓存/重启

0

确保路径在日志中产生-in你的情况:

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

文件夹 “产出” 的确有一个 “APK”夹。

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

Steps to run the gradle assembleRelease task 然后生成该文件夹。

1

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

6

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

+0

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

1

如果您尝试了以上所有答案,但无法正常工作,请尝试禁用“即时运行”功能。经过一切努力,这一次帮助我。

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

18

确保你没有撇号&在你的路径

+0

'&'是让我无法编译的东西。谢谢@Rim Gazzeh –

2

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

0

上面没有任何帮助,但我通过在“构建工具”面板中切换到另一种口味,然后切换回所需的口味,从而想到了这一点。

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) 
     } 
    } 
0

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

0

该按钮被称为“与Gradle文件同步项目”,它看起来像:Gradle Sync ...当更新版本号时,总是需要点击它,这会导致另一个APK文件名(除非文件名未更改,安装软件包总是可以工作,这暗示文件名被缓存)。等效的Gradle CLI选项似乎是--recompile-scripts

@ see Appendix D. Gradle Command Line

0

首先通过编辑配置删除清理程序,它可能在构建apk之后清理构建。

Click on edit from set run/debug then click on gradle list select the clean project item and then click on -(top 2nd from left). 
1

确保有分级感知之前推出节让在运行/调试配置>>:

Like this image

0

使用的Android 2.2.1工作室,我点击了同步项目与Gradle Files选项,从顶部的下拉菜单中选择工具> Android

与上面发布的答案类似,请参阅下面的如何获得此选项的截图。

enter image description here

0
1) This problem occure due to apk file .if your apk file 
     (output/apk/debug.apk) not generated in this format . 

    2) you should use always in gradle file . 

    buildTypes { 
      release { 
       minifyEnabled false 
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      } 
     } 
0

年是2018年的Android Studio版本是3.2.0素α3,我们仍然得到这个问题。由于没有为我工作上面,这里是我的2美分:

每一次发生这种情况我刚才生成的命令行的APK:

gradlew assembleDebug