Eu uso as novas ferramentas de linha de comando do android porque o antigo repositório sdk-tools do android não está mais disponível. Então mudei meu gitlab-ci para carregar o commandlintools. Mas quando tento executá-lo, recebo o seguinte erro:
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)
Eu já tentei executar esses comandos manualmente, mas recebo o mesmo erro. Além disso, se eu executar sdkmanager --version
, o mesmo erro ocorre. Meu gitlab-ci se parece com:
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
echo y
comandos.sdkmanager --sdk_root=${ANDROID_HOME} "tools"
fez por mim - obrigado!Para quem teve dificuldade em instalar o Android Command Line Tools para Appium no Windows 10 / x64, faça o seguinte:
fonte
cmdline-tools
é obrigatório, maslatest
não é obrigatório. E o caminho (ou nome)cmdline-tools
vem do próprio Android SDK. Você pode executar este comandosdkmanager --sdk_root=${ANDROID_HOME} --list
, onde os resultados incluem "cmdline-tools; 1.0 | 1.0 | Ferramentas de linha de comando do Android SDK"O download das novas ferramentas do cmdline no site do desenvolvedor do Android exige que a seguinte estrutura de diretórios seja respeitada.
fonte
Em vez de passar o argumento
--sdk_root
para cada execução de comando único, vamos nos aprofundar na causa real.A partir das Ferramentas de linha de comando do Android SDK 1.0.0 (6200805) , em contraste com o Android SDK 26.1.1 (4333796) , a
tools
hierarquia de diretórios foi alterada. Anteriormente, ele foi colocado dentroANDROID_HOME
, agora ainda é nomeado comotools
(a única coisa que você terá depois de descompactar o arquivo zip baixado commandlinetools ), mas, diferentemente, você deve colocá-lo dentro de um diretório chamadocmdline-tools
por conta própria. O nomecmdline-tools
vem do nome do pacote, onde você pode obter listando o comando packagessdkmanager --list
, cujas saídas incluemcmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools
.O agrupamento do
tools
diretório dentro docmdline-tools
diretório o faria funcionar e o ajudaria a se livrar do--sdk_root
argumento irritante . Mas e as outras partes?Bem, isso é tudo que você precisa mudar. Deixe-me explicar mais.
sdkmanager
vive dentrocmdline-tools/tools/bin
, é melhor definirPATH
a variável de ambientecmdline-tools
não deve ser definido comoANDROID_HOME
. Como mais tarde, ao atualizar o Android SDK ou instalar mais pacotes, os outros pacotes serão colocados abaixoANDROID_HOME
, mas não abaixocmdline-tools
.ANDROID_HOME
estrutura de diretórios deve ser semelhante a seguir, consistem em algumas sub-diretórios:build-tools
,cmdline-tools
,emulator
,licenses
,patcher
,platform-tools
,platforms
,system-images
. Você pode facilmente apontar quebuild-tools
ecmdline-tools
são irmãos, todos sentados dentro dos paisANDROID_HOME
.Deixe-me recapitular de uma maneira simples:
ANDROID_HOME
(como antes)cmdline-tools
, que está dentroANDROID_HOME
$ANDROID_HOME/cmdline-tools/tools/bin
à variável de ambientePATH
, para que o sistema saiba onde encontrarsdkmanager
fonte
Tem o mesmo problema, veio aqui pelo Google. De acordo com o AndroidStudio Archive , hoje foi o lançamento do 4.1. Suponho que não seja coincidência.
Este guia completamente independente possui um link físico para uma versão mais antiga do sdk-tools for linux . Você pode alterar o URL para Windows ou Mac para outros sistemas operacionais. Vou usar isso como um hotfix por enquanto.
(isso deveria ser um comentário, não uma solução)
fonte
O sdkmanager tenta descobrir o caminho do android-sdk com base em onde é descompactado, sem usar as variáveis de ambiente, como ANDROID_SDK_ROOT. Mas fica pior, porque ela tem uma pasta pai codificada chamada cmdline-tools e se você descompactar commandlinetools dentro de uma pasta com outro nome, ela não funcionará, forçando-nos a usar o parâmetro sdk_root para alimentar a variável interna corretamente.
Portanto, com isso em mente, podemos usar a seguinte abordagem para resolver isso.
Assumirei que estamos usando o Ubuntu OS; portanto, se você não estiver, adapte algumas dessas instruções.
Instale o Android-SDK.
Após a instalação, você terá uma pasta chamada android-sdk em / usr / lib
Crie uma pasta chamada cdmline-tools dentro da pasta android-sdk
Descompacte o arquivo que você acabou de baixar dentro de / usr / lib / android-sdk / cmdline-tools
Vá para o diretório home e edite seu perfil.
Crie uma variável ANDROID_SDK_ROOT
Coloque a pasta sdkmanager no seu caminho
Atualizar seu perfil
Corre
Você deve ver a versão impressa no seu terminal.
fonte
Encontrei a solução para usar as mais recentes ferramentas de linha de comando, seguindo estas etapas:
1 - Extraindo as ferramentas de linha de comando em uma pasta com esta estrutura: por exemplo:
$HOME/Development/android/cmdline-tools/latest
(essa pasta deve conter lib , bin , notice.txt e source.properties )2 - Definindo ANDROID_HOME como uma variável de ambiente:
3 - Carregar no PATH :
fonte
cmdline-tools
é um deve ter, no entanto,latest
não é necessário.Eu gostaria de compartilhar minha experiência.
No começo, tento explicar por que a estrutura de diretórios tem que parecer da maneira mostrada nesta resposta - https://stackoverflow.com/a/60460681/1758733 . https://stackoverflow.com/users/668455/tristan pediu explicações várias vezes, então espero esclarecer a situação com a próxima experiência:
Pode-se encontrar outro problema - Preso em ".android / repositories.cfg não pôde ser carregado."
Outras questões e fatos:
Para resumir a seguinte receita para desenvolvimento com Qt pode ser composta:
fonte
Esta página da documentação do Unity 2018 também tem uma boa explicação para resolver esse problema, incluindo pontos como:
https://docs.unity3d.com/2018.4/Documentation/Manual/android-sdksetup.html
fonte
Isso aconteceu comigo ao baixar as ferramentas de linha de comando independentes (
commandlinetools-mac-6200805_latest
) em um novo Mac.Com base em todas as respostas aqui, consegui fazê-lo funcionar assim
Os documentos para a
--sdk_root
opção dizem "Use a raiz do SDK especificada em vez do SDK que contém esta ferramenta ". Isso me fez pensar que, apesar de ser enviada de forma independente, a ferramenta espera fazer parte de um pacote em que o SDK também está instalado.fonte
O primeiro requisito para instalar o SDK (Qualquer método) é instalar Java e definir o caminho JAVA_HOME .
Em seguida, as ferramentas de linha de comando do SDK precisam do caminho de instalação sem o qual ele lança NullPointerException.
Para superar isso, basta passar o caminho em que você deseja instalar o SDK com o argumento "--sdk_root"
. sdkmanager.bat "platform-tools" "plataformas; android-" --sdk_root =
fonte