Android कमांड लाइन टूल sdkmanager हमेशा दिखाता है: चेतावनी: सेटिंग्स नहीं बना सका


64

मैं एंड्रॉइड के नए कमांड लाइन टूल का उपयोग करता हूं क्योंकि एंड्रॉइड का पुराना एसडीके-टूल रिपॉजिटरी अब उपलब्ध नहीं है। इसलिए मैंने अपने गिटलैब-सीआई को कमांडलिंट्स को लोड करने के लिए बदल दिया। लेकिन जब मैं इसे चलाने की कोशिश करता हूं तो मुझे निम्नलिखित त्रुटि मिलती है:

Warning: Could not create settings
java.lang.IllegalArgumentException
    at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.<init>(SdkManagerCliSettings.java:428)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:152)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:134)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:57)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)

मैंने पहले ही उन कमांड को हाथ से निष्पादित करने की कोशिश की, लेकिन मुझे वही त्रुटि मिली। अगर मैं दौड़ता हूं sdkmanager --version, तो भी वही त्रुटि होती है। मेरी गीतालाब-सी दिखती है:

image: openjdk:9-jdk

variables:
  ANDROID_COMPILE_SDK: "29"
  ANDROID_BUILD_TOOLS: "29.0.3"
  ANDROID_SDK_TOOLS:   "6200805"

before_script:
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
  - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
  - unzip -d android-sdk-linux android-sdk.zip
  - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
  #- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
  - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
  - export ANDROID_HOME=$PWD/android-sdk-linux
  - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
  - chmod +x ./gradlew
  # temporarily disable checking for EPIPE error and use yes to accept all licenses
  - set +o pipefail
  - yes | android-sdk-linux/tools/bin/sdkmanager --licenses
  - set -o pipefail

stages:
  - build
  - test

lintDebug:
  stage: build
  script:
    - ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint

assembleDebug:
  stage: build
  script:
    - ./gradlew assembleDebug
  artifacts:
    paths:
    - app/build/outputs/

debugTests:
  stage: test
  script:
    - ./gradlew -Pci --console=plain :app:testDebug

जवाबों:


79

यह एक बग प्रतीत होता है जिस तरह से sdkmanager SDK इंस्टॉलेशन फ़ोल्डर को ढूँढता है।

चारों ओर एक काम झंडा स्थापित करना है --sdk_root। आप ANDROID_HOME घोषणा को उच्चतर ले जा सकते हैं, फिर बाद के आदेशों के साथ इसका उपयोग कर सकते हैं।

 - export ANDROID_HOME=$PWD/android-sdk-linux
 - yes | android-sdk-linux/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} --licenses
 - android-sdk-linux/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools" "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null

इसके अलावा, echo yभागों को साफ करने के लिए पहले कमांड के लिए कंबल लाइसेंस स्वीकृति आदेश चला गया ।

यदि आप sdkmanager --sdk_root=${ANDROID_HOME} "tools"इसे चलाते हैं तो अजीब तरह से यह 3.6.0 से 26.1.1 तक टूल को अपग्रेड करेगा और sdkmanager में अब यह समस्या नहीं है। यह अद्यतन समय और बैंडविड्थ लेता है और काम के आसपास बिल्कुल आवश्यक नहीं है।


1
ठीक काम किया है, अब मुझे एक त्रुटि मिलती है ।/gradlew assembleDebug, लेकिन ऐसा लगता है कि इसका sdkmanager से कोई लेना-देना नहीं है। धन्यवाद!
कोउलेक्स

1
क्या आप मुझे एक उदाहरण दे सकते हैं कि मैं अपनी इको वाई को कैसे साफ कर सकता हूं? मुझे नहीं मिला।
kaulex

1
मैंने अपने मूल उत्तर में स्निपेट को अपडेट कर दिया है ताकि echo yकमांड को हटा दिया जा सके।
कॉलर

1
धन्यवाद! बहुत मदद करता है!
kaulex

2
निर्यात लाइन और फिर sdkmanager --sdk_root=${ANDROID_HOME} "tools"बिट मेरे लिए यह किया - धन्यवाद!
गेट्सब्रिज

23

