Android Komut satırı araçları sdkmanager her zaman şunu gösterir: Uyarı: Ayarlar oluşturulamadı


64

Android'in yeni Komut satırı araçlarını kullanıyorum çünkü android'in eski sdk-tools deposu artık mevcut değil. Bu yüzden gitlab-ci'mi komut satırlarını yüklemek için değiştirdim. Ama çalıştırmayı denediğimde aşağıdaki hatayı alıyorum:

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)

Zaten bu komutları elle çalıştırmayı denedim, ama aynı hatayı alıyorum. Ayrıca çalışırsam sdkmanager --versionaynı hata oluşur. Benim gitlab-ci şuna benzer:

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

Yanıtlar:


80

Bu sdkmanager SDK yükleme klasörünü bulma biçiminde bir hata gibi görünüyor.

Çözüm, bayrağı ayarlamaktır --sdk_root. ANDROID_HOME bildirimini daha yükseğe taşıyabilir, ardından bunu sonraki komutlarla kullanabilirsiniz.

 - 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

Ayrıca, echo yparçaları temizlemek için battaniye lisans kabul komutunu ilk komuta taşıdı .

Garip bir şekilde çalıştırırsanız sdkmanager --sdk_root=${ANDROID_HOME} "tools", araçları 3.6.0'dan 26.1.1'e yükseltir ve sdkmanager artık bu sorunu yaşamıyor. Bu güncelleme zaman ve bant genişliği gerektirir ve geçici çözüm için tam olarak gerekli değildir.


1
iyi çalıştı, şimdi ./gradlew assembleDebug ile ilgili bir hata alıyorum, ancak bunun artık sdkmanager ile ilgisi yok gibi görünüyor. Teşekkür ederim!
kaulex

1
Lütfen yankılarımı nasıl temizleyebileceğime bir örnek verebilir misiniz? Anlamıyorum.
kaulex

1
echo yKomutları kaldırmayı netleştirmek için snippet'i orijinal yanıtımda güncelledim .
caller9

1
Teşekkür ederim! Çok yardımcı olur!
kaulex

2
ihracat hattı ve sonra sdkmanager --sdk_root=${ANDROID_HOME} "tools"biraz benim için yaptı - teşekkürler!
gattsbr

23

Windows 10 / x64 üzerinde Appium için Android Komut Satırı Araçları'nı yüklemeyle mücadele edenler için şunları yapın:

  1. Android'den en son Komut satırı araçlarını indirin ie commandlinetools-win-6200805_latest.zip
  2. İndirilen dosyayı açın
  3. Komut satırı araçlarını aşağıdaki yolla birlikte diskinizde bir yerde saklamak için dizin oluşturun: android / cmdline-tools / latest Temel olarak bu Cmd satır araçlarını açtığınızda , araç dizinini en son olarak yeniden adlandırın ve bu son klasörü android / cmdline'a koyduğunuzdan emin olun -tools dizini diskinizde bir yerde
  4. Oluşturmak Cmdline araçları dizin konumunu depolayan dizin için ANDROID_HOME ortam değişkeni : C: \ YourLocationWhereYouStoreTheDirectory \ android \ cmdline-tools \ latest
  5. Path ortam değişkeninde % ANDROID_HOME% \ bin olarak yeni girdi oluştur

2
Bu "android / cmdline-tools / latest" ihtiyacı nereden geliyor? kaynak kodu ? bir yerde doktor var mı?
Tristan

1
Nedeni bu konu altında açıklanmıştır: stackoverflow.com/questions/60460429/…
ArturS

Referansta bulunduğunuz konuda, yanıt "ihracat ANDROID_HOME =" / Kullanıcılar / darish / development / sdk / android "" hayır "en son", hayır "cmdline araçları" diyor
Tristan

1
@Tristan cmdline-toolsbir zorunluluktur, ancak latestgerekli değildir. Ve yolu (veya adı) cmdline-toolsAndroid SDK'nın kendisinden geliyor. sdkmanager --sdk_root=${ANDROID_HOME} --listSonuçların "cmdline-tools; 1.0 | 1.0 | Android SDK Komut Satırı Araçları" nı içerdiği bu komutu çalıştırabilirsiniz
Jing Li

Bunun arkasındaki mantığın ne olduğunu bilmiyorum. Ama işe
yarar

19

Yeni cmdline araçlarını Android Geliştirici web sitesinden indirmek için aşağıdaki dizin yapısına uyulması gerekir.


2
Neden gerekli? bu nereden geliyor? kaynak kodu ? doc?
Tristan

