ข้อผิดพลาด INSTALL_PARSE_FAILED_NO_CERTIFICATES คืออะไร


163

ฉันพยายามเปลี่ยนกิจกรรมเริ่มต้น / หลัก / เริ่มต้น (ไม่ว่าคุณจะเรียกมันว่าอะไร) โดยแก้ไขandroidmanifest.xmlไฟล์ ทั้งหมดที่ฉันทำคือการเปลี่ยนแปลงandroid:nameสถานที่ให้บริการ อย่างไรก็ตามนี่ทำให้แอปทั้งหมดพัง เมื่อฉันพยายามติดตั้งมันล้มเหลวและอ่าน

ข้อผิดพลาดในการติดตั้ง: INSTALL_PARSE_FAILED_NO_CERTIFICATES

เมื่อฉันพยายามที่จะเปลี่ยนกลับไปเป็นสถานะก่อนหน้ามันก็ยังให้ฉันข้อผิดพลาดเดียวกัน ... ฉันทำอะไรไปแล้ว?


สำหรับคนอื่น: INSTALL_PARSE_FAILED_NO_CERTIFICATESเป็นข้อผิดพลาด-103ที่คุณสามารถรับ / ดูผ่านadb log( src ) เช่น D/PackageInstaller(21320): Installation error code: -103

คำตอบคือจริง .and มีเหตุผลหนึ่งที่จะช่วยให้ข้อผิดพลาดนี้อีกคือเมื่อคุณมีโปรแกรมเก่ากับชื่อแพคเกจเดียวกันในโทรศัพท์ของคุณติดตั้ง .. เพียงแค่ถอนการติดตั้งจากโทรศัพท์ของคุณก่อนที่คุณจะติดตั้งใหม่
เอ็ม kilinc Arslan

1
สำหรับทุกคนที่สะดุดกับคำถามนี้ - อ่านคำตอบทั้งหมดด้านล่าง! ดูเหมือนว่าข้อความแสดงข้อผิดพลาดนี้เป็นประเภทข้อผิดพลาด "บางอย่างผิดปกติ" มากกว่า เหตุผลที่ฉันพบว่าเป็นเพราะหนึ่งในวิธีการตอบคำถามให้ลงรายการ !!!!
GMc

คำตอบ:


56

คุณแก้ไขไฟล์AndroidManifest.xmlโดยตรง.apkหรือไม่? ถ้าเป็นเช่นนั้นมันจะไม่ทำงาน

Android ทุกเครื่อง.apkจะต้องมีการลงชื่อถ้ามันจะถูกติดตั้งบนโทรศัพท์แม้ว่าคุณจะไม่ได้ติดตั้งผ่านทาง Market ก็ตาม เครื่องมือในการพัฒนาแก้ไขปัญหานี้ด้วยการเซ็นชื่อด้วยใบรับรองการพัฒนา แต่.apkยังคงลงนาม

การใช้สิ่งนี้เพื่อให้อุปกรณ์สามารถบอกได้ว่าเป็นการ.apkอัปเกรดที่ถูกต้องสำหรับแอปพลิเคชันที่ติดตั้งหรือไม่เพราะถ้าเป็นใบรับรองจะเหมือนกัน

ดังนั้นหากคุณทำการเปลี่ยนแปลงใด ๆ ในแอพของคุณคุณจะต้องสร้างใหม่.apkเพื่อให้แอปได้รับการลงชื่ออย่างถูกต้อง


ขอบคุณมากมีปุ่มสร้างรายการใหม่โดยอัตโนมัติหรือไม่
mtmurdock

สำหรับผู้ชายที่ดิ้นรนกับการกระพือปีกให้เรียกใช้flutter cleanและเรียกใช้ / ดีบักอีกครั้ง! การดำเนินการนี้คล้ายกับโซลูชันด้านบนเนื่องจากจะล้างโฟลเดอร์ build และสร้างไฟล์ build อีกครั้งเมื่อรัน / debug!
Manoj Kumar

183

