2015-12-02 177 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