उन लोगों के लिए जो विंडोज 10 / x64 पर Appium के लिए एंड्रॉइड कमांड लाइन टूल स्थापित करने के साथ संघर्ष कर रहे हैं:

  1. एंड्रॉइड से नवीनतम कमांड लाइन टूल डाउनलोड करें यानी कमांडलाइनटूल-win-6200805_latest.zip
  2. डाउनलोड की गई फ़ाइल को अनज़िप करें
  3. अपने डिस्क पर कहीं से कमांडलाइन टूल स्टोर करने के लिए डायरेक्टरी बनाएं, इसमें निम्नलिखित पथ शामिल हैं: Android / cmdline-tools / latest मूल रूप से जब आप इस Cmd लाइन टूल्स को अनज़िप करते हैं, तो टूल डायरेक्टरी को नवीनतम में बदल दें और सुनिश्चित करें कि आपने इस नवीनतम फ़ोल्डर को android / cmdline में डाल दिया है -टूल निर्देशिका अपनी डिस्क पर कहीं
  4. Cmdline उपकरण निर्देशिका स्थान को संग्रहीत करने वाली निर्देशिका के लिए ANDROID_HOME वातावरण चर बनाएं : C: \ YourLocationWhereYouStoreTheDirectory \ android \ cmdline-tools \ latest
  5. % ANDROID_HOME% \ bin के रूप में पथ वातावरण चर में नई प्रविष्टि बनाएँ

2
इस "android / cmdline-tools / latest" की आवश्यकता कहां से आती है? सोर्स कोड ? कुछ डॉक्टर कहीं?
ट्रिस्टन

1
इस विषय के अंतर्गत कारण का वर्णन किया गया है: stackoverflow.com/questions/60460429/…
ArturS

आपके द्वारा संदर्भित विषय में, उत्तर "निर्यात ANDROID_HOME =" / उपयोगकर्ता / दारिश / विकास / sdk / android "" नहीं "नवीनतम", कोई "cmdline- उपकरण" नहीं कहता है
ट्रिस्टन

1
@ टिस्टन cmdline-toolsएक होना चाहिए, हालांकि latestआवश्यक नहीं है। और पथ (या नाम) cmdline-toolsएंड्रॉइड एसडीके से ही आता है। आप इस कमांड को चला सकते हैं sdkmanager --sdk_root=${ANDROID_HOME} --list, जहाँ परिणामों में "cmdline-tools; 1.0; 1.0 | 1.0 | एंड्रॉइड एसडीके कमांड-लाइन टूल्स"
Jing Li

मुझे नहीं पता कि इसके पीछे क्या तर्क है। लेकिन यह काम करता है :-)
सोरिया

19

Android डेवलपर वेबसाइट से नए cmdline- उपकरण डाउनलोड करने के लिए निम्न निर्देशिका संरचना का सम्मान करना आवश्यक है।


2
इसकी आवश्यकता क्यों है? यह कहां से आता है ? सोर्स कोड ? डॉक्टर
ट्रिस्टन

1
मैंने इस संरचना का उपयोग करने के लिए अपने CI को सेटअप किया और जब यह मुझे sdkmanager को चलाने की अनुमति देता है, जब मेरी परियोजना ग्रेडेल के साथ बन जाती है तो यह नहीं जानता कि प्लेटफॉर्म और लाइसेंस का ठीक से पता कैसे लगाया जाए और सब कुछ विफल हो जाए।
मैट वुल्फ

16

--sdk_rootप्रत्येक एकल कमांड निष्पादन के लिए तर्क को पारित करने के बजाय , आइए वास्तविक कारण में गहराई से गोता लगाएँ।

से शुरू Android SDK कमांड लाइन उपकरण 1.0.0 (6,200,805) के विपरीत, Android SDK 26.1.1 (4,333,796) , toolsनिर्देशिका पदानुक्रम बदल दिया गया है। पहले इसे सही तरीके से अंदर रखा गया था ANDROID_HOME, अब इसे अभी भी नाम दिया गया है tools(केवल एक चीज जिसे आप डाउनलोड किए गए कमांडलिनेट्स ज़िप फ़ाइल को अनपैक करने के बाद प्राप्त करेंगे ), लेकिन अलग-अलग, आपको इसे cmdline-toolsअपने नाम की एक निर्देशिका के अंदर रखना होगा । नाम cmdline-toolsइसके पैकेज नाम से आता है, जहाँ आप लिस्टिंग पैकेज कमांड से प्राप्त कर सकते हैं sdkmanager --list, जिसके आउटपुट में शामिल हैं cmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools

