বিল্ডড্র্যাডলে কীস্টোরের তথ্য না রেখে APK সাইন করুন


152

আমি সেটআপ স্বাক্ষরের প্রক্রিয়া করার চেষ্টা করছি যাতে কীস্টোর পাসওয়ার্ড এবং কী পাসওয়ার্ড নেই প্রকল্পের মধ্যে সংরক্ষিত build.gradleফাইল।

বর্তমানে আমার মধ্যে নিম্নলিখিতগুলি রয়েছে build.gradle:

android {
    ...
    signingConfigs {
        release {
            storeFile file("my.keystore")
            storePassword "store_password"
            keyAlias "my_key_alias"
            keyPassword "key_password"
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release            
        }
    }
}

এটা তোলে পুরোপুরি কাজ করে জরিমানা কিন্তু আমি না মান করা storePassword, এবং keyPasswordআমার সংগ্রহস্থলের মধ্যে। আমি লাগাতে পছন্দ করেন storeFileএবং keyAliasসেখানে পারেন।

কী এমন কোনও পরিবর্তন করার উপায় আছে build.gradleযাতে এটি কোনও বাহ্যিক উত্স থেকে পাসওয়ার্ড গ্রহণ করবে (কেবলমাত্র আমার কম্পিউটারে থাকা ফাইলের মতো)?

এবং অবশ্যই, পরিবর্তিত build.gradleঅন্য কোনও কম্পিউটারে ব্যবহারযোগ্য হবে (এমনকি কম্পিউটারে পাসওয়ার্ড অ্যাক্সেস না থাকলেও)।

আমি যদি অ্যান্ড্রয়েড স্টুডিও এবং ম্যাক ওএস এক্স ম্যাভারিক্সে ব্যবহার করি তবে তাতে যদি কিছু আসে যায় না।


"এবং অবশ্যই, পরিবর্তিত build.gradle অন্য কোনও কম্পিউটারে ব্যবহারযোগ্য হওয়া উচিত (কম্পিউটারের পাসওয়ার্ডগুলিতে অ্যাক্সেস না থাকলেও)" - ডেটা না থাকলে build.gradleআপনার কাছে অন্য কিছু থাকতে হবে build.gradle, কিনা এটি পরিবেশের ভেরিয়েবলগুলির প্রতি সমন্বয় (প্রতিটি উত্তর প্রতি), একটি সম্পত্তি ফাইল (অন্য উত্তরে প্রতি) বা অন্য কোনও উপায়ে। যদি আপনি বাইরে জিনিস রাখতে ইচ্ছুক না হন build.gradleতবে সংজ্ঞা অনুসারে সমস্ত স্বাক্ষরকারী তথ্য ভিতরে থাকা উচিত buid.gradle
কমন্সওয়্যার

2
@ কমন্সওয়্যার আপনি ঠিক বলেছেন যদিও আমি বিল্ড.gradle এর মধ্যে কঠোরভাবে কিছু রাখতে চাই তা বলিনি। এবং আমি বলেছিলাম যে বিল্ড.gradle কোনও বাহ্যিক উত্স থেকে পাসওয়ার্ডগুলি পেতে
বোব্রভস্কি


আমি সদৃশ হিসাবে পতাকাঙ্কিত থাকেন stackoverflow.com/questions/18328730/... ভিত্তিতে, meta.stackoverflow.com/questions/311044/...
user2768

উত্তর:


120

গ্রোভির দুর্দান্ত জিনিসটি হ'ল আপনি নিখরচায় জাভা কোডটি মিশ্রিত করতে পারেন এবং কী / মান ফাইল ব্যবহার করে এটি পড়া খুব সহজ java.util.Properties। আইডোমেটিক গ্রোভি ব্যবহার করার আরও একটি সহজ উপায় সম্ভবত রয়েছে, তবে জাভা এখনও খুব সহজ।

