ความล้มเหลว [INSTALL_FAILED_INVALID_APK]


86

เมื่อฉันคลิกเพื่อเรียกใช้โปรเจ็กต์ที่ฉันเพิ่งสร้างใน Android Studio 0.2.10 และเลือก Android ของฉัน (เชื่อมต่อด้วย USB พร้อมกับดีบักโดย USB บน) ฉันได้รับข้อผิดพลาดนี้:

Waiting for device.
Target device: 0123456789ABCDEF
Uploading file
    local path: /Users/Rui/AndroidStudioProjects/FirstAppProject/FirstApp/build/apk/FirstApp-debug-unaligned.apk
    remote path: /data/local/tmp/rui.firstapp
Installing rui.firstapp
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/rui.firstapp"
pkg: /data/local/tmp/rui.firstapp
Failure [INSTALL_FAILED_INVALID_APK]

ความคิดของสิ่งที่อาจเป็น?


เลือกโทรศัพท์ของฉัน ... !! คุณหมายถึงอีมูเลเตอร์ ... ??
Gokul Nath KP

1
ไม่ Android ของฉันที่เปิด debug โดย USB
RuiG

คุณแน่ใจหรือไม่ว่าแอพนั้นเข้ากันได้กับอุปกรณ์ที่คุณใช้? ตรวจสอบMinSDKและTargetSDKค่าในรายการของคุณ คุณได้ลองติดตั้งสิ่งนี้ในโปรแกรมจำลองหรือไม่? วิธีนี้จะ จำกัด ให้แคบลงว่าปัญหาเกิดจาก APK หรืออุปกรณ์ของคุณ
free3dom

คำตอบ:


157

ฉันได้รับสิ่งนี้ใน Android Studio และสิ่งที่ฉันทำเพื่อแก้ไขก็คือไปที่"Build" > "Clean Project"มันก็ใช้งานได้


8
หากยังใช้งานไม่ได้ให้สร้าง -> สร้างโครงการใหม่หลังจาก Clean Project จะทำงาน
Pei

ฉันเพิ่งได้รับสิ่งนี้มาพร้อมกับการอัปเดตจาก gradle 5.4.1 เป็น 5.6.1 - ไม่แน่ใจว่าความแปลกที่เกิดจากอะไร แต่การอัพเกรดระดับประถมศึกษาครั้งใหญ่ทำได้ โซลูชันบรรทัดคำสั่งอื่น./gradlew cleanตามด้วยคำสั่ง build ปกติของคุณ
Mike Hardy

24

เพียงแค่ลบ APK android / app / build / outputs / apk / debug / app-debug.apk เก่าในโฟลเดอร์ นั่นคือทั้งหมด สนุกกับการเขียนโปรแกรมของคุณ ...


ยินดีต้อนรับ @VenkateshMogili
mahendren

1
rm -fr android/app/build/outputs/apk/debug/
felansu

15

ฉันพบปัญหาที่คล้ายกันครั้งหนึ่งสิ่งที่ฉันสังเกตเห็นคือชื่อแพ็คเกจใน Androidmanifest.xml ของฉันเริ่มต้นด้วยอักขระช่องว่างหนึ่งตัว like " com.example.test" instead of "com.example.test"

ฉันลบช่องว่างที่ไม่ถูกต้องดังกล่าวทั้งหมดออกจากไฟล์ Manifest ของฉันมันช่วยแก้ปัญหาของฉันได้

แก้ไข 1 : '-' ในชื่อแพ็กเกจทำให้เกิดปัญหาเดียวกันกับ Android บางเวอร์ชัน


1
ว้าว! ฉันคิดว่า invalidate cache and restartจะบังคับให้มีการสร้างที่สะอาด แต่ดูเหมือนจะไม่เป็นเช่นนั้น
GabrielOshiro

10

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

https://code.google.com/p/android/issues/detail?id=55841


9

ถ้ามีคนที่ยังคงมีปัญหาแล้วBuild-> ทำความสะอาดโครงการแล้วBuild-> สร้างโครงการในที่สุดโครงการ Sync กับไฟล์


8

