2012-01-26 7 views
39

ant debug के साथ डीबग .apk (<project-name>-debug.apk) बनाते समय स्वयं निर्मित डीबग कीस्टोर का स्थान निर्दिष्ट करना संभव है? मैं केवल रिलीज कीस्टोर के स्थान को निर्दिष्ट करने की संभावना को देखता हूं।एंड्रॉइड चींटी डीबग बिल्ड के लिए डीबग कीस्टोर के स्थान को मैं कैसे निर्दिष्ट कर सकता हूं?

मैं'android 'निर्देशिका में रखे गए एक को कॉपी किए बिना कई पीसी पर डीबग कीस्टोर साझा करना चाहता हूं। डीबग कीस्टोर उदाहरण के लिए स्रोत कोड भंडार के भीतर रह सकता है। लेकिन मुझे डीबग कीस्टोर को खोजने के लिए चींटी को बताने का एक तरीका चाहिए।

+0

क्यों न सिर्फ इसे कॉपी करें? – onit

+2

क्योंकि मैं उन फ़ाइलों को संस्करण नियंत्रण – Huupke

उत्तर

4

आप अंतिम apk के हस्ताक्षर निकालकर उसे दोबारा प्रवेश कर सकते हैं। यह सिर्फ एक डीबग बिल्ड है इसलिए ज़िपलाइन को टाला जा सकता है (कम से कम मुझे मेरे निर्माण में कोई समस्या नहीं है)।

अपने build.xml में निम्नलिखित

<target name="-post-build" if="${build.is.packaging.debug}"> 
    <!-- Remove the signature of the debug build, and sign it again with our own debug keystore --> 
    <delete dir="tmp" includeemptydirs="true" failonerror="false" /> 
    <mkdir dir="tmp" /> 
    <unzip src="${out.final.file}" dest="tmp" /> 
    <delete dir="tmp/META-INF" includeemptydirs="true" verbose="true" failonerror="true" /> 
    <delete file="${out.final.file}" failonerror="true" /> 
    <zip destfile="${out.final.file}" basedir="tmp" /> 
    <delete dir="tmp" includeemptydirs="true" failonerror="false" /> 

    <echo level="info">Signing final DEBUG apk with a common signature... 
     signapk 
      input="${out.final.file}" 
      output="${out.packaged.file}" 
      keystore="${debug.key.store}" 
      storepass="${debug.key.store.password}" 
      alias="${debug.key.alias}" 
      keypass="${debug.key.alias.password}" 
    </echo> 

    <signapk 
     input="${out.final.file}" 
     output="${out.packaged.file}" 
     keystore="${debug.key.store}" 
     storepass="${debug.key.store.password}" 
     alias="${debug.key.alias}" 
     keypass="${debug.key.alias.password}"/> 

    <delete file="${out.final.file}" failonerror="true" /> 
    <move file="${out.packaged.file}" tofile="${out.final.file}" failonerror="true" /> 

</target> 
+0

केवल यह दृष्टिकोण काम करते हैं। धन्यवाद! –

+0

वास्तव में बहुत अच्छा काम किया। – Richa

19

आप कुंजीस्टोर इन गुणों

key.store=/path/to/key.keystore 
key.alias=alias 
key.store.password=pass 
key.alias.password=pass 

साथ उपयोग करने के लिए बस चींटी करने के गुण पारित निर्दिष्ट करने के लिए सक्षम होना चाहिए।

[संपादित करें] डॉक्स से http://developer.android.com/guide/publishing/app-signing.html#setup

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

  • KeyStore नाम:: "debug.keystore"
  • KeyStore पासवर्ड: "Android"
  • कुंजी उर्फ: "androiddebugkey

    एसडीके उपकरण पूर्व निर्धारित नाम/पासवर्ड के साथ डिबग कुंजीस्टोर/कुंजी बनाने "

  • कुंजी पासवर्ड:" Android "
  • सीएन:" सीएन = Android डीबग, हे = एंड्रॉयड, सी = अमेरिका "

