2010-05-26 6 views
93

मैं androidmanifest.xml फ़ाइल संपादित करके अपनी डिफ़ॉल्ट/मुख्य/स्टार्टअप (जिसे भी आप इसे कॉल करते हैं) गतिविधि को बदलने की कोशिश कर रहा था। मैंने जो किया वह android:name संपत्ति बदल गया था। हालांकि, यह पूरी तरह से पूरे ऐप तोड़ दिया। यह विफल रहता है और पढ़ताINSTALL_PARSE_FAILED_NO_CERTIFICATES त्रुटि क्या है?

Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES

जब मैं अपनी पिछली स्थिति में इसे वापस बदलने की कोशिश की, यह अभी भी मुझे एक ही त्रुटि दे रहा था जब मैं स्थापित करने का प्रयास ... मैं क्या किया है!?!?!

उत्तर

39

क्या आपने को सीधे .apk फ़ाइल में संपादित किया था? यदि ऐसा है, तो यह काम नहीं करेगा।

Every Android .apk needs to be signed if it is going to be installed on a phone, भले ही आप बाजार के माध्यम से इंस्टॉल नहीं कर रहे हों। विकास उपकरण विकास प्रमाण पत्र पर हस्ताक्षर करके इस पर काम करते हैं लेकिन .apk अभी भी हस्ताक्षरित है।

इसका एक उपयोग यह है कि एक डिवाइस यह बता सकता है कि .apk किसी इंस्टॉल किए गए एप्लिकेशन के लिए एक वैध अपग्रेड है, क्योंकि यदि यह प्रमाण पत्र समान होगा।

तो यदि आप अपने ऐप में कोई भी बदलाव करते हैं तो आपको .apk का पुनर्निर्माण करने की आवश्यकता होगी, इसलिए यह ठीक से हस्ताक्षरित हो जाता है।

+0

महान के तहत उचित हस्ताक्षर संस्करण ठीक करने के लिए हो रही है धन्यवाद, क्या मैनिफेस्ट को स्वचालित रूप से पुनर्निर्माण करने के लिए कोई बटन है? – mtmurdock

+3

बस ग्रहण में मेनिफेस्ट संपादित करें और 'सहेजें' पर क्लिक करें – HXCaine

51

मुझे पता चला कि यह मेरे जेडीके संस्करण के कारण हुआ था।

मैं 'चींटी' के साथ इस समस्या हो रही थी और यह इस चेतावनी दस्तावेज में उल्लेख किया है की वजह से था:

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

Caution: As of JDK 7, the default signing algorithim has changed, requiring you to specify the signature and digest algorithims (-sigalg and -digestalg) when you sign an APK.

मैं अपने चींटी लॉग में JDK 7. है, मैं अत्यधिक शब्द है और इसके लिए इस्तेमाल किया -v पता चला है

$ 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] 

मैं जार मैन्युअल पर हस्ताक्षर किए और यह zipaligned है, लेकिन यह एक अलग त्रुटि दिया:

$ "$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) 

मैंने पाया कि यहां उत्तर दिया गया।

How to deal with INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES without uninstallation

मैं केवल इसकी स्थापना रद्द करने के लिए आवश्यक है और फिर इसे काम किया!

$ 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 \ जावा \ Android-SDK \ उपकरण \ चींटी \ 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

जेडीके 7 भी मेरी समस्या थी। मैं आलसी और अनइंस्टॉल किया गया जेडीके 7 और जेडीके 6 स्थापित किया, ^^ भी काम किया। अन्य हैक समाधान लेकिन कम कट्टरपंथी दोनों को स्थापित करने दिया जा सकता है लेकिन JAVA_HOME को जेडीके 6 पर सेट करें और पहले पीएटीएच में जेडीके 6 का बिन पथ डालें। – Ixx

+1

जेडीके 8 में एक ही समस्या है। जेडीके 6 में पैथ बदलना काम किया। लाइफसेवर धन्यवाद! –

+0

धन्यवाद! मेरा बाजार ऐप जेडीके 6 के साथ संकलित किया गया था। जब मैंने जेडीके 7 का उपयोग करके रिलीज कीस्टोर के साथ ऐप संकलित किया और इंस्टॉल करने का प्रयास किया, तो उसने मुझे यह समस्या दी। – Sileria