วิธีแก้ปัญหานี้:

  1. ติดตั้ง RootExplorer
  2. สร้างtmpโฟลเดอร์ใหม่ในการ์ด SD
  3. กดที่โฟลเดอร์ tmp ค้างไว้แล้วเลือกLinkไปที่โฟลเดอร์นี้ (ตัวเลือกสุดท้ายในเมนู)
  4. ไปที่/data/local/และแตะปุ่มCREATE LINKจากด้านล่าง

8

ฉันมีปัญหานี้และวิธีแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน

ด้วยเหตุผลบางประการการอนุญาตไม่ได้รับการตั้งค่าอย่างถูกต้องบน/data/local/tmpไดเร็กทอรีของฉัน(เฉพาะรูทเท่านั้นที่มี rwx) ฉันแก้ไขปัญหาโดยใช้ ADB (คุณจะต้องมีอุปกรณ์ที่รูท):

  1. เชื่อมต่อโทรศัพท์ของคุณผ่าน USB
  2. เปิด ADB โดยใช้ adb shell
  3. ย้ายไป/data/localใช้cd /data/local
  4. เปลี่ยนเป็นโหมดรูทโดยใช้ su
  5. อนุญาตให้อ่าน / เขียน / ดำเนินการบนtmpไดเร็กทอรีโดยใช้chmod 777 tmp
  6. ยกเลิกการเชื่อมต่อรีสตาร์ท Android Studio แล้วเสียบอุปกรณ์อีกครั้ง

7

การปิดInstant Runช่วยแก้ปัญหาของฉันได้ ไม่รู้คำอธิบายใด ๆ จนถึงตอนนี้ หลังจากย้ายไปที่ android studio 3.0 ก็เริ่มมีปัญหาเช่นนี้ หวังว่านี่จะช่วยใครบางคนในอนาคต


6

เมื่อฉันประสบปัญหานี้สิ่งที่แก้ไขได้สำหรับฉันคือการตรวจสอบให้แน่ใจว่าชื่อแพ็กเกจ AndroidManifest.xml ตรงกับ build.grade applicationId


3

ฉันพบสาเหตุอื่นของข้อผิดพลาดนี้ หากคุณรูทอุปกรณ์ของคุณสิทธิ์การเข้าถึง / data / local / tmp อาจมีการเปลี่ยนแปลงดังนั้น adb จึงไม่สามารถเข้าถึงไฟล์ temp ได้ วิธีแก้ไขคือสร้างโฟลเดอร์ "tmp" บน sdcard และสร้าง symlink ใน / data / local / (ผ่าน ADB shell หรือ Root Explorer)


ฉันไม่อยากจะเชื่อเลยว่า: ตรวจสอบข้ามกับอุปกรณ์อื่น (สิทธิ์ทั้งหมดดูเหมือนเหมือนกันจนถึงระดับรูท); เล่นซอกับสิทธิ์ (ทำให้เป็น 777 ได้) - ไม่มีทาง ดังนั้นสิ่งที่ต้องสูญเสีย ลองใช้ symlink - ว้าว! ผลงาน (+1) ฉันยังอยากรู้ว่าทำไมและอะไรอยู่เบื้องหลัง มันไม่ได้ทำให้เกิดการรูทในกรณีของฉัน แต่ทำให้ ADB daemon ทำงานใน "โหมดไม่ปลอดภัย" (เช่นมีสิทธิ์รูท)
Izzy

3

หากคุณเขียนandroid:extractNativeLibs="false"ในไฟล์ AndroidManifest จากนั้นเปลี่ยนเป็นandroid:extractNativeLibs="true"


3

ฉันลองใช้โซลูชันที่นำเสนอส่วนใหญ่แล้ว (วิธีง่ายๆไม่ใช่ผู้ที่เสนอ chmod และแก้ไขไลบรารีภายใน) และไม่มีวิธีใดทำงานได้

ในที่สุดสิ่งที่ได้ผลสำหรับฉันคือ: "Clean Project" -> "สร้างโครงการใหม่" -> เปลี่ยน app versionName ในโมดูลแอป build.gradle -> Sync Gradle -> เรียกใช้แอปบนอุปกรณ์


