एंड्रॉइड स्टूडियो: ग्रेडेल का उपयोग करके हस्ताक्षरित APK कैसे उत्पन्न करें?


89

मैंने Google और SO पर खोज की है, लेकिन मुझे अपना उत्तर नहीं मिला।

यह पहली बार है जब मैं ग्रेडल सिस्टम के साथ काम कर रहा हूं और मैं अब एक एपीकेड एपीके जनरेट करने के बिंदु पर हूं, जिसे गूगल प्ले पर अपलोड करना है (प्रोजेक्ट को ग्रहण से आयात किया गया है)।

अब मैंने यहाँ का हिस्सा पढ़ा है http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks जिन्हें आपको signingConfigsअपने साथ जोड़ना चाहिएbuild.gradle

मैंने इन पंक्तियों को जोड़ दिया है और अब मैंने देखा है कि आपको चलाने की आवश्यकता है ./gradlew assembleReleaseलेकिन मेरे cmd रिटर्न में इस 'रनिंग' को चलाना आंतरिक या बाहरी कमांड, ऑपरेशनल प्रोग्राम या बैच फ़ाइल के रूप में मान्यता प्राप्त नहीं है। मैंने build.gradle पर राइट क्लिक करने और इसे चलाने की कोशिश की है, यह कहते हुए कि यह बहुत सक्सेसफुल था, लेकिन एक बार बिल्ड / एपीके फोल्डर में देखने के बाद केवल एक फाइल जिसे कहा जाता हैapp-debug-unaligned.apk

तो मैं ग्रैडल सिस्टम का उपयोग करके हस्ताक्षरित APK कैसे जनरेट करूं?



@ScottBarta ने आंशिक रूप से चाल चली, एक बार जब मैंने रिलीज़ मोड पर स्विच किया और ग्रेडेल को दौड़ाया, तब भी मुझे एक त्रुटि मिली, लेकिन उसने मेनू के माध्यम से साइन इन किए गए बिल्ड> जनरेट एपीके का उपयोग करके इसे अंततः काम किया! धन्यवाद मैंने आपको दिए गए लिंक पर उत्थान किया।
गोयि

प्रवेश फ़ाइल से v1 (जार हस्ताक्षर) या v2 (पूर्ण apk हस्ताक्षर) संस्करण के साथ साइन इन करें? यहाँ समाधान: stackoverflow.com/questions/57943259/…
user1506104

जवाबों:


97