1
CI'mi bu yapıyı kullanacak şekilde ayarladım ve sdkmanager'i çalıştırmama izin verirken, projem gradle ile oluşturulduğunda platformları ve lisansları nasıl doğru bir şekilde bulacağını bilmiyor ve her şey başarısız oluyor.
Matt Wolfe

17

--sdk_rootHer bir komut yürütmesi için argümanı geçirmek yerine, gerçek nedene derinlemesine bakalım.

Başlayarak Android SDK Komut satırı Araçları 1.0.0 (6200805) aksine, Android SDK 26.1.1 (4333796) , toolsdizin hiyerarşisi değişmiştir. Daha önce tam içine yerleştirildi ANDROID_HOME, şimdi hala olarak adlandırıldı tools(indirilen commandlinetools zip dosyasını açtıktan sonra alacağınız tek şey ), ancak farklı bir şekilde, cmdline-toolskendi adınıza bir dizinin içine yerleştirmeniz gerekiyor . cmdline-toolsAd, sdkmanager --listçıktılarını içeren paketleri listesinden alabileceğiniz paket adından gelir.cmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools .

toolsDizinin içindeki cmdline-toolsdizini kaydırmak çalışmasını sağlar ve can sıkıcı --sdk_rootargümandan kurtulmanıza yardımcı olur . Peki ya diğer kısımlar?

Peki, tek yapmanız gereken bu. Daha fazla açıklayayım.

  • Kral - sdkmanageriçeride yaşıyor cmdline-tools/tools/bin, PATHçevre değişkenine girsen iyi olur
  • cmdline-toolsolarak ayarlanmamalıdır ANDROID_HOME. Çünkü daha sonra, Android SDK'yı güncellerken veya daha fazla paket yüklerken, diğer paketler altına yerleştirilir ANDROID_HOME, ancak altına yerleştirilmez cmdline-tools.
  • Nihai tam ANDROID_HOMEdizin yapısı epeyce alt dizinleri oluşur, aşağıda gibi görünmelidir: build-tools, cmdline-tools, emulator, licenses, patcher, platform-tools, platforms, system-images. Bunu kolayca işaret edebilirsiniz build-toolsve cmdline-toolskardeşler, hepsi ebeveynin içinde oturuyor ANDROID_HOME.

Basit bir şekilde özetleyeyim:

  • Tercih ettiğiniz şekilde ayarlayın ANDROID_HOME(daha önce olduğu gibi)
  • Commandlinetools zip dosyasını indirip cmdline-toolsiçindeki bir dizine açınANDROID_HOME
  • Sistemin nerede bulunacağını bilmesi için dizini $ANDROID_HOME/cmdline-tools/tools/binortam değişkenine ekleyinPATHsdkmanager

Bu doğru cevap. Diğer cevapların aksine bu, zip dosyasında bulunan "tools" dizinini tutar.
SystemParadox

Çok teşekkür ederim, sorumu cevapladın :)
R-obert

5

Aynı sorunu aldım, Google tarafından buraya geldi. Göre AndroidStudio Arşivi , bugün 4.1 sürüm oldu. Sanırım bu bir tesadüf değil.

Bu tamamen ilgisiz kılavuz , linux için sdk araçlarının eski bir sürümü için bir sabit bağlantıya sahiptir . Diğer işletim sistemleri için url'yi windows veya mac olarak değiştirebilirsiniz. Bunu şimdilik bir düzeltme olarak kullanacağım.

(bunun bir çözüm değil bir yorum olması gerekiyordu)


Bağlantılar çalışmıyor, zaten eski bir sürümü kullanmayı denedim, ancak artık eski olanı kullanamayacağım için kod tabanımda yeni özellikler kullanıyorum. Yani bu çözüm benim için işe yaramıyor.
kaulex

5

Sdkmanager, android-sdk yolunu, ANDROID_SDK_ROOT gibi ortam değişkenlerini kullanmadan, açıldığı yere göre anlamaya çalışır. Ancak daha da kötüleşir, çünkü cmdline-tools adında sabit kodlanmış bir üst klasörü vardır ve komut satırı araçlarını başka bir ada sahip bir klasörde çıkartırsanız, sdk_root parametresini iç değişkeni doğru bir şekilde beslemek için kullanmaya zorlar.

Bunu akılda tutarak, bunu çözmek için aşağıdaki yaklaşımı kullanabiliriz.

