ไฟล์ APK ไม่มีอยู่ในดิสก์


224

เมื่อฉันพยายามดีบักแอปพลิเคชันบน Android Studio จะให้บันทึกผลลัพธ์นี้:

ไฟล์ APK /Users/MyApplicationName/app/build/outputs/apk/app-debug.apk ไม่มีอยู่ในดิสก์

ฉันรีสตาร์ท Android Studio แต่ไม่สามารถแก้ปัญหานี้ได้ ฉันจะแก้มันได้อย่างไร ขอบคุณ


9
ฉันจะแก้มันได้อย่างไร รวบรวม apk
— Tim

1
@TimCastelijns ฉันสงสัยจริงๆว่า Android Studio นั้นไม่ฉลาดพอที่จะรวมงานสร้าง debug apk ลงในงานแอปพลิเคชัน deb Gradle ควรทำเพื่อสิ่งนี้
— Trilarion

1
@Trilarion ตามค่าเริ่มต้น AS เรียกใช้งาน assembleDebug ของ gradle ซึ่งรวบรวม apk debug มีบางอย่างผิดปกติที่นี่ซึ่งต้องมีการรวบรวมด้วยตนเอง
— Tim

2
การเพิ่ม Gradle Make-Aware แก้ไขปัญหานี้ให้ฉัน stackoverflow.com/a/25871525/1712417
— Iammesol

2
ลองเพิ่ม "Gradle Make-Aware" stackoverflow.com/questions/18256177/…
— แอนดี้เฉิง

คำตอบ:


463

คลิกตัวเลือกนี้เพื่อแก้ไขข้อผิดพลาด:

รัน: ดู> เครื่องมือ Windows> Gradle> [โครงการ]> ภารกิจ> บิลด์> บิลด์


6
อักขระพิเศษในชื่อไดเรกทอรีโครงการของคุณจะโยนข้อผิดพลาดนี้
— NP

50
มันไม่ได้ผลสำหรับฉันเลย ฉันจะแนะนำคำตอบที่อธิบายว่าทำไมพวกเขาควรทำงานมากกว่าแค่บอกผู้อ่านว่าต้องทำอย่างไรเพื่อที่พวกเขาจะสามารถเข้าใจ / หลีกเลี่ยง / แก้ไขข้อผิดพลาดเหล่านั้นได้ในภายหลัง
— person27

3
คุณจะอธิบายสิ่งนี้ทำสิ่งที่ถูกต้องและทำไมปัญหานี้เกิดขึ้น?
— Hamidreza Sahraei

btw "อักขระพิเศษ" รวมถึงตัวเลขด้วย มันไร้สาระเสียเวลามากมายในเรื่องนี้ facepalm :)
— alexr101

5
ปุ่มนั้นไม่มีอยู่ใน Android Studio เวอร์ชันล่าสุด แต่ฉันเชื่อว่าเป็นตัวเลือก "ซิงค์โครงการด้วยไฟล์ Gradle" ซึ่งใช้งานได้สำหรับฉัน
— nasch

208

หากคุณประสบปัญหานี้หลังจากอัปเดตเป็น Android Studio V 3.1 ให้ลองด้านล่าง

ฉันประสบปัญหาเดียวกันนี้เมื่อฉันอัปเดตเป็น Android Studio 3.1 โซลูชันอื่น ๆ ทั้งหมดที่ฉันพบที่นี่เป็นคู่มือค่อนข้างเพราะคุณต้องทำความสะอาดและสร้างใหม่ทุกครั้งซึ่งไม่ดี แต่ต้องขอบคุณคำตอบของIman Marashiที่นี่ฉันสามารถแก้ไขได้

ไปที่Run -> แก้ไขการกำหนดค่า ...

ตรวจสอบให้แน่ใจว่าคุณมี "Make Gradle-aware Make" ในส่วน Before Launch:

เรียกใช้ / แก้ไขการกำหนดค่า