के अनुसार अपने निर्माण उत्पन्न करने के लिए तीन तरीके हैं buildType। (आपके मामले में, यह जारी है लेकिन इसे कुछ भी नाम दिया जा सकता है जो आप चाहते हैं।)

  1. एंड्रॉइड स्टूडियो के दाएं पैनल में ग्रैडल टास्क पर जाएं और मॉड्यूल टास्क के तहत assembleReleaseया उसके assemble(#your_defined_buildtype)नीचे खोजें

  2. वाम पैनल में बिल्ड वेरिएंट पर जाएं और ड्रॉप डाउन से बिल्ड का चयन करें

  3. फ़ाइल एक्सप्लोर में प्रोजेक्ट रूट डायरेक्टरी पर जाएँ और cmd / टर्मिनल खोलें और चलाएँ:

    लिनक्स: ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    खिड़कियाँ: gradlew assembleRelease or assemble(#your_defined_buildtype)

यदि आप एक रिलीज़ बिल्ड (केवल) करना चाहते हैं, तो आप Build> का उपयोग कर सकते हैंGenerate Signed apk । अन्य बिल्ड प्रकारों के लिए, केवल उपरोक्त तीन विकल्प उपलब्ध हैं।

आप अपनी module/buildनिर्देशिका में उत्पन्न APK पा सकते हैं जिसमें उसमें बिल्ड प्रकार का नाम है।


4
यदि आप अपने build.gradle में बिल्ड कॉन्फ़िगरेशन है, तो यह केवल एक हस्ताक्षरित एपीके का निर्माण करेगा। यदि आप इसे स्रोत कोड प्रबंधन टूल में संग्रहीत करते हैं या इसे अन्य लोगों के साथ साझा करते हैं, तो आपको अपने स्रोत कोड से अपनी साइनिंग कुंजी के क्रेडेंशियल्स को अलग करने के बारे में सोचना चाहिए।
Janusz

बिल्ड> जेनरेट किए गए एपीके को एपीके ... इसके जैसा ही सरल
अतुल

61

किसी भी फ़ाइल को संपादित किए बिना कमांड लाइन से किसी भी मौजूदा एंड्रॉइड स्टूडियो ग्रेडल प्रोजेक्ट को लेना और बनाना / साइन करना संभव है। यह आपकी कुंजी और पासवर्ड को अलग रखते हुए संस्करण नियंत्रण में अपनी परियोजना को संग्रहीत करने के लिए बहुत अच्छा बनाता है:

./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD

1
चूँकि हमें स्रोत कोड को साथी को पास करने की आवश्यकता है, इसलिए यह हमारे किस्टोर सामान को गुप्त रखने का सबसे अच्छा तरीका है। धन्यवाद।
युंग

2
वैसे भी इन android.injected.signing को जानने के लिए। * गुण अस्तित्व?
टिक्सेन

मुझे यह जानकारी एंड्रॉइड स्टूडियो टीम से Xav से मिली, और मुझे नहीं पता कि क्या इस तरह के अन्य चर हैं।
वेन पाइकर्स्की

मुझे java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException मिल रही है: स्टोर से कुंजी XXXXXX पढ़ने में विफल "C: \ Users \ somedirectory \ Desktop's someKey.jks": alias 'XXXXXX' के साथ कोई कुंजी नहीं कीस्टोर C: \ Users \ somedirectory \ Desktop \ someKey.jks में पाया गया। ऐसा क्यों है?
आर्ची जी Quiñones

39

आप इस कोड का उपयोग कर सकते हैं

android {
   ...
    signingConfigs {
        release {
            storeFile file("../your_key_store_file.jks")
            storePassword "some_password"
            keyAlias "alias_name"
            keyPassword "key_password"
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
        }
    }
   ...
}

फिर अपने टर्मिनल रन से

./gradlew assembleRelease

आपको एपीके मिलेगा

अपने-android-app / निर्माण / आउटपुट / apk / अपने-android-app-release.apk


@ozcanovunc कृपया अपने किस्टोर पथ की जाँच करें फिर से गलत हो सकता है।
भावेश कैला

ऐसा करते समय, संभावना है कि आपके build.gradleसंस्करण नियंत्रण में जाँच की जाती है, और इसलिए आपके पासवर्ड हैं! जब आपकी परियोजना में सुरक्षा महत्वपूर्ण हो तो एक और मार्ग अपनाने पर विचार करें।
मार्को। .५

1
ग्रेडेल असेंबली काम नहीं कर रहा है। Gradlew assembleRelease के बजाय उपयोग करें
Sathish


-3

बिल्ड मेनू> हस्ताक्षरित एपीके उत्पन्न करें


यदि आप इसे चलाते हैं, तो यह बताता है कि ऐसा करने का तरीका नहीं है। इसके अलावा अगर मैं उस .apk फ़ाइल को अपलोड करता हूं, तो यह कहते हुए एक त्रुटि होती है कि त्रुटि का पता लगाता है या कुछ और है।
गोय

11
यह कहता है कि डिबगिंग चालू है ... एंड्रॉइड स्टूडियो में, बाईं ओर, एक टैब होना चाहिए जो कहता है कि 'बिल्ड वेरिएंट' ... इस पर क्लिक करें और सब कुछ 'डीबग' से 'रिलीज़' तक स्विच करें ... उसके बाद , जेनरेट किया गया फिर से
एपीके

2
यह अब काम नहीं करता है! उदाहरण के लिए एपीके यह बनाता है BuildConfig.DEBUG सच करने के लिए सेट है। इससे मुझे कोई परेशानी नहीं हुई, अब आपको gradlew assembleRelease मेथड का उपयोग करना होगा।
बेन क्लेटन

@BenClayton आप बिल्कुल सही हैं! मैंने इसके कारण घंटों बर्बाद किया! एंड्रॉइड स्टूडियो में एक और बहुत कष्टप्रद "बग" - मुसीबतों के साथ कोई अंत नहीं ...
sjkm

मुझे आश्चर्य है कि यह सरल कदम साइन अप एपीके उत्पन्न करने के लिए सबसे उपयुक्त तरीका क्यों नहीं हो सकता क्योंकि इसमें स्पष्ट रूप से उल्लेख है। बिना किसी परेशानी के यह कदम मेरे लिए सही और सही काम करता है। लेकिन एसओ पर अन्य बहुत सारे जवाबों ने मुझे यह सोचने में भ्रमित कर दिया कि मैंने क्या सही तरीके से या क्या नहीं किया।
अतुल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.