ฉันพบว่าข้อผิดพลาดนี้สามารถเกิดขึ้นได้เมื่อใช้การกำหนดค่าการลงชื่อที่ไม่ถูกต้อง ตามที่อธิบายไว้ที่นี่ , Android 7.0 เปิดตัวโครงการลายเซ็นใหม่, V2 รูปแบบ V2 ลงชื่อทั้ง APK แทนที่จะเป็น JAR ตามที่ทำในรูปแบบ V1 หากคุณเซ็นสัญญาด้วย V2 เท่านั้นและพยายามติดตั้งบนเป้าหมายก่อน 7.0 คุณจะได้รับข้อผิดพลาดนี้เนื่องจาก JARs ไม่ได้ลงนามและPackageManager pre-7.0 ไม่สามารถตรวจจับการมีอยู่ของ V2 APK Signature

เพื่อให้เข้ากันได้กับทุกระบบเป้าหมายตรวจสอบให้แน่ใจว่า APK ได้รับการเซ็นสัญญาด้วยทั้งสองรูปแบบโดยทำเครื่องหมายที่ช่องทั้งสองรุ่นในกล่องโต้ตอบGenerate Signed APKของGenerate Signed APKของ Android Studio ดังแสดงที่นี่:

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

หากคาดว่าจะมีเพียงเป้าหมาย 7.0 เท่านั้นไม่จำเป็นต้องมีลายเซ็น V1


5
คุณประหยัดเวลาได้มาก การอัปเกรด Android Studio ทำให้ฝันร้ายเกิดปัญหา นี่คือหนึ่งในนั้น ฉันสงสัยว่าดังนั้นไม่ประมาณครึ่งหนึ่งของการพัฒนา Android จะตาย Android Studio ไม่แจ้งเบาะแสเกี่ยวกับข้อผิดพลาด
Atul

4
โชคดีที่ฉันทดสอบการเปิดตัว apk ของฉันบนอุปกรณ์เก่าก่อนที่ฉันจะเผยแพร่ใน Google Play นั่นจะเป็นหายนะหากอุปกรณ์ <Android 7.0 ทั้งหมดไม่สามารถติดตั้งเวอร์ชันใหม่ได้ สิ่งที่มีสองรุ่นควรเป็น BIG RED POP UP DIALOG เมื่อคุณคลิกเพื่อสร้างการปล่อย apk!
คิริลล์คาร์มาซิน

ขอบคุณสำหรับสิ่งนี้. กำลังจะบ้าคลั่งมองหาว่าทำไม APK ของฉันจะไม่ทำงานด้านล่าง Android 7 แต่มันเป็นเพียงกล่องกาเครื่องหมายง่ายๆ น่ารำคาญมาก.
japzone

54

ฉันพบสิ่งนี้เกิดจากรุ่น JDK ของฉัน

ฉันกำลังมีปัญหากับ 'มด' และเป็นเพราะข้อควรระวังนี้ที่กล่าวถึงในเอกสารประกอบ:

http://developer.android.com/guide/publishing/app-signing.html#signapp

ข้อควรระวัง: ตั้งแต่ JDK 7 อัลกอริทึมการเซ็นชื่อเริ่มต้นมีการเปลี่ยนแปลงซึ่งคุณต้องระบุอัลกอริธึมลายเซ็นและไดเจสต์ (-sigalg และ -digestalg) เมื่อคุณลงชื่อ APK

ฉันมี JDK 7 ในบันทึกมดของฉันฉันใช้ -v สำหรับ verbose และมันแสดงให้เห็น

