คุณลงชื่อด้วยรหัส debug โดยไม่ได้ตั้งใจหรือไม่?
Google Play ไม่อนุญาตให้คุณเผยแพร่แอปที่ลงชื่อด้วยที่เก็บคีย์ดีบักของคุณ หากคุณพยายามอัปโหลด APK ดังกล่าว Google Play จะล้มเหลวด้วยข้อความ "คุณอัปโหลด APK ที่ลงชื่อเข้าใช้ในโหมดแก้ไขข้อบกพร่องคุณต้องลงชื่อ APK ของคุณในโหมดเผยแพร่"
อย่างไรก็ตามหากคุณพยายามอัปโหลดอัปเดตที่ลงชื่อด้วยที่เก็บคีย์ดีบักคุณจะไม่เห็นข้อความนี้ Google Play จะแสดงข้อความที่แสดงในคำถามโดยอ้างถึงลายนิ้วมือ SHA1
ดังนั้นก่อนอื่นให้ตรวจสอบว่าคุณได้ลงชื่อแอปด้วยคีย์ดีบั๊กของคุณหรือไม่
ฉันจะตรวจสอบว่าใช้คีย์การเซ็นชื่อได้อย่างไร
รวบรวมข้อมูลจาก APK
คุณสามารถตรวจสอบใบรับรองดั้งเดิมของ APK และอัปเดต APK ที่ลงชื่อด้วยโดยใช้คำสั่งเหล่านี้โดยใช้ Java keytool
:
keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk
ข้อมูลนี้แสดงข้อมูลโดยละเอียดเกี่ยวกับวิธีการลงชื่อ APK เช่น:
Owner: CN=My App, O=My Company, L=Somewhere, C=DE
Issuer: CN=My App, O=My Company, L=Somewhere, C=DE
Serial number: 4790b086
Valid from: Mon Nov 11 15:01:28 GMT 2013 until: Fri Mar 29 16:01:28 BST 2041
Certificate fingerprints:
MD5: A3:2E:67:AF:74:3A:BD:DD:A2:A9:0D:CA:6C:D4:AF:20
SHA1: A6:E7:CE:64:17:45:0F:B4:C7:FC:76:43:90:04:DC:A7:84:EF:33:E9
SHA256: FB:6C:59:9E:B4:58:E3:62:AD:81:42:...:09:FC:BC:FE:E7:40:53:C3:D8:14:4F
Signature algorithm name: SHA256withRSA
Version: 3
ในส่วนที่สำคัญที่จะต้องทราบที่นี่ - สำหรับแต่ละเอพีเค - เป็นSHA1ค่าลายนิ้วมือที่เจ้าของค่าตัวตนและใช้คูปองได้ตั้งแต่ / จนกระทั่งวันที่
หากkeytool
คำสั่งนั้นใช้ไม่ได้ ( -jarfile
ตัวเลือกต้องการ Java 7) คุณสามารถรับข้อมูลพื้นฐานเพิ่มเติมได้จากjarsigner
คำสั่ง:
jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk
น่าเสียดายที่นี่ไม่แสดงลายนิ้วมือ SHA1 แต่จะแสดงตัวตนของเจ้าของ X.509 พร้อมกับวันหมดอายุใบรับรอง ตัวอย่างเช่น:
sm 4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more)
X.509, CN=My App, O=My Company, L=Somewhere, C=DE
[certificate is valid from 11/11/13 12:12 to 29/03/41 12:12]
[CertPath not validated: Path does not chain with any of the trust anchors]
คุณสามารถละเว้นข้อความ "CertPath ไม่ผ่านการตรวจสอบ" พร้อมกับคำเตือนเกี่ยวกับกลุ่มใบรับรองหรือการประทับเวลา ไม่เกี่ยวข้องในกรณีนี้
เปรียบเทียบค่า Owner, SHA1 และ Expiry ระหว่าง APK
หากค่าตัวตนของเจ้าของ / X.509คือแสดงCN=Android Debug, O=Android, C=US
ว่าคุณได้ลงนาม APK ด้วยคีย์ดีบั๊กของคุณไม่ใช่รหัสรีลีสดั้งเดิม
หากค่าลายนิ้วมือSHA1นั้นแตกต่างกันระหว่างต้นฉบับและอัปเดต APK แสดงว่าคุณไม่ได้ใช้คีย์การลงชื่อเดียวกันสำหรับทั้ง APK
หากค่าตัวตนของเจ้าของ / X.509นั้นแตกต่างกันหรือวันหมดอายุใบรับรองแตกต่างกันระหว่าง APK ทั้งสองแสดงว่าคุณไม่ได้ใช้รหัสลงนามเดียวกันสำหรับ APK ทั้งสอง
โปรดทราบว่าแม้ว่าค่า Owner / X.509 จะเหมือนกันระหว่างใบรับรองสองใบนี่ไม่ได้หมายความว่าใบรับรองเหมือนกัน - หากมีสิ่งใดที่ไม่ตรงกัน - เช่นค่าลายนิ้วมือ - ใบรับรองนั้นจะแตกต่างกัน
ค้นหาที่เก็บต้นฉบับดั้งเดิมตรวจสอบข้อมูลสำรอง
หาก APK ทั้งสองมีข้อมูลใบรับรองที่แตกต่างกันคุณต้องค้นหาที่เก็บคีย์ดั้งเดิมนั่นคือไฟล์ที่มีค่าลายนิ้วมือ SHA1 แรกที่ Google Play (หรือkeytool
) บอกกับคุณ
ค้นหาไฟล์ keystore ทั้งหมดที่คุณสามารถหาได้ในคอมพิวเตอร์ของคุณและในการสำรองข้อมูลใด ๆ ที่คุณมีจนกว่าคุณจะมีไฟล์ที่มีลายนิ้วมือ SHA1 ที่ถูกต้อง:
keytool -list -keystore my-release.keystore
เพียงกดEnterถ้าได้รับพร้อมท์ให้ใส่รหัสผ่านคุณไม่จำเป็นต้องป้อนรหัสผ่านหากคุณต้องการตรวจสอบค่า SHA1 อย่างรวดเร็ว
ฉันหาที่เก็บคีย์ดั้งเดิมไม่พบทุกที่
หากคุณไม่พบที่เก็บคีย์ดั้งเดิมคุณจะไม่สามารถเผยแพร่การอัปเดตใด ๆ ของแอปนี้ได้
Android กล่าวถึงสิ่งนี้อย่างชัดเจนในหน้าลงชื่อแอปพลิเคชันของคุณ :
คำเตือน:เก็บที่เก็บคีย์และคีย์ส่วนตัวของคุณในที่ปลอดภัยและให้แน่ใจว่าคุณมีการสำรองข้อมูลที่ปลอดภัย หากคุณเผยแพร่แอปไปยัง Google Play และทำรหัสที่คุณลงนามในแอปหายไปคุณจะไม่สามารถเผยแพร่การอัปเดตใด ๆ ในแอปของคุณได้เนื่องจากคุณต้องลงชื่อแอปทุกเวอร์ชันด้วยคีย์เดียวกันเสมอ
หลังจากการเปิดตัว APK ครั้งแรกการเผยแพร่ที่ตามมาทั้งหมดจะต้องลงชื่อด้วยรหัสเดียวกัน
ฉันสามารถแยกรหัสการลงชื่อดั้งเดิมจาก APK ต้นฉบับได้หรือไม่
ไม่ได้นี่เป็นไปไม่ได้ APK มีข้อมูลสาธารณะเท่านั้นไม่ใช่ข้อมูลกุญแจส่วนตัวของคุณ
ฉันสามารถย้ายไปยังรหัสลงนามใหม่ได้หรือไม่
ไม่แม้ว่าคุณจะพบต้นฉบับคุณไม่สามารถเซ็น APK ด้วยคีย์ A จากนั้นลงชื่อการอัปเดตครั้งต่อไปด้วยทั้งคีย์ A และ B จากนั้นลงชื่อการอัปเดตถัดไปหลังจากนั้นด้วยคีย์ B เท่านั้น
การลงชื่อ APK (หรือไฟล์ JAR) ด้วยหลายปุ่มนั้นเป็นไปได้ในทางเทคนิคแต่ Google Play ไม่ยอมรับ APK ที่มีลายเซ็นหลายรายการอีกต่อไป
ความพยายามที่จะทำเช่นนั้นจะส่งผลให้ข้อความ "APK ของคุณได้รับการลงนามด้วยใบรับรองหลายใบกรุณาเซ็นชื่อด้วยใบรับรองเดียวแล้วอัปโหลดอีกครั้ง"
ฉันจะทำอย่างไร
คุณจะต้องสร้างแอปของคุณด้วยรหัสแอปพลิเคชันใหม่ (เช่นเปลี่ยนจาก "com.example.myapp" เป็น "com.example.myapp2") และสร้างรายชื่อแบรนด์ใหม่บน Google Play
อาจเป็นไปได้ว่าคุณจะต้องเปลี่ยนรหัสของคุณเพื่อให้ผู้คนสามารถติดตั้งแอพใหม่ได้แม้ว่าพวกเขาจะมีแอพเก่าติดตั้งอยู่เช่นคุณต้องแน่ใจว่าคุณไม่มีผู้ให้บริการเนื้อหาที่ขัดแย้งกัน
คุณจะสูญเสียฐานการติดตั้งรีวิวและอื่น ๆ และจะต้องหาวิธีในการทำให้ลูกค้าปัจจุบันของคุณถอนการติดตั้งแอปเก่าและติดตั้งเวอร์ชันใหม่
ตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลที่เก็บคีย์และรหัสผ่านที่คุณใช้สำหรับเวอร์ชันนี้อย่างปลอดภัย