เพื่อเพิ่มคลิก+เข้าสู่ระบบและเลือกยี่ห้อ Gradle ทราบและป๊อปอัพจะปรากฏเพียงแค่ปล่อยฟิลด์ข้อความว่างเปล่าและคลิกOKและOK


13
นี่คือการแก้ไขสำหรับการปรับปรุง 3.1 ล่าสุด สำหรับฉันอาการแรกของปัญหานี้คือ APK ไม่ "ตอบสนอง" ต่อการเปลี่ยนแปลงในรหัส เป็นที่ชัดเจนแล้วสำหรับฉันว่า APK ใหม่ไม่ได้สร้างอย่างถูกต้องเลย
— David Gay

คำตอบนี้สามารถแก้ปัญหาให้ฉันได้ ฉันอัปเดต 3.1 และรับข้อผิดพลาดนี้
— ZarNi Myo Sett ชนะ

คุณฝ่าบาทเป็นผู้ช่วยชีวิต
— Joel Libby

ว้าว! คุณสมควรได้รับ 1,000 โหวตสำหรับสิ่งนี้! Android Studio สมควรได้รับ 1,000 โหวต!
— 1QuickQuestion

ขอบคุณนี่เป็นคำตอบที่ถูกต้องและควรเป็นคำตอบที่ถูกต้อง
— Petar Marijanovic

68

ในกรณีของฉันการดำเนินการ "Sync Project with Gradle Files" ช่วย ไม่ต้องรีสตาร์ท Andoid Studio หรือล้างแคชไม่ได้ทำอะไรเลย


1
ขอบคุณ มันช่วยฉันด้วย การรีสตาร์ท Andoid Studio หรือการล้างแคชไม่ได้ช่วยอะไร
— ivan.panasiuk

เคล็ดลับสำหรับฉันหลังจากเปลี่ยนสคริปต์การตั้งชื่อซึ่งอยู่ในไฟล์แยกต่างหากจากปกติของฉันbuild.gradleดังนั้น Android Studio ไม่รับการเปลี่ยนแปลงโดยอัตโนมัติและแจ้งให้ฉันทำการซิงค์
— แมกนัส W

นี่คือคำตอบที่แท้จริง
— azizbekian

3
File -> Sync Project with Gradle Files stackoverflow.com/a/19932896/2527204
— Marlon

มีปัญหานี้พยายามเรียกใช้การทดสอบหน่วย มีการขอให้อุปกรณ์ทำการทดสอบหน่วย
— Sergio

34

หากคุณต้องการทราบข้อสรุปโปรดไปที่หัวข้อสุดท้าย ขอบคุณ

โดยปกติเมื่อการสร้างโครงการล้มเหลวเทคนิคบางอย่างที่คุณสามารถลองได้

  • สร้าง -> โครงการใหม่ทั้งหมด
  • เลือกBuild Build Variants
  • รีสตาร์ท Android Studio (ตามที่คุณระบุไว้)

แต่จะเจาะจงมากขึ้นกับปัญหาของคุณ - เมื่อ Android Studio ไม่พบไฟล์ APK บนดิสก์ หมายความว่า Android Studio สร้างโครงการสำเร็จแล้วและสร้าง APK อย่างไรก็ตามด้วยเหตุผลบางอย่าง Android Studio ไม่สามารถค้นหาไฟล์ได้

ในกรณีนี้โปรดตรวจสอบไดเรกทอรีที่พิมพ์ตามบันทึก มันมีประโยชน์

ตัวอย่างเช่น:

ด้วย Android Studio 2.0 ดูตัวอย่าง (สร้าง 143.2443734)

  1. ชำระเงินการกระทำที่เฉพาะเจาะจง (เพื่อให้แยกออกจากหัว): git checkout [commit_hash]
  2. เรียกใช้โครงการ
  3. Android Studio บอกว่าไฟล์ APK / Users / MyApplicationName / app / build / outputs / apk / app-debug-HEAD.apkไม่มีอยู่ในดิสก์
  4. ไปที่ไดเรกทอรีมีไฟล์ชื่อจริง: app-debug- ( HEAD.apk (พร้อมเครื่องหมายวงเล็บพิเศษ)
  5. เรียกใช้สาขา git

    * (แยกส่วนที่ 1a2bfff)

ดังนั้นที่นี่คุณจะเห็นได้เนื่องจากข้อผิดพลาดของสคริปต์ build 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);
        }
    }