toolsडायरेक्टरी के अंदर रैपिंग डायरेक्टरी से cmdline-toolsकाम चल जाता है और आपको कष्टप्रद --sdk_rootतर्क से छुटकारा पाने में मदद मिलती है। लेकिन अन्य भागों के बारे में क्या?

खैर, यह आपको बदलना होगा। मुझे और समझाने दो।

  • राजा - sdkmanagerअंदर रहता है cmdline-tools/tools/bin, आप PATHपर्यावरण चर में बेहतर सेट करेंगे
  • cmdline-toolsके रूप में सेट नहीं किया जाना चाहिए ANDROID_HOME। क्योंकि बाद में, एंड्रॉइड एसडीके को अपडेट करते समय, या अधिक पैकेज स्थापित करने पर, अन्य पैकेजों को नीचे रखा जाएगा ANDROID_HOME, लेकिन इसके तहत नहीं cmdline-tools
  • अंतिम, पूरा ANDROID_HOMEनिर्देशिका संरचना नीचे की तरह दिखना चाहिए, काफी कुछ उप-निर्देशिका से मिलकर बनता है: build-tools, cmdline-tools, emulator, licenses, patcher, platform-tools, platforms, system-images। आप आसानी से बाहर इंगित कर सकते हैं कि build-toolsऔर cmdline-toolsभाई बहन के माता-पिता के अंदर सभी बैठ कर रहे हैं, ANDROID_HOME

मुझे एक सरल तरीके से पुनर्कथन करने दें:

  • अपना पसंदीदा सेट करें ANDROID_HOME(पहले की तरह)
  • डाउनलोड करें और कमांडलाइनटूलस ज़िप फ़ाइल को एक निर्देशिका में अनपैक करें cmdline-tools, जिसे अंदर कहा जाता हैANDROID_HOME
  • निर्देशिका $ANDROID_HOME/cmdline-tools/tools/binको पर्यावरण चर में जोड़ें PATH, ताकि सिस्टम को पता हो कि कहां खोजना हैsdkmanager

यह सही जवाब है। अन्य उत्तरों के विपरीत यह "टूल" डायरेक्टरी रखता है, जो कि वास्तव में जिप फाइल में है।
SystemParadox

बहुत बहुत धन्यवाद, आपने मेरे प्रश्न का उत्तर दिया :)
R-obert

5

एक ही मुद्दा मिला, गूगल द्वारा यहाँ आया था। AndroidStudio आर्काइव के अनुसार , आज 4.1 की रिलीज थी। मुझे लगता है कि यह कोई संयोग नहीं है।

यह पूरी तरह से असंबंधित मार्गदर्शिका में लिनक्स के पुराने संस्करण के लिए हार्डलिंक है । आप अन्य ओएस के लिए विंडोज़ या मैक में यूआरएल बदल सकते हैं। मैं उस का उपयोग अभी के लिए एक हॉटफ़िक्स के रूप में करूँगा।

(यह एक टिप्पणी नहीं एक समाधान माना जाता था)


लिंक काम नहीं कर रहा है, मैंने पहले से ही एक पुराने संस्करण का उपयोग करने की कोशिश की है, लेकिन मैं अपने कोड आधार में नई सुविधाओं का उपयोग करता हूं इसलिए मैं अब पुराने का उपयोग नहीं कर सकता। तो यह समाधान मेरे लिए काम नहीं करता है।
kaulex

5

Sdkmanager एंड्रॉइड-एसडीके पथ को यह पता लगाने की कोशिश करता है कि ANDROID_SDK_ROOT जैसे पर्यावरण चर का उपयोग किए बिना, जहां यह अनपैक्ड है, वहां स्थित है। लेकिन यह बदतर हो जाता है, क्योंकि इसमें हार्ड-कोडेड पैरेंट फ़ोल्डर होता है जिसका नाम cmdline-tools होता है और यदि आप किसी अन्य नाम के साथ किसी फ़ोल्डर के अंदर कमांडलाइनलेट्स खोलते हैं, तो यह काम नहीं करता है, जिससे हमें पैरामीटर sdk_root का उपयोग करने के लिए मजबूर किया जाता है।