यदि आवश्यक हो, तो आप डीबग कीस्टोर/कुंजी का स्थान/नाम बदल सकते हैं या का उपयोग करने के लिए कस्टम डीबग कीस्टोर/कुंजी की आपूर्ति कर सकते हैं। हालांकि, किसी भी कस्टम डीबग कीस्टोर/कुंजी को उसी कुंजीस्टोर/कुंजी नाम और पासवर्ड का उपयोग डिफ़ॉल्ट डीबग कुंजी (ऊपर वर्णित अनुसार) के रूप में करना चाहिए। (एक्लिप्स/एडीटी में ऐसा करने के लिए, विंडोज> वरीयताएँ> एंड्रॉइड> बिल्ड पर जाएं।)

+2

में जोड़ना चाहता हूं ऐसा लगता है कि यह डीबग के लिए काम नहीं करता है बल्कि केवल रिलीज़ के लिए काम करता है। क्या आप वाकई डीबग एपीके पर हस्ताक्षर करने के लिए काम करते हैं? – Huupke

+0

डिफ़ॉल्ट स्थान पर कीस्टोर को ओवरराइट करना संभवतः संभव है। प्लेटफॉर्म या रिलीज कुंजियों के लिए उपरोक्त गुणों द्वारा स्थान निर्दिष्ट करना संभव है। – Huupke

+3

ग्रहण प्राथमिकताओं का उपयोग नहीं किया जाता है जब चींटी का उपयोग करके कमांड लाइन पर निर्माण होता है जो मेरा प्रश्न था। key.store डीबग के लिए निर्माण करते समय छोड़ा जाता है। – Huupke

11

जहां तक ​​मैं कह सकता हूं, ऐसा करने के लिए आपको "-do-debug" लक्ष्य को ओवरराइड करने की आवश्यकता है। मैं जानना चाहता हूं कि क्या एक और अधिक सुरुचिपूर्ण तरीका है। मैं अपने build.xml को यह जोड़ा

<property name="build.is.signing.debug" value="false"/> 
<target name="-do-debug" depends="-set-debug-mode, -debug-obfuscation-check, -package, -post-package"> 
    <!-- only create apk if *not* a library project --> 
    <do-only-if-not-library elseText="Library project: do not create apk..." > 
     <sequential> 
      <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" /> 

      <!-- Signs the APK --> 
      <echo>Signing final apk...</echo> 
      <signjar 
        jar="${out.packaged.file}" 
        signedjar="${out.unaligned.file}" 
        keystore="${key.store}" 
        storepass="${key.store.password}" 
        alias="${key.alias}" 
        keypass="${key.alias.password}" 
        verbose="${verbose}" /> 

      <!-- Zip aligns the APK --> 
      <zipalign-helper 
        in.package="${out.unaligned.file}" 
        out.package="${out.final.file}" /> 
      <echo>Debug Package: ${out.final.file}</echo> 
     </sequential> 
    </do-only-if-not-library> 
    <record-build-info /> 
</target> 
<import file="${sdk.dir}/tools/ant/build.xml" /> 
+0

मुझे यकीन नहीं है क्या गलत हो रहा है, लेकिन इस विधि का उपयोग करते हुए चींटी चलाते समय मुझे एक चेतावनी मिल रही है: "नो-टीएसए या -सासर्ट प्रदान किया गया है और यह जार टाइमस्टैम्प नहीं है।" परिणामस्वरूप एपीके स्थापित करने का प्रयास करते समय, मुझे "विफलता [INSTALL_PARSE_FAILED_NO_CERTIFICATES]" मिलती है। हालांकि ग्रहण के माध्यम से निर्यात करना प्रतीत होता है। कोई विचार? –

+0

एंट चलाने के बाद एपीके पर 'jarsigner' चलाना वास्तव में सुरक्षा अपवाद देता है, इसलिए ऐसा लगता है कि यह सही ढंग से हस्ताक्षरित नहीं होता है। –

+0