একটি keystore.propertiesফাইল তৈরি করুন (উদাহরণস্বরূপ, আপনার প্রকল্পের পাশের ডিরেক্টরি ডিরেক্টরিতে settings.gradle, যদিও আপনি এটি যেখানে পছন্দ করতে পারেন:

storePassword=...
keyPassword=...
keyAlias=...
storeFile=...

এটি আপনার যুক্ত করুন build.gradle:

allprojects {
    afterEvaluate { project ->
        def propsFile = rootProject.file('keystore.properties')
        def configName = 'release'

        if (propsFile.exists() && android.signingConfigs.hasProperty(configName)) {
            def props = new Properties()
            props.load(new FileInputStream(propsFile))
            android.signingConfigs[configName].storeFile = file(props['storeFile'])
            android.signingConfigs[configName].storePassword = props['storePassword']
            android.signingConfigs[configName].keyAlias = props['keyAlias']
            android.signingConfigs[configName].keyPassword = props['keyPassword']
        }
    }
}

29
আমাকে আমার কীস্টোর থেকে উদ্ধৃতিগুলি সরিয়ে ফেলতে হয়েছিল rop ব্যক্তিগতভাবে
জ্যাকব তাবাক

6
এটি আমার জন্য প্লাগইন সংস্করণ 0.9 সহ স্বাক্ষরিত সংস্করণ তৈরি করে না + আমি কনফিগ আইটেম সাইনিংফনফিজ ব্লক এবং বিল্ডটাইপস.রেইল.সাইনিং কনফিগ আইটেমটি দিয়ে কী করব? এগুলো মুছে ফেলো?
ফার্নান্দো গাল্লেগো

1
দেখে মনে হচ্ছে যে স্টোরফাইলে কোনও বৈধ মান (উদাহরণস্বরূপ storeFile file('AndroidManifest.xml')) এ সেট করা থাকে এবং পরে এটির ওভাররাইডের ফলে সাইন ইন করার প্রক্রিয়া ঘটে।
चमत्कार 2k

5
বিল্ডিংয়ের ফলে এমন একটি ত্রুটি হয় Error:(24, 0) Could not find property 'android' on root project 'RootProjectName'যেখানে 24-লাইনটি যদি সেই-ব্লকটি থাকে। যোগ করা হচ্ছে apply plugin: 'com.android.application'রুট build.gradle করার সময় বিল্ড ব্যর্থ করতে দেয়। আমি কি ভুল করছি?
ফিলল্যাব

2
এটি 2018 সালে কাজ করে না This এটিকে অবচয় করা আবশ্যক? Could not get unknown property 'android' for root project
নিক্ষিপ্ত

106

বিকল্পভাবে, আপনি যদি স্কট বার্তার উত্তরটি কোনওভাবে স্বয়ংক্রিয়ভাবে উত্পন্ন গ্রেডেল কোডের সাথে একইভাবে প্রয়োগ করতে চান তবে আপনি keystore.propertiesআপনার প্রকল্পের মূল ফোল্ডারে একটি ফাইল তৈরি করতে পারেন :

storePassword=my.keystore
keyPassword=key_password
keyAlias=my_key_alias
storeFile=store_file  

এবং আপনার গ্রেড কোডটি এতে পরিবর্তন করুন:

// Load keystore
def keystorePropertiesFile = rootProject.file("keystore.properties");
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

...

android{

    ...

    signingConfigs {
        release {
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
        }
    }

    ...

}

আপনি এই বৈশিষ্ট্য ফাইলটি আপনার মডিউলটির মূলের মধ্যে সংরক্ষণ করতে পারেন, সেক্ষেত্রে কেবল বাদ দেওয়া যায় rootProjectএবং আপনি বিভিন্ন কীস্টোর এবং কী উপাধিকারের জন্য কয়েকটি সেট বৈশিষ্ট্য রাখতে এই কোডটিও সংশোধন করতে পারেন।


7
দুর্দান্ত কাজ করে। আমি if ( keystorePropertiesFile.exists() )বৈশিষ্ট্যগুলি পাওয়ার চেষ্টা করার আগে এবং সাইন করার চেষ্টা করার আগে ফাইলটি উপস্থিত রয়েছে তা নিশ্চিত করেছিলাম ।
জোশুয়া পিন্টার

এবং ফাইলের .txtশেষে এক্সটেনশন যুক্ত করতে ভুলবেন না keystore.properties
লেভন পেট্রোসায়ান

11
.txtআপনার keystore.propertiesফাইলটিতে একটি এক্সটেনশন প্রয়োজন হবে না ।
ম্যাট জুকোভস্কি

2
দেখে মনে হচ্ছে এই তথ্যটি এখানে যুক্ত করা হয়েছিল - developer.android.com/studio/publish/…
ভাদিম কোতোভ

36

সবচেয়ে সহজ উপায় একটি ~/.gradle/gradle.propertiesফাইল তৈরি করা ।

ANDROID_STORE_PASSWORD=hunter2
ANDROID_KEY_PASSWORD=hunter2

তারপরে আপনার build.gradleফাইলটি এর মতো দেখতে পাওয়া যাবে:

android {
    signingConfigs {
        release {
            storeFile file('yourfile.keystore')
            storePassword ANDROID_STORE_PASSWORD
            keyAlias 'youralias'
            keyPassword ANDROID_KEY_PASSWORD
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

1
আমি কি it / .গ্রাডেল / গ্রেডেল.প্রপ্রেটিস গিটিগনোর করব?
vzhen

সম্পূর্ণ নির্দেশাবলী দেশীয় ডকুমেন্ট প্রতিক্রিয়া হয়।
পেনসিলচেক

23

কয়েকটি লিঙ্ক পড়ার পরে:

http://blog.macroates.com/2006/keychain-access-from-shell/ http://www.thoughtworks.com/es/insights/blog/signing-open-source-android-apps-without-disclosing- পাসওয়ার্ড

যেহেতু আপনি ম্যাক ওএসএক্স ব্যবহার করছেন, আপনি আপনার পাসওয়ার্ডগুলি সংরক্ষণ করতে কীচেইন অ্যাক্সেস ব্যবহার করতে পারেন।

কীচেইন অ্যাক্সেসে পাসওয়ার্ড কীভাবে যুক্ত করবেন

তারপরে আপনার গ্রেড স্ক্রিপ্টগুলিতে:

/* Get password from Mac OSX Keychain */
def getPassword(String currentUser, String keyChain) {
    def stdout = new ByteArrayOutputStream()
    def stderr = new ByteArrayOutputStream()
    exec {
        commandLine 'security', '-q', 'find-generic-password', '-a', currentUser, '-gl', keyChain
        standardOutput = stdout
        errorOutput = stderr
        ignoreExitValue true
    }
    //noinspection GroovyAssignabilityCheck
    (stderr.toString().trim() =~ /password: '(.*)'/)[0][1]
}

এটি ব্যবহার করুন:

গেটপ্যাসওয়ার্ড (বর্তমান ব্যবহারকারী, "অ্যান্ড্রয়েড_স্টোর_পরিচয়")

/* Plugins */
apply plugin: 'com.android.application'

/* Variables */
ext.currentUser = System.getenv("USER")
ext.userHome = System.getProperty("user.home")
ext.keystorePath = 'KEY_STORE_PATH'

/* Signing Configs */
android {  
    signingConfigs {
        release {
            storeFile file(userHome + keystorePath + project.name)
            storePassword getPassword(currentUser, "ANDROID_STORE_PASSWORD")
            keyAlias 'jaredburrows'
            keyPassword getPassword(currentUser, "ANDROID_KEY_PASSWORD")
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

2
যদিও আপনার উত্তরটি কেবল ম্যাক ওএসএক্সের ক্ষেত্রে প্রযোজ্য, আমি সত্যিই এটি পছন্দ করি! মনে রাখবেন যে আপনার সরবরাহিত দ্বিতীয় লিঙ্কটিতে অন্য প্ল্যাটফর্মগুলির জন্য একটি ব্যাকআপ সমাধান রয়েছে, যদি কারও ক্ষেত্রে মাল্টি-প্ল্যাটফর্ম সমর্থন বাস্তবায়নের প্রয়োজন হয়।
ডেলব্ল্যাঙ্কো

আপনি কি দয়া করে লিনাক্স এবং উইন্ডোগুলির জন্য একই সমাধান সরবরাহ করতে পারেন? ধন্যবাদ।
জে মুনগারা

18

এইভাবেই আমি এটি করি। এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করুন

  signingConfigs {
    release {
        storeFile file(System.getenv("KEYSTORE"))
        storePassword System.getenv("KEYSTORE_PASSWORD")
        keyAlias System.getenv("KEY_ALIAS")
        keyPassword System.getenv("KEY_PASSWORD")
    }

3
দুর্ভাগ্যবশত, এই সিস্টেম পরিবেশের প্রয়োজন তা তৈরি করা প্রতিটি প্রকল্পের উপর প্রতিটি কম্পিউটারে । অন্যথায় আমি নিম্নলিখিত ত্রুটি পেয়েছিNeither path nor baseDir may be null or empty string. path='null'
বোব্রভস্কি

@ সাবরোভস্কি আমি জানি এই প্রশ্নের উত্তর দেওয়া হয়েছে তবে আপনি সিস্টেম এনভায়রনমেন্ট ভেরিয়েবল বা গ্রেড.প্রোপার্টি ফাইল ব্যবহার করতে পারেন। আপনি সম্ভবত গ্রেড.প্রোপার্টি ফাইলটি ব্যবহার করতে চাইছেন। আপনি এটি একাধিক প্রকল্পের জন্য ব্যবহার করতে পারেন।
জ্যারেড বুরোজ

3
আপনি কমান্ড-লাইন থেকে অ্যান্ড্রয়েড স্টুডিও না চালিয়ে দিলে এটি ম্যাকোএসএক্স-এ কাজ করে না।
হেনরিক ডি সুসা

আমি উপরের সাথে একমত। আমার একই কনফিগারেশন রয়েছে এবং আপনি এটি অ্যান্ড্রয়েড স্টুডিওতে সংকলন করতে পারবেন না। এটি কাজ করার জন্য আপনাকে কমান্ড লাইন থেকে চালানো দরকার। আমি আরও উন্নততর উপায় খুঁজছি, যাতে আমি অ্যান্ড্রয়েড স্টুডিওতে চালানোর সময় এই লাইনগুলিতে মন্তব্য করতে না পারি।
সৈয়ুজ ভালসান

@ বোবিরোস্কি: এটি কি উইন্ডোয় কাজ করে ?. আমাদের সিস্টেম পরিবেশে এই সমস্ত উল্লেখ করা উচিত?
DKV

12

যে কোনও বিদ্যমান অ্যান্ড্রয়েড স্টুডিও গ্রেডেল প্রকল্প নেওয়া এবং কোনও ফাইল সম্পাদনা না করে কমান্ড লাইন থেকে এটি তৈরি / সাইন ইন করা সম্ভব। এটি আপনার বিল্ডড্র্যাডল ফাইলটিতে নয় কীগুলি এবং পাসওয়ার্ডগুলি পৃথক রাখার সময় সংস্করণ নিয়ন্ত্রণে আপনার প্রকল্পটি সংরক্ষণ করার জন্য এটি খুব সুন্দর করে তোলে:

./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

9

গৃহীত উত্তরে প্রকল্পের একই মূল ফোল্ডারে থাকা এপিকে স্বাক্ষর করতে কোন কীস্টোরটি ব্যবহার করতে হবে তা নিয়ন্ত্রণ করতে একটি ফাইল ব্যবহার করুন। যখন আমরা ব্যবহার VCS মত গীত , একটি খারাপ জিনিস যখন আমরা বৈশিষ্ট্য তালিকা উপেক্ষা করার ফাইল যোগ করতে ভুলবেন হতে পারে। কারণ আমরা আমাদের পাসওয়ার্ডটি বিশ্বের কাছে প্রকাশ করব। সমস্যাগুলি এখনও অব্যাহত রয়েছে।

আমাদের প্রকল্পের মধ্যে একই ডিরেক্টরিতে সম্পত্তি ফাইল তৈরি করার পরিবর্তে আমাদের এটি বাইরে করা উচিত। গ্রেড.প্রোপার্টি ফাইল ব্যবহার করে আমরা এটির বাইরে করি।

পদক্ষেপ এখানে:

1. আপনার মূল প্রকল্পে গ্রেডেল.প্রপ্রেটিগুলি সম্পাদনা করুন বা তৈরি করুন এবং নীচের কোডটি যুক্ত করুন, আপনার নিজের সাথে পাথ সম্পাদনা করতে ভুলবেন না:

AndroidProject.signing=/your/path/androidproject.properties  

2. / আপনার / পথে / এ androidproject.properties তৈরি করুন এবং এতে নিম্নলিখিত কোড যুক্ত করুন, আপনার কীস্টোরের পথে /your/path/to/android.keystore পরিবর্তন করতে ভুলবেন না:

STORE_FILE=/your/path/to/android.keystore  
STORE_PASSWORD=yourstorepassword  
KEY_ALIAS=yourkeyalias  
KEY_PASSWORD=yourkeypassword  

৩. আপনার অ্যাপ্লিকেশন মডিউলে build.gradle (আপনার প্রকল্পের মূল বিল্ড.gradle নয়) নীচের কোডটি উপস্থিত না থাকলে বা এতে সামঞ্জস্য করুন:

signingConfigs {  
     release  
   }  
   buildTypes {  
   debug {  
     debuggable true  
   }  
   release {  
     minifyEnabled true  
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
     signingConfig signingConfigs.release  
   }  
 }  

4. পদক্ষেপ 3 এ কোডের নীচে নিম্নলিখিত কোডটি যুক্ত করুন:

if (project.hasProperty("AndroidProject.signing")  
     && new File(project.property("AndroidProject.signing").toString()).exists()) {  
     def Properties props = new Properties()  
     def propFile = new File(project.property("AndroidProject.signing").toString())  
     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 {  
         println 'androidproject.properties found but some entries are missing'  
         android.buildTypes.release.signingConfig = null  
      }  
     } else {  
            println 'androidproject.properties file not found'  
          android.buildTypes.release.signingConfig = null  
     }  
   }  

এই কোডটি পদক্ষেপ 1 থেকে গ্রেডল.প্রপ্রেটিসে অ্যান্ড্রয়েডপ্রজেক্ট.সাইনগিং প্রপার্টি অনুসন্ধান করবে । যদি সম্পত্তিটি পাওয়া যায় তবে এটি সম্পত্তি মানটিকে ফাইলের পাথ হিসাবে অনুবাদ করবে যা অ্যান্ড্রয়েডপ্রজেক্ট.প্রপ্রেটিগুলিকে নির্দেশ করে যা আমরা দ্বিতীয় ধাপে তৈরি করি । তারপরে এ থেকে সমস্ত সম্পত্তি মান আমাদের বিল্ডড্র্যাডলের জন্য স্বাক্ষরকরণ কনফিগারেশন হিসাবে ব্যবহৃত হবে।

এখন আমাদের কীস্টোর পাসওয়ার্ড প্রকাশের ঝুঁকি নিয়ে আবার চিন্তা করার দরকার নেই।

বিল্ডড্র্যাডলে কীস্টোরের তথ্য না রেখে অ্যান্ড্রয়েড অ্যাপকে স্বাক্ষর করতে আরও পড়ুন


এটি আমার পক্ষে ভাল কাজ করে। তারা কেন স্টোর ফাইল ফাইলটি ব্যবহার করছে তা জানতে (সিস্টেম.জটেনভ ("কেস্টোর"))
DKV

9

যারা তাদের শংসাপত্রগুলি একটি বাহ্যিক JSON ফাইলে রাখার সন্ধান করছেন তাদের জন্য এবং গ্রেড থেকে পড়তে হবে যে আমি এটি করেছি:

my_project / credentials.json:

{
    "android": {
        "storeFile": "/path/to/acuity.jks",
        "storePassword": "your_store_password",
        "keyAlias": "your_android_alias",
        "keyPassword": "your_key_password"
    }
}

my_project / অ্যান্ড্রয়েড / অ্যাপ্লিকেশন / build.gradle

// ...
signingConfigs {
        release {

            def credsFilePath = file("../../credentials.json").toString()
            def credsFile = new File(credsFilePath, "").getText('UTF-8')
            def json = new groovy.json.JsonSlurper().parseText(credsFile)
            storeFile file(json.android.storeFile)
            storePassword = json.android.storePassword
            keyAlias = json.android.keyAlias
            keyPassword = json.android.keyPassword
        }
        ...
        buildTypes {
            release {
                signingConfig signingConfigs.release //I added this
                // ...
            }
        }
    }
// ...
}

আমি কোনও .jsonফাইলের প্রকারটি বেছে .propertiesনেওয়ার কারণ , এবং কোনও ফাইলের ধরণ নয় (গ্রহণযোগ্য উত্তরে), কারণ আমি সেই একই ফাইলটিতে অন্য ডেটা (আমার পছন্দসই অন্যান্য কাস্টম বৈশিষ্ট্য )ও সংরক্ষণ করতে চেয়েছিলাম ( my_project/credentials.json), এবং এখনও গ্রেড পার্স করতে পেরেছি পাশাপাশি ফাইলের মধ্যে থেকে তথ্য সাইন ইন।


আমার কাছে সেরা সমাধানের মতো মনে হচ্ছে।
উচ্চাকাঙ্ক্ষী দেব

4

এই প্রশ্নটি অনেক বৈধ উত্তর পেয়েছে, কিন্তু আমি আমার কোডটি শেয়ার করতে চেয়েছিলাম যা গ্রন্থাগার রক্ষণাবেক্ষণকারীদের জন্য দরকারী হতে পারে , কারণ এটি মূলটি build.gradleবেশ পরিষ্কার করে ফেলে

আমি মডিউল ডিরেক্টরিতে একটি ফোল্ডার যুক্ত করি যা আমি gitignore। দেখে মনে হচ্ছে:

/signing
    /keystore.jks
    /signing.gradle
    /signing.properties

keystore.jksএবং signing.propertiesস্ব বর্ণনামূলক হওয়া উচিত। এবং এর signing.gradleমতো দেখাচ্ছে:

def propsFile = file('signing/signing.properties')
def buildType = "release"

if (!propsFile.exists()) throw new IllegalStateException("signing/signing.properties file missing")

def props = new Properties()
props.load(new FileInputStream(propsFile))

def keystoreFile = file("signing/keystore.jks")
if (!keystoreFile.exists()) throw new IllegalStateException("signing/keystore.jks file missing")

android.signingConfigs.create(buildType, {
    storeFile = keystoreFile
    storePassword = props['storePassword']
    keyAlias = props['keyAlias']
    keyPassword = props['keyPassword']
})

android.buildTypes[buildType].signingConfig = android.signingConfigs[buildType]

এবং মূল build.gradle

apply plugin: 'com.android.application'
if (project.file('signing/signing.gradle').exists()) {
    apply from: 'signing/signing.gradle'
}

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId ...
    }
}

dependencies {
    implementation ...
}

যেমন আপনি দেখতে পাচ্ছেন, আপনাকে বিল্ডটাইপগুলি মোটেও নির্দিষ্ট করতে হবে না, যদি ব্যবহারকারীর একটি বৈধ signingডিরেক্টরিতে অ্যাক্সেস থাকে তবে সে কেবল এটি মডিউলে রাখে এবং সে একটি বৈধ স্বাক্ষরিত রিলিজ অ্যাপ্লিকেশন তৈরি করতে পারে, অন্যথায় এটি কেবল তার মতো কাজ করে এটি সাধারণত করত।


আমি এই সমাধানটি সত্যিই পছন্দ করি। তবে দ্রষ্টব্য, ব্লকের apply fromপরে আসবেandroid
mgray88

0

আপনি কমান্ড লাইন থেকে পাসওয়ার্ডের জন্য অনুরোধ করতে পারেন:

...

signingConfigs {
  if (gradle.startParameter.taskNames.any {it.contains('Release') }) {
    release {
      storeFile file("your.keystore")
      storePassword new String(System.console().readPassword("\n\$ Enter keystore password: "))
      keyAlias "key-alias"
      keyPassword new String(System.console().readPassword("\n\$ Enter keys password: "))
    } 
  } else {
    //Here be dragons: unreachable else-branch forces Gradle to create
    //install...Release tasks.
    release {
      keyAlias 'dummy'
      keyPassword 'dummy'
      storeFile file('dummy')
      storePassword 'dummy'
    } 
  }
}

...

buildTypes {
  release {

    ...

    signingConfig signingConfigs.release
  }

  ...
}

...

এই উত্তরটি আগে প্রকাশিত হয়েছিল: https://stackoverflow.com/a/33765572/3664487


যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে। - পর্যালোচনা থেকে
এমকোবিট

1
@ এমকোবিট, এটি স্ট্যাক ওভারফ্লোতে সামগ্রীর লিঙ্ক! আমি অবশ্যই লিঙ্কযুক্ত সামগ্রীটি অনুলিপি এবং অনুলিপি করতে পারি তবে এটি নকল সামগ্রীকে সরিয়ে নিয়ে যায়। সুতরাং, আমি ধরে নিই, এবং আমি ভুল হলে আমাকে সংশোধন করি, লিঙ্ক পোস্ট করা সেরা সমাধান। যে কোনও যুক্তি যে "লিঙ্কযুক্ত পৃষ্ঠা পরিবর্তন করে" খারিজ করা উচিত, সেই ভিত্তিতে এখানে সামগ্রীগুলিও পরিবর্তিত হতে পারে। আপনার সমাধান মোছার বিরুদ্ধে আমি দৃ strong়ভাবে সুপারিশ করছি! কারণ লিঙ্কযুক্ত সামগ্রীটি একটি দুর্দান্ত সমাধান সরবরাহ করে।
ব্যবহারকারী 2768

ঠিক আছে, আমি মনে করি সমস্যাটি হ'ল এটি এখনও একটি "লিঙ্ক-কেবল" উত্তর। আমি মনে করি সমাধানটি এটি একটি মন্তব্য হিসাবে পোস্ট করা, প্রশ্নটিকে সদৃশ হিসাবে পতাকাঙ্কিত করা, বা এখানে একটি নতুন উত্তর লিখুন যা সমস্যার সমাধান করে।
এমকোবিট

"লিঙ্ক-ওয়ান" উত্তরগুলি কিছু ক্ষেত্রে উত্সাহিত করা উচিত। তবুও, আমি আপনার পরামর্শ এবং সদৃশ সামগ্রী অনুসরণ করেছি। (সদৃশ সামগ্রীটি স্পষ্টভাবে সমস্যাযুক্ত, কারণ কিছু সামগ্রী আপডেট করা হতে পারে, তবে বাকী বিষয়বস্তু নাও থাকতে পারে))
ব্যবহারকারী 2768

প্রকৃতপক্ষে, আমি স্রেফ উত্তরটি আপডেট করেছি এবং নকল সামগ্রীটি সমস্যার সৃষ্টি করছে! যদি কেবল লিংক-উত্তর উত্তরের বিরুদ্ধে নীতি থাকে তবে এ জাতীয় কোণগুলি বিবেচনা করার জন্য এটি রূপান্তরিত হওয়া উচিত।
ব্যবহারকারী 2768

0

আমার পাসওয়ার্ডে একটি বিশেষ অক্ষর রয়েছে যা ডলার সাইন করে $ এবং গ্রেড.প্রোপার্টি ফাইলটিতে আমাকে এড়িয়ে যেতে হয়েছিল। এর পরে, সাইন ইন করা আমার পক্ষে কাজ করেছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.