तो, इस बात को ध्यान में रखते हुए हम इसे हल करने के लिए निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं।

मुझे लगता है कि हम उबंटू ओएस का उपयोग कर रहे हैं, इसलिए यदि आप नहीं हैं, तो आपको उस निर्देश में से कुछ को अनुकूलित करना चाहिए।

  1. Android-SDK इंस्टॉल करें।

    sudo apt install android-sdk

    इंस्टालेशन के बाद आपके पास android / sdk in / usr / lib नाम का एक फोल्डर होगा

  2. एंड्रॉइड-एसडीके फ़ोल्डर के अंदर cdmline- टूल नामक एक फ़ोल्डर बनाएं

    sudo mkdir /usr/lib/android-sdk/cmdline-tools
  3. Android कमांड लाइन टूल्स ज़िप यहाँ से डाउनलोड करें ( https://developer.android.com/studio?hl=en-419#downloads )
  4. आपके द्वारा अभी डाउनलोड की गई फ़ाइल को अनप्लग करें / usr / lib / android-sdk / cmdline-tools

    sudo unzip /path/for/commandlinetools-linux-6200805_latest.zip -d /usr/lib/android-sdk/cmdline-tools
  5. तुम घर जाओ और अपने .profile को संपादित करें

    nano .profile
  6. एक ANDROID_SDK_ROOT चर बनाएँ

    export ANDROID_SDK_ROOT=/usr/lib/android-sdk
  7. अपने पथ में sdkmanager फ़ोल्डर डालें

    export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$PATH
  8. सुरषित और बहार
  9. आप प्रोफ़ाइल पुनः लोड करें

    . ~/.profile
  10. Daud

    sdkmanager --version

आपको अपने टर्मिनल में मुद्रित संस्करण देखना चाहिए।


1
इसने एक जादू की तरह काम किया! इस पूर्ण समाधान के लिए फिर से धन्यवाद
विवियन

4

मुझे उन चरणों का पालन करते हुए नवीनतम कमांड-लाइन टूल का उपयोग करने का समाधान मिला:

1 - इस संरचना के साथ एक फ़ोल्डर में कमांड-लाइन टूल्स को निकालना: उदाहरण के लिए: $HOME/Development/android/cmdline-tools/latest (इस फ़ोल्डर में लिब , बिन , नोटिस.टैक्स और source.properties शामिल होना चाहिए )

2 - एक पर्यावरण चर के रूप में ANDROID_HOME को परिभाषित करना :

ANDROID_HOME="$HOME/Development/android/cmdline-tools/latest"

3 - इसे पाथ पर लोड करें :

PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/lib:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools"

विरोधाभासी चेतावनी: "नवीनतम (इस फ़ोल्डर में लिब, बिन, ...) होना चाहिए", ANDROID_HOME = "... / नवीनतम" पथ = "... $ ANDROID_HOME / उपकरण / lib
ट्रिस्टन

lib उपकरण या ANDROID_HOME में है?
ट्रिस्टन

यह स्वीकृत उत्तर होना चाहिए
शिवम झा

cmdline-toolsएक होना चाहिए, हालांकि latestआवश्यक नहीं है।
जिंग ली

3

मैं अपना अनुभव साझा करना चाहूंगा।

सबसे पहले मैं यह समझाने की कोशिश करता हूं कि निर्देशिका संरचना को इस उत्तर में दिखाए गए तरीके को क्यों देखना है - https://stackoverflow.com/a/60460681/1758733https://stackoverflow.com/users/668455/tristan ने कई बार स्पष्टीकरण मांगा ताकि आशा है कि मैं अगले प्रयोग के साथ संतृप्ति को स्पष्ट करूंगा:

1. unpack cmdline-tools to any path, for example c:\Android\tools;
2. create a folder for SDK, let it be c:\Android\SDK;
3. install cmdline-tools (yes, we install cmdline-tools again =)):
    c:\Android\tools\bin\sdkmanager --sdk_root=c:\Android\SDK "cmdline-tools;latest"
4. at this moment we can examine c:\Android\SDK and locate
    the path c:\Android\SDK\cmdline-tools\latest. If we compare
    this folder with the previous version c:\Android\tools we find out
    that they are identical. The new installed c:\Android\SDK\cmdline-tools\latest\sdkmanager works
    without --sdk_root argument so we could initially unpack cmdline-tools
    to cmdline-tools\latest.

