2014-06-17 14 views
9

से लोड हस्ताक्षर करने config Gradle में Android के लिए इसे इस तरह का निर्माण जारी करने के लिए अपने हस्ताक्षर करने के config परिभाषित करने के लिए आम अभ्यास हो रहा है:एंड्रॉयड Gradle - बाहरी फ़ाइल

android { 
    signingConfigs { 
     debug { 
      storeFile file("debug.keystore") 
     } 

     myConfig { 
      storeFile file("other.keystore") 
      storePassword "android" 
      keyAlias "androiddebugkey" 
      keyPassword "android" 
     } 
    } 

    buildTypes { 
     foo { 
      debuggable true 
      jniDebugBuild true 
      signingConfig signingConfigs.myConfig 
     } 
    } 
} 

बात है, मैं अपने निर्माण रखना चाहते हैं। संस्करण नियंत्रण में फ़ाइल को रेडल करें और कुछ गिट सर्वर पर मेरे कीस्टोर के लिए पासवर्ड रखने की अच्छी भावना नहीं है (जो कि मैं अन्य सामानों के लिए उपयोग करता हूं, बेवकूफ, मुझे पता है)।

क्या मेरे हार्ड ड्राइव पर किसी बाहरी फ़ाइल से हस्ताक्षर कॉन्फ़िग लोड करने का कोई तरीका है?

+0

पिछली बार मैंने जाँच की, यह संभव नहीं था , जिसने मेरे लिए कई परियोजनाओं के लिए अनुपयोगी बना दिया। मुझे आशा है कि उन्होंने आखिरकार इस सुविधा को लागू किया है ... – tknell

उत्तर

21

मैं कुछ इस तरह का उपयोग करें।

मेरे पास मेरे ऐप रूट फ़ोल्डर में signing.properties है।

STORE_FILE=xxxx 
STORE_PASSWORD=xxx 
KEY_ALIAS=xxx 
KEY_PASSWORD=xxx 

इस फ़ाइल संस्करण नियंत्रण में नहीं है। बेशक आप फ़ोल्डर बदल सकते हैं।

फिर अपनी build.gradle आप कुछ इस तरह का उपयोग कर सकते हैं: आप फ़ोल्डर को बदलते हैं

android { 

     signingConfigs { 
      release 
     } 

     buildTypes { 
       release { 
        signingConfig signingConfigs.release 
       }  
     } 
    } 

    def Properties props = new Properties() 
    def propFile = file('../signing.properties') 
    if (propFile.canRead()){ 
     props.load(new FileInputStream(propFile)) 

     if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') && 
       props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) { 

      android.signingConfigs.release.storeFile = file(props['STORE_FILE']) 
      android.signingConfigs.release.storePassword = props['STORE_PASSWORD'] 
      android.signingConfigs.release.keyAlias = props['KEY_ALIAS'] 
      android.signingConfigs.release.keyPassword = props['KEY_PASSWORD'] 
     } else { 
      android.buildTypes.release.signingConfig = null 
     } 
    }else { 
     android.buildTypes.release.signingConfig = null 
    } 

, तो आप इस लाइन बदलने के लिए:

def propFile = file('../signing.properties') 
+0

मैं वही कोशिश कर रहा हूं, लेकिन पथ को कड़ी कोडिंग करने के बजाय मैं 'local.properties' से पथ ले रहा हूं, यह फ़ाइल को पढ़ सकता है लेकिन 'त्रुटि: (33, 0 दिखा रहा है)) लाइन 'property.load (नई फ़ाइल इनपुटस्ट्रीम (प्रोफाइल)) में विकृत \ uxxxx एन्कोडिंग। '' मैंने भी पथ को कोड किया और कोशिश की लेकिन इसका कोई उपयोग नहीं किया। कोई मदद? –

1

आप उन में एक अलग हस्ताक्षर करने फाइल करने के लिए अपने संवेदनशील जानकारी ले जाएँ और Gradle लोड कर सकते हैं।

Here's a good article on how to do it

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