पहले से ही संकलित एपक पर हस्ताक्षर कैसे करें


121

मैंने एपीकेटूल के साथ एपीके को डीकोड किया है (जैसा कि मूल स्रोत कोड खो गया था) ताकि मैं लेआउट xml फ़ाइलों के साथ कुछ मुद्दों को ठीक कर सकूं। फिर मैंने इसे वापस APKtool के साथ फिर से बनाया है और जब मैंने इसे अपने डिवाइस पर स्थापित करने की कोशिश की (अदब का उपयोग करके: adb install appname.apk) इसने मुझे यह त्रुटि दी:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

हालांकि मूल एपीके को कीस्टोर (ग्रहण आईडीई पर) द्वारा हस्ताक्षरित किया गया था, यह एक नहीं है, मैं इसे कैसे ग्रहण से बाहर मूल कीस्टोन फाइल के साथ ठीक से हस्ताक्षर कर सकता हूं !?


हाँ, प्रमाणपत्रों का पूरा बिंदु लोगों को ऐसा करने से रोकना है ... यदि आपके पास मूल प्रमाणपत्र नहीं है तो आपको एक पुनर्जीवित होना होगा
edthethird

बस यह है, मेरे पास मूल प्रमाण पत्र है, लेकिन डिकोडिंग / पुनः निर्माण ने एपीके को हटा दिया।
सरोगेट

जवाबों:


285

का उपयोग कर एक कुंजी बनाएँ

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

इसके बाद एपीके का उपयोग कर साइन इन करें:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

अधिक जानकारी के लिए यहां देखें


11
यह उत्तर होना चाहिए, मूल उत्तर के लिए 3 तक 27 अपवोट्स, आइए!
काइल

1
यदि आप ऐसा करते हैं और एपीके को स्थापित करने का प्रयास करते हैं, तो आप एक INSTALL_FAILED_DUPLICATE_PERMISSION त्रुटि के साथ समाप्त हो सकते हैं। ऐसा तब होता है जब मूल APK को अधिलेखित नहीं किया जा सकता है (उदाहरण के लिए सिस्टम या बिल्ट-इन ऐप)
Couitchy

@Couitchy adb shell pm install -r /data/tmp/myapk.apk
Dr Deo

14
यदि आप एक कुंजी बनाने की जहमत नहीं उठाना चाहते हैं तो आप डिबग कुंजी का उपयोग कर सकते हैं: jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -Stystore ~ ​​/ .android / debug.keystore app.apk androiddebugkey -storepass android
Pellet

3
क्या उपयोग करने jarsignerऔर के बीच कोई अंतर है apksigner? एक पर हस्ताक्षर करने की आवश्यकता होती है और फिर zeepigning और दूसरी zeepigning और फिर साइनइनिग
मारिया इनेस पर्निसारी

72

स्वचालित प्रक्रिया:

इस टूल का उपयोग करें (Google से नए एस्किनगर का उपयोग करता है):

https://github.com/patrickfav/uber-apk-signer

अस्वीकरण: Im डेवलपर :)

मैनुअल प्रक्रिया:

चरण 1: उत्पन्न कीस्टोर (केवल एक बार)

आपको एक बार कीस्टोर जनरेट करना होगा और इसका उपयोग अपनी unsignedएपीके साइन करने के लिए करना होगा । का प्रयोग करें JDK द्वारा प्रदान में पायाkeytool %JAVA_HOME%/bin/

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

चरण 2 या 4: Zeepign

zipalign जो कि उदाहरण के लिए एंड्रॉइड एसडीके द्वारा दिया गया एक टूल है,%ANDROID_HOME%/sdk/build-tools/24.0.2/ यदि आप एपीके को प्ले स्टोर पर अपलोड करना चाहते हैं तो यह एक अनिवार्य अनुकूलन कदम है।

zipalign -p 4 my.apk my-aligned.apk

नोट: पुराने का उपयोग करते समय jarsignerआपको हस्ताक्षर करने के बाद ज़िप करने की आवश्यकता होती है । नए का उपयोग करते समय apksignerविधि आप यह कर पहले (भ्रमित, मुझे पता है) पर हस्ताक्षर। Apignigner से पहले zipalign को आमंत्रित करना ठीक काम करता है क्योंकि apignigner APK संरेखण और संपीड़न (jarsigner के विपरीत) को संरक्षित करता है

आप के साथ संरेखण को सत्यापित कर सकते हैं

zipalign -c 4 my-aligned.apk

चरण 3: हस्ताक्षर करें और सत्यापित करें

24.0.2 और पुराने उपकरणों का उपयोग करना

का प्रयोग करें jarsignerजो, Keytool की तरह, JDK वितरण के साथ आता है में पाया %JAVA_HOME%/bin/और यह बहुत पसंद का उपयोग करें:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

और के साथ सत्यापित किया जा सकता है

jarsigner -verify -verbose my_application.apk