Ubuntu işletim sistemini kullandığımızı varsayacağım, eğer değilseniz, bu talimatlardan bazılarını uyarlamanız gerekir.

  1. Android-SDK'yı yükleyin.

    sudo apt install android-sdk

    Kurulumdan sonra / usr / lib içerisinde android-sdk adında bir klasöre sahip olacaksınız.

  2. Android-sdk klasörü içinde cdmline-tools adlı bir klasör oluşturun

    sudo mkdir /usr/lib/android-sdk/cmdline-tools
  3. Android komut satırı araçları zip dosyasını buradan indirin ( https://developer.android.com/studio?hl=tr-419#downloads )
  4. / Usr / lib / android-sdk / cmdline-tools içine indirdiğiniz dosyayı açın

    sudo unzip /path/for/commandlinetools-linux-6200805_latest.zip -d /usr/lib/android-sdk/cmdline-tools
  5. Home dizinine gidin ve .profile dosyanızı düzenleyin

    nano .profile
  6. ANDROID_SDK_ROOT değişkeni oluşturma

    export ANDROID_SDK_ROOT=/usr/lib/android-sdk
  7. Sdkmanager klasörünü yolunuza koyun

    export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$PATH
  8. Kaydet ve çık
  9. Profilinizi yeniden yükleyin

    . ~/.profile
  10. Çalıştırmak

    sdkmanager --version

Terminalinizde basılı versiyonu görmelisiniz.


1
bir cazibe gibi çalıştı! Bu tam çözüm için tekrar teşekkürler
Vivian

4

Bu adımları izleyerek en son komut satırı araçlarını kullanma çözümü buldum:

1 - Komut satırı araçlarını bu yapıya sahip bir klasöre ayıklamak: örneğin: $HOME/Development/android/cmdline-tools/latest (bu klasör lib , bin , alert.txt ve source.properties içermelidir )

2 - ANDROID_HOME'u bir ortam değişkeni olarak tanımlama :

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

3 - PATH üzerine yükleme :

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

Çelişkili bilgiler: "en son (bu klasör lib, bin, ... içermelidir)", ANDROID_HOME = "... / en son" PATH = "... $ ANDROID_HOME / tools / lib
Tristan

lib araçlarda mı yoksa ANDROID_HOME'da mı?
Tristan

Kabul edilen cevap bu olmalı
Shivam Jha

cmdline-toolsbir zorunluluktur, ancak latestgerekli değildir.
Jing Li

3

Deneyimlerimi paylaşmak istiyorum.

İlk başta dizin yapısının neden bu cevapta gösterilen şekilde görünmesi gerektiğini açıklamaya çalışıyorum - https://stackoverflow.com/a/60460681/1758733 . https://stackoverflow.com/users/668455/tristan birkaç kez açıklama istedi, bu yüzden bir sonraki deneyle durumu netleştireceğimizi umuyoruz:

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.

Birisi başka bir sorunla karşılaşabilir - ".android / repositories.cfg dosyasına takılma".

Diğer konular ve gerçekler:

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 ile geliştirme için aşağıdaki tarifi özetlemek mümkündür:

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

Unity 2018 belgelerindeki bu sayfanın, bu sorunu çözme gibi iyi bir açıklaması da vardır, örneğin:

  1. Android SDK'yı Android Studio olmadan yükleme.
  2. “Uyarı: Ayarlar oluşturulamadı” ve “java.lang.IllegalArgumentException” için geçici çözüm
  3. Android Studio sürüm 3.6 veya daha yenisi için hile.
  4. Java 9 veya üstü hakkında uyarı, bir JDK'nın sürüm 8 olması gerekir.

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


0

Bu , yeni bir Mac'e bağımsız komut satırı araçları ( commandlinetools-mac-6200805_latest) indirilirken başıma geldi .

Buradaki tüm cevaplara dayanarak, bu şekilde çalışmasını sağlayabildim

# 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_rootSeçeneğin dokümanları " Bu aracı içeren SDK yerine belirtilen SDK kökünü kullan" der . Bu, bağımsız olarak gönderilmesine rağmen, aracın SDK'nın da kurulduğu bir paketin parçası olmasını beklediğini düşündürdü.


0

SDK (Herhangi bir yöntem) kurmanın ilk gereksinimi Java'yı yüklemek ve JAVA_HOME yolunu ayarlamaktır .

Daha sonra, SDK komut satırı araçlarının yükleme yolu olmadan NullPointerException atar.
Bunun üstesinden gelmek için sadece "- sdk_root" argümanıyla SDK'yı yüklemek istediğiniz yolu geçin
. sdkmanager.bat "platform araçları" "platformları; android-" --sdk_root =

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.