कोई अन्य समस्या का सामना कर सकता है - ".android / repositories.cfg पर लोड नहीं किया जा सका।"

अन्य मुद्दे और तथ्य:

1. QtCreator works with another sdkmanager that placed in SDK_ROOT/tools/bin
2. SDK_ROOT/tools/bin/sdkmanager works only with JDK 8
3. Java uses its own storage for certificates and it's not convinient usually.
    Thus one may want to use Windows certificate store. Unfortunately Grandle has the
    issue - https://stackoverflow.com/a/59056537 - so use the following:
    set JAVA_OPTS=-Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.trustStore=NUL

Qt के साथ विकास के लिए निम्नलिखित नुस्खा की रचना की जा सकती है:

1. download commandlinetools-win-6200805_latest.zip
2. extract cmdline-tools so there will be hierarchy
    SDKROOT
        - cmdline-tools
            - latest
                - bin
                    - sdkmanager.bat
                    - ...
                - lib
                - ...
3. install JDK 8. set JAVA_HOME=c:\path\to\java so that %JAVA_HOME%/bin/java.exe exists.
4. set JAVA_OPTS=-Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.trustStore=NUL
5. NDK may be downloaded manually or installed with sdkmanager
6. install required components:
    SDKROOT\cmdline-tools\latest\bin\sdkmanager "tools" "build-tools;BUILD_TOOLS_VERSION" "platform-tools" "platforms;ANDROID_VERSION"
7. run qtcreator from console so JAVA_OPTS is taken into account (or set it globaly for windows user or even station)
8. tools -> options -> devices set paths to JDK 8, SDKROOT and NDK

0

एकता 2018 प्रलेखन के इस पृष्ठ में इस मुद्दे को हल करने की एक अच्छी व्याख्या भी है, जिसमें इस तरह के बिंदु शामिल हैं:

  1. एंड्रॉइड एसडीके को एंड्रॉइड स्टूडियो के बिना इंस्टॉल करना।
  2. "चेतावनी: सेटिंग्स नहीं बना सका" और "java.lang.IllegalArgumentException" के लिए समाधान
  3. Android स्टूडियो संस्करण 3.6 या नए के लिए चाल।
  4. जावा 9 या बाद के बारे में चेतावनी, एक जेडीके संस्करण 8 होना चाहिए।

https://docs.unity3d.com/2018.4/Documentation/Manual/android-sdksetup.html


0

नए मैक पर स्टैंडअलोन कमांड लाइन टूल ( commandlinetools-mac-6200805_latest) डाउनलोड करते समय मेरे साथ ऐसा हुआ ।

यहां सभी उत्तरों के आधार पर, मैं इसे इस तरह से काम करने में सक्षम था

# Define ANDROID_HOME, if not defined already
export ANDROID_HOME="~/Library/Android/sdk"

# Create the folder if missing
mkdir -p $ANDROID_HOME

# Let the tool know that it should use that SDK location. 
sdkmanager --list --sdk_root=$ANDROID_HOME

--sdk_rootविकल्प के लिए डॉक्स कहते हैं, " इस उपकरण वाले एसडीके के बजाय निर्दिष्ट एसडीके रूट का उपयोग करें "। इससे मुझे लगता है कि, स्टैंडअलोन शिप किए जाने के बावजूद, उपकरण एक बंडल का हिस्सा होने की उम्मीद करता है, जहां एसडीके को अस्वस्थ किया जाता है।


0

एसडीके (किसी भी विधि) को स्थापित करने की पहली आवश्यकता जावा स्थापित करना और JAVA_HOME पथ स्थापित करना है।

फिर, SDK कमांड-लाइन टूल्स को इंस्टॉलेशन पथ की आवश्यकता होती है जिसके बिना यह NullPointerException को फेंकता है।
इसे दूर करने के लिए बस उस मार्ग को पास करें जहां आप तर्क के साथ एसडीके स्थापित करना चाहते हैं "--sdk_root"
जैसे। sdkmanager.bat "प्लेटफ़ॉर्म-टूल्स" "प्लेटफ़ॉर्म; Android-" --sdk_root =

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.