24.0.3 और नए बिल्ड-टूल्स का उपयोग करना

एंड्रॉइड 7.0 एपीके सिग्नेचर स्कीम v2 पेश करता है, एक नई ऐप-साइनिंग स्कीम जो एपीपी फाइलों के लिए अनधिकृत बदलावों के खिलाफ तेज ऐप इंस्टॉल समय और अधिक सुरक्षा प्रदान करती है ( अधिक जानकारी के लिए यहां और यहां देखें)। इसलिए, Google ने अपने खुद के एपीके साइनर कोapksigner लागू किया, जिसे (duh!) स्क्रिप्ट फ़ाइल में पाया जा सकता है %ANDROID_HOME%/sdk/build-tools/24.0.3/(.jar /libउप-फ़ोल्डर में है)। इसे ऐसे उपयोग करें

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

और के साथ सत्यापित किया जा सकता है

apksigner verify my-app.apk

आधिकारिक दस्तावेज यहां पाया जा सकता है।


6
Uber-apk-signer के लिए धन्यवाद! महान उपकरण!
कैंटोनी

2
बिल्ड-टूल्स के लिए 24.0.3 कॉल करने का सही तरीका है: zipalign -p 4 my.apk my-align.apk
kinORnirvana

आपके वर्णन के लिए धन्यवाद! पहले uber-apk-signer की कोशिश की, लेकिन शायद इसलिए असफल हो गया क्योंकि मैंने oracles "आधिकारिक" जावा के बजाय अपने सिस्टम पर openJDK स्थापित किया है। इसलिए मैंने मैनुअल तरीके से कोशिश की और असफल भी हुआ (अभी भी वही त्रुटि [INSTALL_PARSE_FAILED_NO_CERTIFICATES])। Uber-apk-signer के साथ सत्यापन ने मुझे कुछ और जानकारी दी signature VERIFY FAILED[...] ERROR: JAR signer CERT.RSA: JAR signature META-INF/CERT.RSA uses digest algorithm 2.16.840.1.101.3.4.2.1 and signature algorithm 1.2.840.113549.1.1.1 which is not supported on API Levels [[15, 17]]। हां, Android 4.2.2, SHA256 नहीं है? विचार?
एंटीप्लेक्स

@antiplex GitHub में समस्या की सूचना दें ऐसा नहीं
पैट्रिक फ़ाव्रे

@ for3st का मतलब यह है कि मेरे इश्यू आपके सीमित ज्ञान के कारण एपीके-साइनिंग के आसपास नहीं हो सकते हैं, लेकिन uber-apk-signer की असंगति के किसी रूप के कारण हो सकता है? लेकिन फिर भी मैनुअल तरीका भी विफल हो जाता है जो आपके टूल से असंबंधित लगता है ...
एंटीप्लेक्स

14

सबसे तेज़ तरीका डीबग कीस्टोर के साथ साइन इन करना है:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android

या विंडोज पर:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android

6

आप एपीके को साइन करने के लिए जारसिग्नर का उपयोग करते हैं। आपको मूल कीस्टोर के साथ साइन इन करने की आवश्यकता नहीं है, बस एक नया जनरेट करें। विवरणों पर पढ़ें: http://developer.android.com/guide/publishing/app-signing.html


1
लिंक तोड़ दिया गया है
jayatubi

4

आप में से जो हर प्रोजेक्ट के लिए एडिट करने के लिए एक बैट फाइल नहीं बनाना चाहते हैं, या न ही keytools और jarsigner प्रोग्राम्स से जुड़ी सभी कमांड्स को याद रखना चाहते हैं और बस एक प्रक्रिया में इसे पूरा करना चाहते हैं, इस प्रोग्राम का उपयोग करें:

http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx

मैंने इसे बनाया क्योंकि मैं हर बार सभी फ़ाइल स्थानों को टाइप करने की लंबी प्रक्रिया से तंग आ चुका था।

यह प्रोग्राम आपके कॉन्फ़िगरेशन को बचा सकता है इसलिए अगली बार जब आप इसे शुरू करते हैं, तो आपको बस जनरेट करने की आवश्यकता होती है यह आपके लिए इसे संभाल लेगा। बस।

कोई इंस्टॉल की आवश्यकता नहीं है, यह पूरी तरह से पोर्टेबल है और एक ही फ़ोल्डर में सीएसवी में इसके कॉन्फ़िगरेशन को बचाता है।


4

अद्यतन उत्तर

चेक https://shatter-box.com/knowledgebase/android-apk-signing-tool-apk-signer/

पुराना उत्तर

अपने ऐप पर हस्ताक्षर करने के लिए apk-signer को एक अच्छा तरीका जांचें


1
सबसे ठीक से, क्योंकि यह एक पुराने धागा था, तो आप इस एक के लिए देख सकते हैं shatter-box.com/knowledgebase/...
shereifhawary
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.