Las herramientas de línea de comandos de Android sdkmanager siempre muestran: Advertencia: no se pudieron crear configuraciones

Resuelto kaulex asked hace 54 años • 24 respuestas

Utilizo las nuevas herramientas de línea de comandos para Android porque el antiguo repositorio sdk-tools de Android ya no está disponible. Así que cambié mi gitlab-ci para cargar el archivo commandlintools. Pero cuando intento ejecutarlo me sale el siguiente error:

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)

Ya intenté ejecutar esos comandos a mano, pero aparece el mismo error. Además, si ejecuto sdkmanager --version, ocurre el mismo error. Mi gitlab-ci se parece a:

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
kaulex avatar Jan 01 '70 08:01 kaulex
Aceptado

En lugar de pasar el argumento --sdk_rootpara cada ejecución de comando, profundicemos en la causa real.

A partir de Android SDK Command-line Tools 1.0.0 (6200805) , a diferencia de Android SDK 26.1.1 (4333796)tools , se ha cambiado la jerarquía de directorios. Anteriormente se colocaba justo dentro ANDROID_HOME(lo cual está en desuso, usaremos el término ANDROID_SDK_ROOTpara el resto del párrafo), ahora todavía se llama así tools(lo único que obtendrá después de descomprimir el archivo zip de commandlinetools descargado ), pero de manera diferente, Tienes que colocarlo dentro de un directorio llamado cmdline-toolspor tu cuenta. El nombre cmdline-toolsproviene del nombre de su paquete, donde puede obtenerlo al enumerar el comando de paquetes sdkmanager --list, cuyas salidas incluyen cmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools.

Envolver toolsel directorio dentro cmdline-toolsdel directorio haría que funcione y le ayudaría a deshacerse del molesto --sdk_rootargumento. Pero ¿qué pasa con las otras partes?

Bueno, eso es todo lo que tienes que cambiar. Déjame explicarte más.

  • El rey: sdkmanagervive dentro cmdline-tools/tools/bin, será mejor que lo establezcas en PATHla variable de entorno
  • cmdline-toolsno debe establecerse como ANDROID_SDK_ROOT. Porque más adelante, al actualizar el SDK de Android o instalar más paquetes, los otros paquetes se colocarán en ANDROID_SDK_ROOT, pero no en cmdline-tools.
  • La estructura de directorios final y completa ANDROID_SDK_ROOTdebería verse como a continuación y constar de bastantes subdirectorios: build-tools, cmdline-tools, emulator, licenses, patcher, platform-tools, platforms, system-images. Puedes señalar fácilmente que build-toolsy cmdline-toolsson hermanos, todos se sientan dentro del padre ANDROID_SDK_ROOT.

Permítanme resumir de una manera sencilla:

  • Establece tu preferido ANDROID_SDK_ROOT(como antes)
  • Descargue y descomprima el archivo zip de commandlinetools en un directorio llamado cmdline-tools, que se encuentra dentroANDROID_SDK_ROOT
  • Agregue el directorio $ANDROID_SDK_ROOT/cmdline-tools/tools/bina la variable de entorno PATH, para que el sistema sepa dónde encontrarlosdkmanager

!!¡¡ACTUALIZAR!!

El comportamiento ha cambiado nuevamente desde la compilación 6858069(Herramientas de línea de comandos del SDK de Android 3.0):

  • Después de descomprimir el paquete, el directorio superior que obtendrá es cmdline-tools.
  • Cambie el nombre del directorio descomprimido de cmdline-toolsa toolsy colóquelo debajo $ANDROID_SDK_ROOT/cmdline-tools, de modo que ahora debería verse así: $ANDROID_SDK_ROOT/cmdline-tools/tools. Y en su interior deberías tener: NOTICE.txt bin lib source.properties. En realidad, según el documento oficial de herramientas de línea de comandos , la estructura de árbol debería ser android_sdk/cmdline-tools/version/bin/, pero lo he comprobado, usar versiono toolsno hace ninguna diferencia aquí.
  • Para su variable de entorno PATH, le recomendaría que la configure de esta manera:, PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/binporque después de la actualización posterior, obtendrá la última sdkmanagerversión debajo de $ANDROID_SDK_ROOT/cmdline-tools/latest/bin, si la coloca al frente, tendrá mayor prioridad.