2
ปัญหาของฉันคือฉันเพิ่มเวอร์ชันแอพในชื่อ APK แต่เวอร์ชันแอพมีรูปแบบ xyz และ "." (dot) ในการตั้งชื่อทำให้เกิดข้อผิดพลาด ดังนั้นจำไม่มีจุดอื่น ๆ แต่อย่างใดอย่างหนึ่งก่อน apk :)
— DraganescuValentin

20

ตรวจสอบให้แน่ใจว่าคุณไม่มีเครื่องหมายอัญประกาศเดี่ยวหรือ&ในเส้นทางของคุณ


'&' คือสิ่งที่ขัดขวางไม่ให้ฉันรวบรวม ขอบคุณ @Rim Gazzeh
— Marka A

19

ตรวจสอบให้แน่ใจว่ามีการจัดเกรดให้ทราบในการกำหนดค่า Run / Debugging >> ก่อน ส่วนการเปิดตัว :

ชอบรูปนี้


17

ฉันพบเห็นปัญหาที่คล้ายกันโดยทั่วไปเมื่อฉันเปลี่ยนสาขา git สำหรับฉันปิด Android Studio rm -rfv ~/Library/Caches/AndroidStudio*และเริ่ม Android Studio ใหม่เป็นตั๋ว


ปัญหาที่คล้ายกันของฉันได้รับการแก้ไขโดยวิธีนี้ ฉันเปลี่ยนชื่อไฟล์ apk ในการสร้าง gradle เพื่อต่อท้ายหมายเลขเวอร์ชันไปที่ไฟล์พยายามแก้ปัญหากิจกรรมหลักของฉันคือพยายามเรียกใช้ชื่อไฟล์ apk ที่ไม่ถูกต้อง (หมายเลขเวอร์ชันก่อนหน้า) ไม่แน่ใจว่าเมื่อเริ่มต้นทำงาน แต่ทำงานได้ดีจนกระทั่งไม่ทำงาน
— David

แคชสตูดิโอ Android มันเป็นปัญหาใหญ่มาก!
— GeekHades

มันคือ. ฉันเพิ่งเพิ่มหมายเลขบิลด์ของฉันเพิ่มอีกครั้งนี่เป็นการเปลี่ยนชื่อไฟล์ apk อีกครั้งฉันมีปัญหานี้
— David

13

ใน Android Studio 3.1.1 เลือกไฟล์ | ซิงค์โครงการกับไฟล์ Gradle

ใน Android Studio 3 เลือกไฟล์ | ประสาน

จากนั้นเรียกใช้โครงการของคุณอีกครั้ง


ใน Studio v3.1.1 ไฟล์ -> ซิงค์โครงการกับไฟล์ Gradle และคุณก็พร้อมที่จะไป
— นโปเลียน

จากนั้นในฟิลด์บนแถบเครื่องมือด้านบน (มีไอคอน), จากไอคอนรูปค้อนคุณต้องส่งคืน 'แอพ' ในการกำหนดค่าแบบเลื่อนลง
— CodeToLife

11

ปีนั้นเป็นปี 2018 รุ่น Android Studio คือ 3.2.0 alpha3 และเรายังคงพบปัญหานี้อยู่ เนื่องจากไม่มีสิ่งใดที่ได้ผลสำหรับฉันนี่คือ 2 เซ็นต์ของฉัน:

ทุกครั้งที่สิ่งนี้เกิดขึ้นฉันเพิ่งสร้าง apk จากบรรทัดคำสั่ง:

gradlew assembleDebug

UPDATE

