2011-03-17 18 views
24

मेरे पास एक फ़ोल्डर में दस एंड्रॉइड प्रोजेक्ट हैं। प्रत्येक प्रोजेक्ट के लिए, मैं इसे बनाने के लिए ant debug का उपयोग कर सकता हूं। इसलिए इन सभी परियोजनाओं को संकलित करने के लिए एक साधारण लिपि लिखना कोई समस्या नहीं है। मैं इन परियोजनाओं को दैनिक बनाने के लिए हडसन का उपयोग करता हूं, और यह ठीक काम करता है।एंड्रॉइड रिलीज के लिए स्वचालन

लेकिन अब हमारी परियोजना को रिलीज चरण में जाना होगा। तो संकलन कमांड ant release बन जाता है। एक रिलीज प्रोजेक्ट को संकलित करने के लिए, मुझे हर बार संकलन के दौरान प्रमाणपत्र के लिए पासवर्ड दर्ज करना होगा। तो मैं रिलीज के लिए स्वचालन नहीं कर सकता।

यह संकलन नौकरी मुझे मारता है क्योंकि मेरे पास दस परियोजनाएं हैं जिन्हें सभी को पासवर्ड इनपुट करने के साथ बातचीत करने की आवश्यकता है।

मैं रिलीज बिल्ड को अभी भी स्वचालित कैसे बना सकता हूं?

+0

यहां एक ट्यूटोरियल है जो पासवर्ड इनपुट स्वचालित करता है: http://helpmeco.de/2012/2/compiling-and-igning-android-release-apk-from-the-command-line। – browep

उत्तर

31

मान लें कि आप हालिया एंड्रॉइड टूल्स का उपयोग कर रहे हैं, v9 या v10 कहें।

आप एंड्रॉयड एसडीके निर्देशिका में tools/ant/main_rules.xml को देखें, तो:

<!-- called through target 'release'. Only executed if the keystore and 
    key alias are known but not their password. --> 
<target name="-release-prompt-for-password" if="has.keystore" unless="has.password"> 
    <!-- Gets passwords --> 
    <input 
      message="Please enter keystore password (store:${key.store}):" 
      addproperty="key.store.password" /> 
    <input 
      message="Please enter password for alias '${key.alias}':" 
      addproperty="key.alias.password" /> 
</target> 

<!-- called through target 'release'. Only executed if there's no 
    keystore/key alias set --> 
<target name="-release-nosign" unless="has.keystore"> 
    <echo>No key.store and key.alias properties found in build.properties.</echo> 
    <echo>Please sign ${out.unsigned.file} manually</echo> 
    <echo>and run zipalign from the Android SDK tools.</echo> 
</target> 

has.keystore के लिए एक्सएमएल फ़ाइल सर्च कर रहे हैं का पता चलता है:

<!-- properties for signing in release mode --> 
<condition property="has.keystore"> 
    <and> 
     <isset property="key.store" /> 
     <length string="${key.store}" when="greater" length="0" /> 
     <isset property="key.alias" /> 
    </and> 
</condition> 
<condition property="has.password"> 
    <and> 
     <isset property="has.keystore" /> 
     <isset property="key.store.password" /> 
     <isset property="key.alias.password" /> 
    </and> 
</condition> 

तो मुझे लगता है जिसे आप करने के लिए चार परिभाषित करता है में पारित करने के लिए है build.xml: key.store, key.alias, key.store.password, key.alias.password

और सुरक्षा कारणों से कमांड लाइन पर परिभाषित नहीं करना याद रखें। :)

1

बस एक नोट ... मैं पासवर्ड को प्रोप फ़ाइल में सेट नहीं करना चाहता था और डिफ़ॉल्ट रूप से आपका पासवर्ड कमांड लाइन पर प्रतिबिंबित किया जाएगा जो चिंता भी है। आपके लिए SecureInputHandler का उपयोग जोड़ना main_rules.xml काम करता है ताकि आपका पासवर्ड कमांड लाइन पर प्रकट न हो।

<target name="-release-prompt-for-password" if="has.keystore" unless="has.password"> 
    <!-- Gets passwords --> 
    <input 
      message="Please enter keystore password (store:${key.store}):" 
      addproperty="key.store.password" > 
     <handler classname="org.apache.tools.ant.input.SecureInputHandler" /> 
    </input> 
    <input 
      message="Please enter password for alias '${key.alias}':" 
      addproperty="key.alias.password" > 
     <handler classname="org.apache.tools.ant.input.SecureInputHandler" /> 
    </input> 
</target> 
1

विशेष रूप से जहां यह key.store.password उल्लेख शुरू होता है, this लेख पर एक नजर है। मैंने बिना किसी परेशानी के इसका इस्तेमाल किया है।

असल में आपको अपनी (बिल्ड) मशीन पर स्थानीय secure.properties फ़ाइल स्थानीय बनाना चाहिए, जिसे अपेक्षाकृत सुरक्षित रखा जाना चाहिए, उदा। सभी के लिए सुलभ नहीं है या स्रोत नियंत्रण में सभी के लिए संग्रहीत नहीं है। वह फ़ाइल पासवर्ड को सही नामों वाले गुणों के रूप में संग्रहीत करती है, और इसे प्रोजेक्ट एएनटी बिल्ड फ़ाइल में आयात किया जाता है।

