android의 오래된 sdk-tools 저장소를 더 이상 사용할 수 없으므로 android의 새로운 명령 줄 도구를 사용합니다. 그래서 commandlintools를로드하도록 gitlab-ci를 변경했습니다. 그러나 실행하려고하면 다음 오류가 발생합니다.
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
하면 동일한 오류가 발생합니다. 내 gitlab-ci는 다음과 같습니다.
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
답변
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에 더 이상이 문제가 없습니다. 이 업데이트에는 시간과 대역폭이 필요하므로 해결 방법에 꼭 필요한 것은 아닙니다.
답변
Windows 10 / x64에 Appium 용 Android 명령 줄 도구를 설치하는 데 어려움을 겪는 사람들을 위해 다음과 같이하십시오.
- Android에서 최신 명령 줄 도구를 다운로드하십시오 (예 : commandlinetools-win-6200805_latest.zip).
- 다운로드 한 파일의 압축을 풉니 다
- 다음 경로를 포함하여 디스크 어딘가에 명령 줄 도구를 저장할 디렉토리를 만듭니다. android / cmdline-tools / latest 기본적으로이 Cmd 줄 도구의 압축을 풀 때 도구 디렉토리의 이름 을 최신으로 바꾸고 최신 폴더를 android / cmdline 에 넣었는지 확인하십시오. 디스크의 어딘가에 -tools 디렉토리
- C : \ YourLocationWhereYouStoreTheDirectory \ android \ cmdline-tools \ latest 와 같이 cmdline 도구 디렉토리 위치를 저장하는 디렉토리에 대해 ANDROID_HOME 환경 변수를
작성하십시오 . - % ANDROID_HOME % \ bin 과 같이 경로 환경 변수에 새 항목을 작성하십시오.
답변
Android 개발자 웹 사이트에서 새 cmdline-tools를 다운로드하려면 다음 디렉토리 구조를 준수해야합니다.
답변
--sdk_root
각 단일 명령 실행에 대한 인수 를 전달하는 대신 실제 원인에 대해 자세히 알아 보겠습니다.
에서 시작 안드로이드 SDK 명령 줄 도구 1.0.0 (6200805) 과 달리, 안드로이드 SDK 26.1.1 (4,333,796) 의 tools
디렉토리 계층 구조가 변경되었습니다. 이전에는 바로 안에 배치 ANDROID_HOME
되었지만 이제는 여전히 tools
(다운로드 된 commandlinetools zip 파일의 압축을 푼 후 얻을 수있는 유일한 이름)으로 이름이 지정되어 있지만 다르게는 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 SDK를 업데이트하거나 더 많은 패키지를 설치할 때 다른 패키지는 아래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
(이전과 동일) - 다운로드 및 압축 해제 commandlinetools이 라는 디렉토리에 zip 파일을
cmdline-tools
내부입니다,ANDROID_HOME
- 시스템이 찾을 위치를 알 수 있도록 디렉토리
$ANDROID_HOME/cmdline-tools/tools/bin
를 환경 변수에 추가하십시오.PATH
sdkmanager
답변
같은 문제가있어서 Google이 여기에 왔습니다. AndroidStudio Archive 에 따르면 오늘은 4.1 릴리스였습니다. 우연의 일치가 아니라고 생각합니다.
이 완전히 관련없는 안내서 에는 sdk-tools for linux 의 이전 버전에 대한 하드 링크가 있습니다. 다른 OS의 경우 URL을 Windows 또는 Mac으로 변경할 수 있습니다. 지금은 핫픽스로 사용하겠습니다.
(이것은 해결책이 아닌 의견이어야합니다)
답변
sdkmanager는 ANDROID_SDK_ROOT와 같은 환경 변수를 사용하지 않고 압축이 풀린 위치를 기반으로 android-sdk 경로를 파악하려고 시도합니다. 그러나 cmdline-tools라는 하드 코딩 된 상위 폴더가 있고 다른 이름으로 폴더 내부에서 commandlinetools의 압축을 풀면 작동하지 않아 sdk_root 매개 변수를 사용하여 내부 변수를 올바르게 공급해야합니다.
이를 염두에두고 다음 방법을 사용하여이 문제를 해결할 수 있습니다.
우리는 Ubuntu OS를 사용한다고 가정하므로 그렇지 않은 경우 해당 지침 중 일부를 수정해야합니다.
-
Android-SDK를 설치하십시오.
sudo apt install android-sdk
설치 후 / usr / lib에 android-sdk라는 폴더가 생깁니다.
-
android-sdk 폴더 안에 cdmline-tools라는 폴더를 만듭니다
sudo mkdir /usr/lib/android-sdk/cmdline-tools
- 여기에서 Android 명령 행 도구 zip을 다운로드하십시오 ( https://developer.android.com/studio?hl=ko-419#downloads )
-
/ usr / lib / android-sdk / cmdline-tools에 방금 다운로드 한 파일의 압축을 풉니 다
sudo unzip /path/for/commandlinetools-linux-6200805_latest.zip -d /usr/lib/android-sdk/cmdline-tools
-
홈 디렉토리로 이동하여 .profile을 편집하십시오.
nano .profile
-
ANDROID_SDK_ROOT 변수 생성
export ANDROID_SDK_ROOT=/usr/lib/android-sdk
-
sdkmanager 폴더를 경로에 넣으십시오.
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$PATH
- 저장하고 종료
-
프로필 새로 고침
. ~/.profile
-
운영
sdkmanager --version
터미널에 버전이 인쇄되어 있어야합니다.
답변
다음 단계에 따라 최신 명령 줄 도구를 사용하는 솔루션을 찾았습니다.
1-명령 행 도구를 다음 구조의 폴더로 추출 : 예 : $HOME/Development/android/cmdline-tools/latest
(이 폴더에는 lib , bin , notice.txt 및 source.properties가 있어야합니다 )
2- ANDROID_HOME 을 환경 변수로 정의 :
ANDROID_HOME="$HOME/Development/android/cmdline-tools/latest"
3- PATH에 로드 :
PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/lib:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools"