การลบโฟลเดอร์.AndroidStudio[version]และสูญเสียการตั้งค่าและแคชทั้งหมด ... ดูเหมือนว่าจะแก้ปัญหาได้


1
แต่มันใช้ได้กับงานสร้างเดียวเท่านั้น? หากคุณทำการเปลี่ยนแปลงเพิ่มเติมและกดปุ่ม 'เล่น' มันเพียงแค่กด apk เก่าและไม่สร้างใหม่สำหรับการเปลี่ยนแปลง พวกเขาคิดว่าน่ารำคาญมาก wtf
— behelit

7

ในกรณีของฉันฉันใช้อักขระพิเศษในพา ธ ไฟล์แอปของฉัน ฉันปิด Android Studio และลบอักขระ'ออกจากเส้นทางไฟล์แอปของฉัน ทุกอย่างทำงานได้ดีเมื่อฉันเปิดโครงการใหม่


ใช่แล้ว Android Studio ควรฉลาดพอที่จะป้องกันผู้ใช้จากการใช้อักขระพิเศษในพา ธ ไฟล์ของพวกเขา หรือดีกว่าฉันควรทำตามวิธีปฏิบัติที่ดีในการเขียนโปรแกรมด้วยตัวเอง :)
— Immortal Code

6

ฉันได้แก้ไขการสร้าง apk โดยใช้ตัวเลือก Build จากหน้าต่างด้านบนและ Build APK ไม่จำเป็นต้องทำอะไรแปลก ๆ


6

สำหรับ Unix เช่นผู้ใช้ (Linux / MacOs X) แทนที่จะลบ ~ / .gradle / caches / ในบรรทัดคำสั่งให้ทำ:

$ cd path_to_you_project
$ touch build.gradle

จากนั้นขอให้ Android Studio สร้าง APK มันจะรีเซ็ตแคช gradle เอง


5

ปัญหาของฉันคือฉันได้ต่อท้ายหมายเลขรุ่นต่อท้าย 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)
    }
}

คุณเรียก appendVersionNameVersionCode แล้วหรือยัง?
— Dhrupal



2

หากคุณลองคำตอบทั้งหมดข้างต้นแล้วมันไม่ได้ผลลองปิดการใช้งานคุณสมบัติ "เรียกใช้ทันที" อันนี้ช่วยฉันหลังจากความพยายามทั้งหมด

ไฟล์ -> การตั้งค่า -> สร้างดำเนินการปรับใช้ -> เรียกใช้ทันที -> ยกเลิกการเลือกที่ช่องทำเครื่องหมาย


2

ฉันยังได้รับปัญหานั้นหลังจากทำความสะอาดโครงสร้าง สำหรับฉันทางออกคือฉันเพิ่งทำข้อมูลให้ตรงกันและใช้งานได้สำหรับฉัน


2

ในกรณีของฉันปัญหาคือการกำหนดค่าการดีบักนั้นไม่ถูกต้องอย่างใดแม้ชื่อวิธีการทดสอบคลาสหรือแพคเกจไม่ได้เปลี่ยน

ฉันลบการกำหนดค่าจาก Run-> แก้ไขการกำหนดค่าที่นี่:

ป้อนคำอธิบายรูปภาพที่นี่

Android studio จะสร้างขึ้นมาใหม่โดยอัตโนมัติ


จากนั้นคุณต้องคลิกที่โครงการ File / Re-Import Gradle นี่จะสร้างการกำหนดค่าการรันที่ถูกลบใหม่
— Juan Ignacio Barisich

1

ประสบปัญหาเดียวกันกับ gradle 1.5

ฉันต้องล้างไฟล์บิลด์:

สร้าง -> โครงการที่สะอาด

และสร้าง APK เพื่อบังคับให้คอมไพล์และซิงค์ไฟล์ gradle ทั้งหมด:

สร้าง -> สร้าง APK

ฉันยังไม่รู้ว่ามันเกิดขึ้นได้อย่างไร



1