0

कुछ समय और इस विषय पर कई ऑनलाइन धागे बाद मैं ठीक करने में कामयाब मेरी परियोजना।

यह मुख्य रूप से अंतिम फाइलों (छवियों या लेआउट) पर विचार कर रहा है जो आप डालते हैं। अगर आप उन्हें हटा देते हैं, तो यह काम करेगा, और आप फिर से अपनी परियोजना का निर्माण कर सकते हैं।

5

यह वह जगह है एक बदसूरत लेकिन तेजी से समाधान: JDK 6 का उपयोग 7.

के बजाय पढ़ने क्लो के जवाब के बाद, मैं अपने JDK 7 (यह वर्तमान में वैसे भी जरूरत नहीं है) की स्थापना रद्द और JDK 6. यही कारण है कि यह तय स्थापित ।एक बेहतर समाधान से चींटी जेडीके 6 का उपयोग करेगी (बिना अनइंस्टॉल किए 7)। हो सकता है कि संभव बदलते/इस संपत्ति की स्थापना:

java.library.path

local.properties फ़ाइल में। यह प्रोजेक्ट निर्देशिका (रूट) में है।

एंड्रॉइड जेडीके 7 के साथ काम नहीं करता है (केवल 6 या 5), इसलिए यह सुनिश्चित करें कि चींटी स्क्रिप्ट भी जेडीके 6 या 5 का उपयोग करती है, शायद यह एक अच्छा समाधान है।

2

पर्यावरण परिवर्तनीय JAVA_HOME को जेडीके 5 या 6 (जेडीके 7 के बजाय) में सेट करने से त्रुटि तय हुई।

15

हल (मेरे लिए) Keytool आर्ग

-sigalg MD5withRSA -keyalg RSA -keysize 1024 

में उपयोग करते हुए और

-sigalg MD5withRSA -digestalg SHA1 

समाधान

What kind of pitfals exist for the Android APK signing?

+0

धन्यवाद, मेरे लिए भी समस्या तय की गई है (मेरे पास जेडीके 7 है)। –

+0

मैंने इसे वैसे ही ठीक कर दिया है, क्योंकि मैं एपसेलरेटर टाइटेनियम का उपयोग करता हूं और एपीके पीढ़ी स्क्रिप्ट तक पहुंच नहीं है। ध्यान दें कि इस समाधान के लिए निजी कुंजी के पुनर्जनन (परिवर्तन!) की आवश्यकता होती है। – Federico

6

अधिकांश समय समाधान में पाया jarsigner में उपयोग करते हुए इस त्रुटि के लिए वास्तव में सरल है:

  1. Uninstall your apk.
  2. Clean your android project.
  3. Build your android project.
  4. install/run your apk

मज़ा

4

है मेरे मामले में, मैं बना सकता है और चलाने के रिलीज बनाता है, लेकिन INSTALL_PARSE_FAILED_NO_CERTIFICATES त्रुटि जब एक डीबग बिल्ड करने के लिए कोशिश कर रहा है मिला है।

समाधान मेरी debug.keystore फ़ाइल को हटाना था और एडीटी को इसे फिर से बनाना था। यह स्पष्ट रूप से समाप्त हो गया था।

एक बेहतर दीर्घकालिक समाधान स्पष्ट रूप से debug.keystore बनाना है जो एडीटी बनाने के बजाय केवल एक वर्ष के बाद समाप्त नहीं होता है।

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

संकेत मिलने पर, इन मूल्यों को दर्ज करें:: यहाँ ऐसा करने के लिए आदेश है

  • प्रथम और अंतिम नाम: Android डीबग
  • संगठनात्मक इकाई: एंड्रॉयड
  • नाम संगठन का: अज्ञात
  • शहर या इलाका: अज्ञात
  • राज्य या प्रांत: अज्ञात
  • देश कोड: अमेरिका
2