วิธีนี้ใช้ได้ผลกับฉัน !! ขอบคุณมากฉันดิ้นรนกับเรื่องนี้มานานแล้วนี่คือตัวช่วยชีวิตจริงๆ! ขอบคุณไม่พอ
stb_dev

3

นำทางไปยัง Run/Debug Configurations

คลิกเรียกใช้จากแท็บด้านบน> แก้ไขการกำหนดค่า

  • โมดูล: เลือกแอปของคุณ
  • ตัวเลือกการติดตั้ง: ปรับใช้ APK เริ่มต้น
  • ตกลง

ใส่คำอธิบายภาพที่นี่


2

สิ่งนี้ช่วยในกรณีของฉัน:

Settings -> Apps -> Google Play Store -> Click "Enable" button.

ว้าว. ขอบคุณ. ฉันปิดใช้งาน GooglePlay และไม่ได้สังเกตว่านี่เป็นสาเหตุของปัญหาของฉัน
W0rmH0le

2

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


2

สำหรับโครงการ Flutter ด้วย VS Code editor ให้ไปที่โฟลเดอร์ซอร์สของโปรเจ็กต์และลบโฟลเดอร์ "build" และเริ่มการดีบัก


2

ฉันพบปัญหานี้ในโครงการที่มี Dagger และหลายโมดูล สิ่งที่ได้ผลสำหรับฉัน (ไม่ได้ผลข้างต้น) คือการ 1) ล้างโฟลเดอร์. gradle 2) ล้างโฟลเดอร์. ida 3) ในโปรเจ็กต์ gradle.properties ให้ทำเครื่องหมาย org.gradle.caching = false 4) อาจทำให้แคชไม่ถูกต้องใน AS , ทำความสะอาด, สร้างใหม่

คุณอาจจะได้รับเพียง # 3 ทำความสะอาดแล้วสร้าง

แก้ไข: เมื่อเร็ว ๆ นี้ฉันสามารถแก้ไขปัญหานี้ได้โดยการรีสตาร์ท AS จากนั้นทำความสะอาดแล้วติดตั้งอีกครั้ง


แปลก ฉันได้ลองข้างต้นแล้ว สิ่งนี้ใช้ได้ผลสำหรับฉันการพัฒนา Android นี้กำลังบ้าคลั่ง รหัสเป็นเวลา 30 วินาทีและรอ 5 นาทีเพื่อรับงานสร้าง
satyajit

@satyajit. 5 นาที !! ของฉันใช้เวลา 10! นี่เป็นสิ่งเดียวที่เหมาะกับฉันอย่างต่อเนื่อง
Dan Anderson

ฉันสามารถทำให้มันใช้งานได้./gradlew installDebugจากบรรทัดคำสั่ง
satyajit

2

สาเหตุของปัญหานี้สำหรับฉันคือมีการเลือกตัวแปรการสร้างที่ไม่ถูกต้องสำหรับหนึ่งในโมดูลของแอปของฉัน จากเครื่องมือ "Build Variants" ฉันได้เลือกตัวแปรโมดูลที่ตรงกับโมดูลของแอปและแก้ไขปัญหาให้ฉัน


1

ฉันมีปัญหานี้ใน android Studio เพราะในรุ่น Debug ของฉันฉันได้เพิ่มคำต่อท้ายชื่อเวอร์ชัน-DEBUGและ-เป็นปัญหา

พยายามให้มีเฉพาะตัวอักษรตัวเลขและจุดบนชื่อเวอร์ชันและรหัสแอปพลิเคชันของคุณ


0

ฉันมีข้อผิดพลาดเดียวกัน ฉันมีปี 2015 ในรหัสแอป ฉันแทนที่ 2015 ด้วยสิบห้าและแก้ไขได้

นอกจากนี้หากคุณใช้ Android Studio คุณสามารถลอง: Tools / Android / Synch Project กับ Gradle Files



0

ฉันมีปัญหานี้และวิธีแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน

สาเหตุน่าจะเป็นโทรศัพท์รุ่นรูทที่มีโควต้าหรือสิทธิ์การติดตั้ง apk ที่ sdcard เท่านั้น