ผมมีปัญหาเหมือนกัน. มันเป็นเพราะชื่อเท็จในเส้นทาง มีตัวละครพิเศษในเส้นทางเช่นนี้: C: \ User \ My App \ Projekte-Tablet & Handy ฉันลบตัวอักษร "&" และมันใช้งานได้ดี


1

ปัญหาของฉันคือการรวมนาทีในชื่อไฟล์ - มันค้นหา appname_debug_0.9.0.1_170214_2216.apk เมื่อไฟล์ที่สร้างขึ้นเป็น appname_debug_0.9.0.1_170214_2217.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)
        }
    }

บล็อกนี้มาจากไหน
— Nerius Jok

มันมาจากเธรดการแลกเปลี่ยนสแต็กอื่น ๆ ตั้งแต่เมื่อฉันตั้งค่าโครงการเป็นครั้งแรก (และมีความคิดน้อยมากว่าฉันกำลังทำอะไรอยู่ เนื่องจาก Gradle ส่วนนี้มีการเปลี่ยนแปลงสองสามครั้งจึงเป็นไปได้ว่ารหัสล้าสมัยในขณะนี้
— Ian Spencer

1

ปัญหาสำหรับฉันคือว่าอย่างใดก็ไม่สามารถหา 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 และเพียงแค่

adb install -r <paste of relative path>

และ apk ได้รับการติดตั้งและดีที่จะไป ปัญหานี้เกิดขึ้นใน OSX สำหรับฉัน


1

แก้ไขในเดือนพฤษภาคมปี 2018 ด้วย Android Studio 3.1 ใหม่ ลบ. gradle, .idea และสร้างไดเรกทอรีภายในโฟลเดอร์แอพของคุณ จากนั้นลองเรียกใช้อีกครั้งและคุณจะไม่เห็นข้อผิดพลาด


1

ซิงค์ล้างข้อมูลสร้างและทำให้แคชใช้ไม่ได้และเริ่มต้นใหม่

ไม่มีใครทำงานให้ฉันได้

ฉันได้ลบไฟล์ APK และ output.json ในโฟลเดอร์ release และ debug folder แล้วจากนั้นลอง sync, clean และ build จากนั้นก็ใช้งานได้ดี



0

ลบไดเรกทอรี ~ / .gradle / caches / การทำเช่นนี้ในขณะที่ Android Studio เปิดอยู่ (อ้างถึงการติดตั้ง pm ชื่อแพคเกจที่ไม่ถูกต้อง) กด "ซิงค์โครงการที่มีไฟล์ Gradle" ใน Android Studio เรียกใช้โครงการและเส้นทางระยะไกลจะถูกต้อง

อ้างถึงคำตอบ @ Android Studio ทำให้ชื่อแพ็กเกจไม่ถูกต้องเมื่อใช้. apk


0

ตรวจสอบให้แน่ใจว่าในเส้นทางที่สร้างในบันทึกของคุณ - ในกรณีของคุณ:

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

โฟลเดอร์ "เอาท์พุท" แน่นอนมีโฟลเดอร์ "apk"

นั่นคือปัญหาของฉันถ้ามันไม่อยู่ที่นั่นคุณจะต้องเรียกใช้งาน "assembleRelease" ในระดับล่างโดยทำตามภาพหน้าจอด้านล่าง

ขั้นตอนในการรันภารกิจ gradle assembleRelease จากนั้นโฟลเดอร์จะถูกสร้างขึ้น


0

ไม่มีอะไรข้างต้นช่วยให้ฉัน แต่ฉันคิดออกโดยสลับไปที่รสชาติอื่นในแผงเครื่องมือสร้างและจากนั้นสลับกลับไปที่สิ่งที่ต้องการ


0

แก้ไขไฟล์: build.gradle (ไดเรกทอรีแอป) อันที่จริง: คุณไม่ควรเปลี่ยนไฟล์นี้เพียงแค่นี้เพื่อรับเคล็ดลับการซิงค์แล้วซิงค์โครงการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.