Jing Li avatar Apr 12 '2020 19:04 Jing Li

Esto parece ser un error en la forma en que sdkmanager localiza la carpeta de instalación del SDK.

Una solución alternativa es establecer la bandera --sdk_root. Puede mover la declaración ANDROID_HOME hacia arriba y luego usarla con los comandos siguientes.

 - 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

Además, se movió el comando general de aceptación de licencia al primer comando para limpiar las echo ypiezas.

Por extraño que parezca, si lo ejecuta, sdkmanager --sdk_root=${ANDROID_HOME} "tools"actualizará las herramientas de 3.6.0 a 26.1.1 y sdkmanager ya no tiene este problema. Esta actualización requiere tiempo y ancho de banda y no es exactamente necesaria con la solución alternativa.

caller9 avatar Feb 28 '2020 14:02 caller9

Para aquellos que tuvieron problemas para instalar las herramientas de línea de comandos de Android para Appium en Windows 10/x64, simplemente hagan lo siguiente:

  1. Descargue las últimas herramientas de línea de comandos de Android, es decir, commandlinetools-win-6200805_latest.zip
  2. Descomprime el archivo descargado
  3. Cree un directorio para almacenar herramientas de línea de comandos en algún lugar de su disco, con la siguiente ruta incluida: android/cmdline-tools/latest Básicamente, cuando descomprima estas herramientas de línea de comandos, simplemente cambie el nombre del directorio de herramientas al más reciente y asegúrese de colocar esta última carpeta en android/cmdline. -directorio de herramientas en algún lugar de su disco
  4. Cree la variable de entorno ANDROID_HOME para el directorio que almacena la ubicación del directorio de herramientas cmdline como: C:\YourLocationWhereYouStoreTheDirectory\android\cmdline-tools\latest
  5. Cree una nueva entrada en la variable de entorno Ruta como %ANDROID_HOME%\bin
ArturS avatar Mar 09 '2020 10:03 ArturS

Intenta sdkmanagerdescubrir la ruta del SDK de Android en función del lugar donde está descomprimido, sin utilizar las variables de entorno, como ANDROID_SDK_ROOT. Pero es peor, porque tiene una carpeta principal codificada con un nombre cmdline-toolsy si descomprimes las herramientas de línea de comandos dentro de una carpeta con otro nombre, no funciona, lo que nos obliga a usar el parámetro sdk_rootpara alimentar la variable interna correctamente.

Entonces, con esto en mente, podemos utilizar el siguiente enfoque para resolver esto.

Asumiré que estamos usando el sistema operativo Ubuntu, por lo que si no es así, deberías adaptar algunas de esas instrucciones.

  1. Instale el SDK de Android.

     sudo apt install android-sdk
    

    Después de la instalación tendrás una carpeta llamada android-sdk en /usr/lib

  2. Cree una carpeta llamada cdmline-tools dentro de la carpeta android-sdk

     sudo mkdir /usr/lib/android-sdk/cmdline-tools
    
  3. Descargue el zip de las herramientas de línea de comandos de Android desde aquí ( https://developer.android.com/studio?hl=en-419#downloads )

  4. Desempaquete el archivo que acaba de descargar dentro de /usr/lib/android-sdk/cmdline-tools

     sudo unzip /path/for/commandlinetools-linux-6200805_latest.zip -d /usr/lib/android-sdk/cmdline-tools
    
  5. Vaya a su directorio de inicio y edite su .profile

     nano .profile
    
  6. Crear una variable ANDROID_SDK_ROOT

     export ANDROID_SDK_ROOT=/usr/lib/android-sdk
    
  7. Coloque la carpeta sdkmanager en su ruta

     export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$PATH
    
  8. Guardar y Salir

  9. Recarga tu perfil

     . ~/.profile
    
  10. Correr

    sdkmanager --version
    

Deberías ver la versión impresa en tu terminal.

awquadros avatar Apr 11 '2020 00:04 awquadros