ฉันแก้ไขปัญหาโดยใช้ ADB (คุณจะต้องมีอุปกรณ์ที่รูท):

  1. เชื่อมต่อโทรศัพท์ของคุณผ่าน USB
  2. เปิด ADB โดยใช้ adb shell
  3. เปลี่ยนเป็นโหมดรูทโดยใช้ su
  4. สร้างโฟลเดอร์ tmp ใน sdcard: mkdir / sdcard / tmp
  5. cd / data / local
  6. สร้างลิงก์โฟลเดอร์ใน sdcard: ln -s / sdcard / tmp tmp

0

ดูเหมือนจะมีสาเหตุหลายประการสำหรับความล้มเหลวนี้ สำหรับฉันปัญหาคือในไฟล์ AndroidManifest ฉันได้อ้างถึงไลบรารีที่ไม่มีอยู่แล้ว (เฉพาะในอุปกรณ์นี้เท่านั้น) โดยใช้แท็ก "ใช้ไลบรารี" หลังจากลบไลบรารีที่อุปกรณ์นี้ไม่ได้ติดตั้ง apk อย่างถูกต้อง


0

ฉันได้ใช้แม่แบบ androidquickstart maven และประสบปัญหาเดียวกัน:

ชื่อแพ็กเกจของฉันคือ androidquickstart เท่านั้น ตามคำแนะนำก่อน

  1. ฉันได้เปลี่ยนแพ็คเกจเป็น androidquickstart.test
  2. แล้วใน AndroidManifest.xml ฉันมีการเปลี่ยนแปลงpackage="androidquickstart"ไปpackage="androidquickstart.test"และลบออกทดสอบตามลําดับจากส่วนอื่น ๆ ของ XML <activity android:name=".test.HelloAndroidActivity" >ไป<activity android:name=".HelloAndroidActivity" >
  3. และแก้ไขปัญหาแพ็คเกจในไฟล์ java (เน้นโดย IDE)

0

ชื่อแพ็กเกจของคุณควรมีคำที่รวมกันเป็นจุด ๆ เช่น com.example หรือ prashant.mydairy ..... ตอนนี้ก็น่าจะใช้ได้แล้ว

ไฟล์ที่คุณต้องอัปเดตชื่อแพ็กเกจของคุณมีดังต่อไปนี้: 1) ไฟล์ Manifest 2) ไฟล์ Gradle (module appp): applicationId "package.name"


1
ควรจะแสดงความคิดเห็น
Furqan


0

หากคุณสามารถเข้าถึงคอนโซลอุปกรณ์ (adb shell) ให้เปลี่ยนสิทธิ์ดังต่อไปนี้:

  1. chmod 777 / ข้อมูล /
  2. chmod 777 / data / local /
    คุณอาจต้องการลองคัดลอก apk /data/local/ในกรณีนี้ตรวจสอบให้แน่ใจว่าได้ตั้งค่าการอนุญาตที่ถูกต้องไปยังapkด้วย
  3. chmod 777 /data/local/myapk.apk ตอนนี้คุณสามารถลองติดตั้งโดย: pm install -r -d /data/local/myapk.apk (สังเกตพา ธ สัมบูรณ์)

0

ดูเหมือนว่าการมีตัวเลขหลังจุดเป็นตัวการ

ฉันมีปัญหาเดียวกันกับ applicationId ต่อไปนี้

org.tony.stark.125jarvis

เปลี่ยนเป็น

org.tony.stark.jarvis

ฉันสามารถติดตั้งแอปลงในอุปกรณ์ Android ได้


0

คุณจะได้รับข้อผิดพลาดนี้หากminSdkVersionอินbuilde.gradleมีขนาดใหญ่กว่าเวอร์ชัน Android ของอุปกรณ์ ในกรณีนี้คุณต้องแก้ไขไฟล์minSdkVersion.


0

ลบรหัสใน AndroidManifest.xml:

เครื่องมือ: แทนที่ = "android: appComponentFactory" android: appComponentFactory = ""

มันได้ผล.

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