$ ant -Dadb.device.arg=-d -v release install
[signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
[signjar] '-keystore'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
[signjar] '-signedjar'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
[signjar] 'mykey'
 [exec]     pkg: /data/local/tmp/PairFinder-release.apk
 [exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

ฉันลงนาม JAR ด้วยตนเองและทำการ zipalign มัน แต่มันมีข้อผิดพลาดแตกต่างกันเล็กน้อย:

$ "$JAVA_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
$ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
641 KB/s (52620 bytes in 0.080s)

ฉันพบว่าคำตอบที่นี่

วิธีจัดการกับ INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES โดยไม่ต้องถอนการติดตั้ง

ฉันเพียงต้องการถอนการติดตั้งและใช้งานได้!

$ adb -d uninstall com.kizbit.pairfinder
Success
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Success
641 KB/s (52620 bytes in 0.080s)

ตอนนี้ฉันต้องการแก้ไข build.xml เพื่อใช้ตัวเลือกเหล่านี้เมื่อลงชื่อเท่านั้น!

ตกลงนี่คือ: C: \ Program Files \ Java \ android-sdk \ tools \ ant \ build.xml

            <signjar
                    sigalg="MD5withRSA"
                    digestalg="SHA1"
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />

3
JDK 7 ก็เป็นปัญหาของฉันเช่นกัน ฉันขี้เกียจและถอนการติดตั้ง JDK 7 และติดตั้ง JDK 6 ยังใช้งานได้ ^^ โซลูชันแฮ็กอื่น ๆ แต่มีความรุนแรงน้อยกว่าสามารถให้ทั้งสองติดตั้ง แต่ตั้ง JAVA_HOME เป็น JDK 6 และวาง bin bin ของ JDK 6 เป็นอันดับแรกใน PATH
Ixx

1
JDK 8 มีปัญหาเดียวกัน การเปลี่ยน PATH เป็น JDK 6 นั้นใช้งานได้ ขอบคุณผู้ช่วยชีวิต!
Chris Xue

ขอบคุณ! แอพตลาดของฉันรวบรวมด้วย JDK6 เมื่อฉันคอมไพล์แอปด้วย release keystore โดยใช้ JDK7 และพยายามติดตั้งมันทำให้ฉันมีปัญหานี้
Sileria

28

ส่วนใหญ่วิธีแก้ปัญหาสำหรับข้อผิดพลาดนี้ง่ายมาก:

  1. ถอนการติดตั้ง apk ของคุณ
  2. ทำความสะอาดโครงการ Android ของคุณ
  3. สร้างโครงการ Android ของคุณ
  4. ติดตั้ง / เรียกใช้ apk ของคุณ

ฉันทำ 2,3,4 และได้รับข้อผิดพลาดเดียวกัน คุณหมายความว่าอย่างไรเมื่อถอนการติดตั้ง apk ของคุณ จากอุปกรณ์ของฉัน? ฉันไม่คิดว่ามันเคยมีมาในอุปกรณ์ของฉัน
เคอร์ติส

ฉันก็เริ่มได้รับข้อผิดพลาดนี้จากอะไรไม่มีถ้าแก้ปัญหา แต่เพียงทำความสะอาดโครงการทำงาน ขอบคุณ
pgcan

18

แก้ไข (สำหรับฉัน) ใช้ใน keytool args

-sigalg MD5withRSA -keyalg RSA -keysize 1024

และใช้ใน jarsigner

-sigalg MD5withRSA -digestalg SHA1

วิธีแก้ปัญหาที่พบใน

Pitfals ชนิดใดที่มีอยู่สำหรับการลงชื่อ Android APK


ขอบคุณแก้ไขปัญหาให้ฉันด้วย (ฉันมี JDK 7)
Enrico Ros

ฉันแก้ไขมันในลักษณะเดียวกันเนื่องจากฉันใช้ appcelerator titanium และไม่สามารถเข้าถึงสคริปต์การสร้าง apk หมายเหตุวิธีนี้ต้องการการฟื้นฟู (เปลี่ยน!) ของคีย์ส่วนตัว
Federico

8

ฉันกำลังเผชิญกับปัญหาเดียวกัน ครั้งแรกที่ฉันสร้างสร้างโดยใช้ V2 และติดตั้งในอุปกรณ์มือถือที่ทำงานบน OS 5.1 และฉันได้รับปัญหาเดียวกัน แต่บิลด์ทำงานได้ดีบนแท็บเล็ตที่ทำงานบน OS 7.0 ดังนั้นฉันจึงสร้างบิลด์ด้วย V1 Jar และมันทำงานได้ดีกับอุปกรณ์ทั้งสอง

สรุป:หากคุณสนับสนุนอุปกรณ์ด้านล่าง android OS 7.0 ใช้ลายเซ็น V1 jar เพื่อสร้างบิลด์


ไม่จำเป็นต้องตรวจสอบทั้งคู่เลือก V1 หากคุณรองรับ OS 7.0 และต่ำกว่าตรวจสอบ V2 หากคุณสนับสนุนอุปกรณ์ที่ทำงานบน 7.0 และสูงกว่า
Rajiv Ranjan

7

ในกรณีของฉันฉันสามารถสร้างและเรียกใช้งานบิลด์ได้ แต่มีINSTALL_PARSE_FAILED_NO_CERTIFICATESข้อผิดพลาดเมื่อพยายามทำการดีบักบิลด์

ทางออกคือการลบdebug.keystoreไฟล์ของฉันและให้ ADT สร้างใหม่ เห็นได้ชัดว่ามันหมดอายุแล้ว

ทางออกที่ดีกว่าในระยะยาวคือการสร้างสิ่งdebug.keystoreที่ไม่หมดอายุหลังจากผ่านไปเพียงหนึ่งปีแทนที่จะปล่อยให้ ADT สร้างมันขึ้นมา นี่คือคำสั่งให้ทำ:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000

เมื่อได้รับแจ้งให้ป้อนค่าเหล่านี้:

  • ชื่อและนามสกุล: Android Debug
  • หน่วยองค์กร: Android
  • ชื่อองค์กร: ไม่ทราบ
  • เมืองหรือท้องที่: ไม่ทราบ
  • รัฐหรือจังหวัด: ไม่ทราบ
  • รหัสประเทศ: US

5

นี่เป็นวิธีแก้ปัญหาที่น่าเกลียด แต่รวดเร็ว: ใช้ JDK 6 แทนที่จะเป็น 7

หลังจากอ่านคำตอบของ Chloe ฉันได้ถอนการติดตั้ง JDK 7 ของฉัน (ไม่ต้องการใช้ในปัจจุบัน) และติดตั้ง JDK 6 ที่ซ่อมแล้ว ทางออกที่ดีกว่าจะทำให้ ant ใช้ JDK 6 (โดยไม่ถอนการติดตั้ง 7) อาจเป็นไปได้ในการเปลี่ยนแปลง / การตั้งค่าคุณสมบัตินี้:

java.library.path

ในไฟล์ local.properties มันอยู่ในไดเรกทอรีโครงการ (รูท)

Android ใช้งานไม่ได้กับ JDK 7 แต่อย่างใด (เพียง 6 หรือ 5) ดังนั้นการที่สคริปต์ ant ยังใช้ JDK 6 หรือ 5 น่าจะเป็นทางออกที่ดี


5

มันเป็นเพราะสร้างและปัจจุบันสร้างก่อนหน้านี้มีความขัดแย้งในรุ่นลายเซ็นระหว่าง v1 (ลายเซ็น jar) และ v2 (ลายเซ็น APK เต็ม)

หากต้องการแก้ไขการทำเครื่องหมายรุ่นลายเซ็นที่ถูกต้องภายใต้กล่องโต้ตอบ


5

เมื่อเร็ว ๆ นี้ฉันพบข้อผิดพลาดขณะอัปเกรดเป็น Android Studio 4.0 สาเหตุคือโครงการมีการปิดใช้งานการเซ็นชื่อ V2 ในการกำหนดค่าการลงชื่อเข้าbuild.gradleใช้

ทางออกคือการลบv2SigningEnabled falseหรือตั้งค่าอย่างชัดเจนtrueซึ่งเป็นค่าเริ่มต้น

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}

ฉันใช้ Android studio 4.0 แต่ไม่มีสิ่ง "v2SigningEnabled" ในไฟล์ build.gradle ของฉันจากนั้นฉันควรทำอย่างไร
Nuwan Harshakumara Piyarathna

3

ใน Android Studio เวอร์ชันใหม่กว่า 3.2+ หากคุณพยายามเรียกใช้การreleaseติดตั้งและคุณยังไม่ได้กำหนดการกำหนดค่าการเซ็นชื่อใด ๆ ระบบจะแสดงพรอมต์ข้อผิดพลาดและการติดตั้งจะล้มเหลว สิ่งที่คุณต้องทำคือรันdebugบิลด์หรือตั้งค่าการกำหนดค่าการลงชื่อ (V1 หรือ V2) อย่างถูกต้อง


3

คำตอบส่วนใหญ่เป็นจริง และอีกสาเหตุที่เกิดขึ้นคือ

► sdk ขั้นต่ำของคุณเล็กกว่า sdk ของอุปกรณ์
►คุณมีแอปพลิเคชั่นรุ่นเก่าในอุปกรณ์ของคุณด้วยชื่อแพ็คเกจเดียวกัน


นี่เป็นประสบการณ์ของฉัน - min sdk ในโครงการของฉันสูงกว่า sdk ของอุปกรณ์ มันเกิดขึ้นเพราะฉัน "พลาด" การเลือกที่ถูกต้องเมื่อฉันสร้างโครงการใน Android Studio และเลือกรุ่นที่สูงกว่าถัดไปโดยบังเอิญเป็น SDK ของฉันแล้วแท็บเล็ตเก่าของฉันทำงานอยู่
GMc

ทำให้เท่าเทียมกัน sdk ขั้นต่ำของฉันและ sdk อุปกรณ์แก้ไขปัญหาของฉัน
Nuwan Harshakumara Piyarathna

2

สิ่งนี้อาจเกิดขึ้นหากคุณพยายามรวม.jarไลบรารีที่มี AndroidManifest.xmlไฟล์อยู่

  • หากเป็นจาวาบริสุทธิ์ให้แน่ใจว่าคุณไม่ได้รวมไว้ในการส่งออก. jar
  • หากไม่ใช่จาวาบริสุทธิ์ (หมายถึงเป็นโครงการ Android) คุณต้องรวมเป็นโครงการห้องสมุด

2

นอกจากนี้คุณสามารถตรวจสอบ

Project Structure-> Default Config->Signing Config

หลังจากคุณเพิ่มทุกสิ่งที่คุณต้องการ



0

หลังจากเวลาผ่านไปหลายกระทู้ออนไลน์ในหัวข้อที่ฉันจัดการเพื่อแก้ไขโครงการของฉัน

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


0

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



0

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายามติดตั้งโครงการ Xamarin ที่สร้างขึ้นสำหรับ Android N Preview บนโทรศัพท์ที่ใช้ api v23 ทางออกคือไม่ทำเช่นนั้น


0

อีกวิธีในการรับข้อผิดพลาดนี้คือการสร้างโดยใช้antบน macOS และมีไฟล์ไอคอนตัวค้นหา ( Icon\r) ในแผนผังแหล่งที่มาของแอป ดูเหมือนว่ามันจะjarsignerไม่สามารถรับมือกับ carriage return ในชื่อไฟล์ได้และแม้ว่ามันจะอ้างว่าการลงชื่อนั้นถูกต้องถ้าคุณ-verifyใช้ APK มันจะส่งผลให้เกิด APK ที่จะไม่ติดตั้งบนอุปกรณ์เสมอ น่าแปลกใจที่ปลั๊กอิน Google ไดรฟ์ Finder เป็นแหล่งไฟล์ไอคอนตัวค้นหาที่ยอดเยี่ยม

วิธีแก้ไขคือการแยกไฟล์ที่ละเมิด (ซึ่งไม่มีประโยชน์ใน APK ต่อไป) ด้วยตัวระบุเช่นนี้ในfileset:

    <exclude name="**/Icon&#13;" />

0

ปัญหานี้จะเกิดขึ้นหากคุณติดตั้ง APK ที่ยังไม่ได้ลงชื่อรุ่น ตรวจสอบว่าคุณติดตั้ง APK ที่ถูกต้องหรือไม่


0

ฉันมีปัญหากับ ionic / Visual Studio Code (เรียกใช้ Android บนอุปกรณ์):

ฉันถอนการติดตั้งแอพบนอุปกรณ์มือถือ (การตั้งค่า / แอพ) ข้อผิดพลาดจะหายไปและแอพเริ่มต้นขึ้น


0

มันโยนข้อผิดพลาดนี้ให้ฉันวันนี้เพราะฉันมีแอพที่มี sd sd ขั้นต่ำ 28 และกดปุ่มเล่นบนอีมูเลเตอร์ด้วย SDK เวอร์ชัน 23 โดยปกติแล้วนี่เป็นสิ่งที่เป็นไปไม่ได้ มาก.


0

ประการแรกเพียงลองทำเช่นนั้น:

  • ไปที่สคริปต์ Gradle → bulid.gradle (โมดูล: แอป) →จากนั้นคุณต้องเปลี่ยนค่า (minSdkVersion) ตัวอย่างเช่นถ้าคุณใช้ 26 คุณสามารถลองลดค่าเช่น (minSdkVersion 20)
  • จากนั้นลอง (ซิงค์ทันที)

0

หากคุณใช้อีมูเลเตอร์ลองรีเซ็ตมันและหากคุณติดตั้งแอปพลิเคชั่นมือถือเป็นครั้งแรกจากนั้นปิดโหมดนักพัฒนาซอฟต์แวร์จากนั้นเปิดสวิตช์ที่ปัญหาจะได้รับการแก้ไข

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