यह अगर आपको लगता है कि एक AndroidManifest.xml फ़ाइल है एक .jar पुस्तकालय शामिल करने का प्रयास हो सकता है।

  • यदि यह शुद्ध जावा है तो सुनिश्चित करें कि आप इसे शामिल नहीं करते हैं।जार निर्यात
  • यदि यह शुद्ध जावा (अर्थात यह एक Android परियोजना है) नहीं है तो आप एक लाइब्रेरी प्रोजेक्ट
0

मैं अपने ग्रहण कंसोल में इस त्रुटि हो रही थी के रूप में यह शामिल करने के लिए की है। यह पता चला है कि मेरे पास एक ही सामग्री के साथ दो जार थे लेकिन अलग-अलग नाम थे और वे एक दूसरे के साथ विवाद कर रहे थे। मैंने अभी उनमें से एक को हटा दिया है और डिवाइस पर ऐप इंस्टॉल करने में कामयाब रहा है।

0

मुझे यह त्रुटि मिल रही थी क्योंकि मैंने रिलीज़ किया था कि मेरा ant release विफल रहा क्योंकि मैं डिस्क स्थान से बाहर हो गया था।

0

मुझे यह त्रुटि मिली जब मैंने एंड्रॉइड एन पूर्वावलोकन के खिलाफ बनाए गए एक्समेरिन प्रोजेक्ट को एपीआई v23 चलाने वाले फ़ोन पर स्थापित करने का प्रयास किया। समाधान ऐसा नहीं करना है।

0

इस त्रुटि को पाने का एक और तरीका मैकोज़ पर ant का उपयोग करना है और ऐप के स्रोत पेड़ में एक खोजक आइकन फ़ाइल (Icon\r) है। ऐसा लगता है कि jarsigner फ़ाइल नाम में कैरिज रिटर्न का सामना नहीं कर सकता है, हालांकि यह दावा करेगा कि हस्ताक्षर मान्य है यदि आप -verify एपीके हैं, तो यह हमेशा एक एपीके में परिणाम देता है जो किसी डिवाइस पर इंस्टॉल नहीं होता है। विडंबना यह है कि, Google ड्राइव खोजक प्लगइन खोजक आइकन फ़ाइलों का एक बड़ा स्रोत है।

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

मैंने पाया कि इस त्रुटि को अब भी जब गलत उपयोग करते हुए हो सकता है:

समाधान fileset में इस तरह की एक विनिर्देशक साथ अपमानजनक फ़ाइलें (जो वैसे भी APK में बेकार हैं) को बाहर करने का है हस्ताक्षर विन्यास। जैसा कि here वर्णित है, एंड्रॉइड 7.0 एक नई हस्ताक्षर योजना, वी 2 प्रस्तुत करता है। वी 2 योजना वी 1 योजना में किए गए जार की बजाय पूरे एपीके पर हस्ताक्षर करती है। यदि आप केवल V2 के साथ साइन इन करते हैं, और प्री-7.0 लक्ष्य पर इंस्टॉल करने का प्रयास करते हैं, तो आपको यह त्रुटि मिल जाएगी क्योंकि JARs स्वयं हस्ताक्षरित नहीं हैं और पूर्व-7.0 पैकेज मैनेजर वी 2 एपीके हस्ताक्षर की उपस्थिति का पता नहीं लगा सकता है।

सभी लक्ष्य सिस्टम के साथ संगत होना करने के लिए, सुनिश्चित करें कि APK एंड्रॉयड स्टूडियो के में दोनों हस्ताक्षर संस्करण बॉक्स चेक हस्ताक्षरित APK संवाद उत्पन्न द्वारा दोनों योजनाओं के साथ प्रवेश किया हुआ है जैसा कि यहाँ दिखाया:

enter image description here

हैं केवल 7.0 लक्ष्य अनुमानित हैं, फिर वी 1 हस्ताक्षर शामिल करने की आवश्यकता नहीं है।

1

इसकी वजह से पहले से उत्पन्न निर्माण और मौजूदा v1 (जार हस्ताक्षर) और वी 2 (पूर्ण APK हस्ताक्षर) के बीच हस्ताक्षर संस्करण में संघर्ष,

टिकटिक उत्पन्न हस्ताक्षरित APK संवाद

संबंधित मुद्दे