2011-03-31 6 views
19

मैं jarsigner.exe उपयोग करने की कोशिश कर रहा है और adb.exe साथ स्थापित करने के लिए कोशिश कर रहा है। मैंने एक सरल हैलो एंड्रॉइड प्रोजेक्ट बनाया है और यह उपयोगकर्ता की .android निर्देशिका में स्थित debug.keystore का उपयोग करके एक हस्ताक्षरित HelloAndroid.apk उत्पन्न करेगा। ग्रहण से लॉन्च करते समय, यह बिना किसी समस्या के एमुलेटर पर एपीके बनाता है और इंस्टॉल करता है।मैन्युअल jarsigner.exe साथ एंड्रॉयड पैकेज पर हस्ताक्षर और मैन्युअल रूप से एक Android पैकेज पर हस्ताक्षर और एक एपीआई वी 8 एमुलेटर पर इसे स्थापित करने adb.exe

मैं एंड्रॉयड उपकरणों का इस्तेमाल एक अलग निर्देशिका करने के लिए एक अहस्ताक्षरित आवेदन पैकेज निर्यात करने के लिए। मैं पर हस्ताक्षर किए और पैकेज zipaligned और इसे स्थापित करने एडीबी थे, लेकिन त्रुटि प्राप्त:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 

मैं इस पर हस्ताक्षर करने के लिए निम्न आदेश का उपयोग किया।

jarsigner -verbose -keystore c:\users\jhwong\.android\debug.keystore 
    -storepass android -keypass android -digestalg SHA-1 -sigalg SHA1withRSA 
    -sigfile CERT -signedjar temp\HelloWorld2.apk 
     temp\HelloWorld.unsigned.apk androiddebugkey 
    adding: META-INF/MANIFEST.MF 
    adding: META-INF/CERT.SF 
    adding: META-INF/CERT.RSA 
    signing: res/layout/main.xml 
    signing: AndroidManifest.xml 
    signing: resources.arsc 
    signing: res/drawable-hdpi/icon.png 
    signing: res/drawable-ldpi/icon.png 
    signing: res/drawable-mdpi/icon.png 
    signing: classes.dex 

जो मुझे किसी भी त्रुटि नहीं दिया और सिर्फ यकीन है कि मैं भाग गया बनाता है:

jarsigner -verify -verbose temp\HelloWorld2.apk 

यह पता चला जार सत्यापित किया गया था और प्रत्येक फ़ाइल पर हस्ताक्षर किए और प्रकट का हिस्सा है।

मैं zipalign -v 4 temp\HelloWorld2.apk temp\HelloWorld3.apk जो त्रुटि के बिना समाप्त हो गया भाग गया। फिर adb install -r temp\HelloWorld3.apk का उपयोग किया गया।

मैं कई संबंधित धागे और लेख इन निर्देशों का सुझाव दे देखा है, लेकिन मैं क्यों यह ग्रहण का उपयोग करके हस्ताक्षरित पैकेज का निर्माण करने के छंद मैन्युअल रूप से काम नहीं करता है के रूप में उलझन में हूँ। मैंने एक्लिप्स से बनाया गया पैकेज भी लिया है और इसे स्थापित करने के लिए adb.exe का उपयोग करने में सक्षम था इसलिए मैंने इसे पैकेज पर हस्ताक्षर करने के लिए संकुचित कर दिया है। मैंने कीस्टोरों की कोशिश की है कि मैंने कीटोल से उत्पन्न किया है लेकिन उन्होंने काम नहीं किया है, इसलिए मैंने debug.keystore की कोशिश की है।

मैं अगर वे कुछ भी मेरी jarsigner कोड के साथ गलत देखा किसी भी सलाह की सराहना करेंगे।

उत्तर

37

हम इस सटीक एक ही समस्या थी। निम्नलिखित पैरामीटर मान उपयोग करके देखें:

jarsigner ... -digestalg SHA1 -sigalg MD5withRSA ... 

वैसे, स्पष्ट sigalg और digestalg का उपयोग कर JDK 7. साथ अनिवार्य होने के लिए

+2

आपने मेरा दिन बचाया! मुझे यह जानकारी कहीं भी नहीं मिल सका! – POMATu

+0

इसने मुझे चोट की दुनिया बचाई। – Tom

+0

हाँ! अंत में यह पाया। बहुत धन्यवाद! – bk138

7
का उपयोग कर JDK 1.7 एक ऐसे कीवर्ड्स का उपयोग करना पड़ता है apks प्रवेश करने के लिए

लगता "-sigalg MD5withRSA -digestalg SHA1 "

कारण: जेडीके 7 के रूप में, डिफ़ॉल्ट हस्ताक्षर एल्गोरिदम बदल गया है, आपको एपीके पर हस्ताक्षर करते समय हस्ताक्षर निर्दिष्ट करने और एल्गोरिदम (-सिग्गल और -डिगेस्टलग) डाइजेस्ट करने की आवश्यकता होती है।

कमान:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile] 
[originalapk] alias_name 
0

आप JDK 7 का उपयोग कर रहे हैं, की कोशिश

jarsigner -sigalg SHA1withRSA -digestalg SHA1

आप

jarsigner error: java.security.SignatureException: private key algorithm is not compatible with signature algorithm

मिलता है तो

कोशिश

jarsigner -sigalg MD5withRSA -digestalg SHA1

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