8

आप अपने प्रोजेक्ट फ़ोल्डर में अपनी प्रोजेक्ट.प्रोपर्टीज में अपने कीस्टोर कॉन्फ़िगरेशन को परिभाषित कर सकते हैं। बस इस

key.store =/पथ की तरह// अपने/कुंजीस्टोर

key.alias = yourkeyalias

key.store.password = yourkeystorepassword

key.alias करने के लिए।पासवर्ड = yourkeyaliaspassword

+0

क्या मैं आपको अपने उत्तर के बारे में कुछ पूछ सकता हूं, यह मेरे लिए केवल तभी काम करता है जब मेरे पास पहले कुंजी हो। लेकिन मैं इसे स्वचालित रूप से कैसे उत्पन्न कर सकता हूं। – Reham

+0

आप एक कीस्टोर उत्पन्न करने के लिए '$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000' उपयोगकर्ता को उपयोगकर्ता का उपयोग कर सकते हैं। विवरण [यहां] है (http://developer.android.com/tools/publishing/app-signing.html) – lishali

22

Gradle आधारित बनाता

1) एक secure.properties फ़ाइल बनाएँ अपने पासवर्ड को रोकने के लिए:

key.store.password=<your keystore password> 
key.alias.password=<your alias password> 

आप शायद नहीं यह संस्करण नियंत्रण में करना चाहते हैं, यही कारण है कि हम पासवर्ड को अलग *.properties फ़ाइल में डाल रहे हैं। यदि आपको अपने पासवर्ड को वर्जन कंट्रोल के तहत रखने में कोई फर्क नहीं पड़ता है, तो आप अपने पासवर्ड सीधे build.gradle में दर्ज कर सकते हैं, लेकिन इसकी अनुशंसा नहीं की जाती है, इसलिए मैं इसे सीधे दिखा नहीं रहा हूं।

2) सेट करें अपने build.gradle इस प्रकार है:

Properties secureProperties = new Properties() 
secureProperties.load(new FileInputStream("secure.properties")) 

android { 
    signingConfigs { 
     release { 
      storeFile file("<path to your keystore>") 
      storePassword secureProperties['key.store.password'] 
      keyAlias "<alias name>" 
      keyPassword secureProperties['key.alias.password'] 
     } 
    } 

    buildTypes { 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 
} 

और बस हो गया। ./gradlew assembleRelease अब मेरे पासवर्ड के लिए संकेत दिए बिना मेरे एपीके बनाता है और संकेत करता है।

चींटी आधारित बनाता

1) एक secure.properties फ़ाइल बनाएँ अपने पासवर्ड को रोकने के लिए:

key.store.password=<your keystore password> 
key.alias.password=<your alias password> 

आप शायद नहीं है यह संस्करण नियंत्रण में चाहते हैं, जिसके कारण हम पासवर्ड को मौजूदा *.properties फ़ाइलों में से किसी एक में नहीं डाल रहे हैं। यदि आपको अपने पासवर्ड को वर्जन कंट्रोल के तहत रखने में कोई फर्क नहीं पड़ता है, तो इन दो लाइनों को ant.properties में रखें और आप कर चुके हैं।

2) एक custom_rules.xml फ़ाइल अपने secure.properties फाइल के बारे में निर्माण प्रणाली बताने के लिए बनाएँ।

<?xml version="1.0" encoding="UTF-8"?> 
<project name="custom_rules" default="help"> 
    <property file="secure.properties" /> 
</project> 

मैं इस बिल्ड प्रणाली से परिचित नहीं हूँ, इसलिए मैं project तत्व के name या default गुणों के बारे में यकीन नहीं है, लेकिन मेरा मानना ​​है कि मैं क्या हर किसी के लिए काम करना चाहिए चुना है।

2b) एंड्रॉयड एसडीके उपकरण के किसी भी हाल के संस्करण जाना अच्छा होना चाहिए, लेकिन अगर किसी कारण से आपका build.xml फ़ाइल में निम्न शामिल नहीं है, तो आप इसे जोड़ना चाहिए:

<import file="custom_rules.xml" optional="true" /> 

और यह होना चाहिए। ant release अब मेरे पासवर्ड के लिए संकेत दिए बिना मेरे एपीके बनाता है और संकेत करता है।

+0

आप custom_rules.xml कहां बनाते हैं? क्या यह ऐसा कुछ है जो आपके संस्करण नियंत्रण में चेक किया गया है? – brianestey

+1

@brianestey 'custom_rules.xml' 'build.xml' के साथ, परियोजना रूट में है। मैं इसे संस्करण नियंत्रण में देखता हूं। –

+0

त्वरित उत्तर के लिए धन्यवाद! मुझे यह काम मिल गया। =) 'सुरक्षित.प्रोपर्टीज' फ़ाइल के लिए – brianestey

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