ऐसा प्रतीत होता है कि 'build.is.signing.debug' प्रॉपर्टी इस विधि के साथ संघर्ष करती है, क्योंकि' apkbuilder' पहले से ही आपकी होम निर्देशिका में डीबग कीस्टोर का उपयोग करके इसे इंगित करता है। मैंने '-setup' लक्ष्य को ओवरराइड करके और संपत्ति को गलत पर सेट करके इसे हल करने में कामयाब रहे। –

4
  • अपने ग्रहण कार्यक्षेत्र के भीतर एक नया और खाली फ़ोल्डर बनाएँ।

  • उस मानक निर्देशिका से फ़ाइल "debug.keystore" को कॉपी करें (उदा। "C: /Users/YourAcount/.Android/" विंडोज़ पर) उस नई निर्देशिका में। > विंडो - -> वरीयताएँ -> Android -> बिल्ड -

  • कॉन्फ़िगर ग्रहण सभी डीबग APK की (ग्रहण के लिए है कि नई निर्देशिका/फ़ाइल का उपयोग करने के लिए।> कस्टम डीबग KeyStore "

+1

शीर्षक स्पष्ट रूप से बताता है "एंड्रॉइड * कमांडलाइन/चींटी बिल्ड *" –

+0

क्षमा करें, मेरी गलती के लिए डीबग कीस्टोर का स्थान निर्दिष्ट करें। –

+0

यदि यह गलत है तो आपको अपना उत्तर हटाने में सक्षम होना चाहिए। – Flow

0

जहां तक ​​मैंने देखा है अब तक कोई मौजूदा समाधान नवीनतम चींटी संस्करण के साथ काम नहीं करता है।

डिफ़ॉल्ट डीबग.किस्टोर को डिफ़ॉल्ट फ़ोल्डर में बदलने का एकमात्र प्राचीन तरीका है।

डिफ़ॉल्ट स्थान .android फ़ोल्डर है। आम तौर पर सी: \ उपयोगकर्ता \ USER_NAME.android विंडोज़ पर आप% USERPROFILE% .android का उपयोग करके इसे प्राप्त कर सकते हैं।

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

मुझे बताएं कि आपको यहां अधिक जानकारी चाहिए या नहीं।

4

एक आसान तरीका जिसे आप काम के आसपास के रूप में उपयोग कर सकते हैं (जो हमारे सीआई सिस्टम में विशेष रूप से अच्छा है जहां कई परियोजनाएं बनाई गई हैं और जहां कीस्टोरों से निपटने के दौरान मुलायम स्पर्श की आवश्यकता होती है), आगे बढ़ना और डीबग चलाने के लिए है निर्माण, मेटा-आईएनएफ फ़ोल्डर की सामग्री को हटाने के लिए एएपीटी का उपयोग करें, और अपने कस्टम debug.keystore के साथ साइन इन करने के लिए jarsigner चलाएं।

छद्म स्क्रिप्ट में, ऐसा लगता है कि: # सामान्य चींटी डीबग बिल्ड चींटी डिबग

# Remove default debug signing 
aapt remove YourDebugApp.apk META-INF/MANIFEST.MF 
aapt remove YourDebugApp.apk META-INF/CERT.SF 
aapt remove YourDebugApp.apk META-INF/CERT.RSA 

# Use Jarsigner and the custom debug.keystore. 
# NOTE: This assumes you explicitly called out MD5withRSA as your signing algorithm 
# when you generated the key; drop the -sigalg tag if you did not. 
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -storepass android YourDebugApp.apk 

# Verify signing 
jarsigner -verify YourDebugApp.apk 
0

मैंने पाया परियोजना में एक फ़ाइल debug.keystore को अपना कुंजी कॉपी करें और ant.properties

debug.key.store.password=android 
debug.key.alias.password=android 
debug.key.store=../debug.keystore 
debug.key.alias=androiddebugkey 

और जोड़ने में निम्नलिखित जोड़ें एक और समाधान ..

में निम्नलिखित $ {PROJECT_HOME} /custom_rules.xml

जोड़े
संबंधित मुद्दे