[android] Android 명령 줄 도구 sdkmanager는 항상 다음을 표시합니다. 경고 : 설정을 만들 수 없습니다

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 명령 줄 도구를 설치하는 데 어려움을 겪는 사람들을 위해 다음과 같이하십시오.

  1. Android에서 최신 명령 줄 도구를 다운로드하십시오 (예 : commandlinetools-win-6200805_latest.zip).
  2. 다운로드 한 파일의 압축을 풉니 다
  3. 다음 경로를 포함하여 디스크 어딘가에 명령 줄 도구를 저장할 디렉토리를 만듭니다. android / cmdline-tools / latest 기본적으로이 Cmd 줄 도구의 압축을 풀 때 도구 디렉토리의 이름 을 최신으로 바꾸고 최신 폴더를 android / cmdline 에 넣었는지 확인하십시오. 디스크의 어딘가에 -tools 디렉토리
  4. C : \ YourLocationWhereYouStoreTheDirectory \ android \ cmdline-tools \ latest 와 같이 cmdline 도구 디렉토리 위치를 저장하는 디렉토리에 대해 ANDROID_HOME 환경 변수를
    작성하십시오 .
  5. % 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-toolscmdline-tools형제 자매, 부모 내부의 모든 앉아 있습니다 ANDROID_HOME.

간단한 방법으로 살펴 보겠습니다.

  • 원하는대로 설정하십시오 ANDROID_HOME(이전과 동일)
  • 다운로드 및 압축 해제 commandlinetools이 라는 디렉토리에 zip 파일을 cmdline-tools내부입니다,ANDROID_HOME
  • 시스템이 찾을 위치를 알 수 있도록 디렉토리 $ANDROID_HOME/cmdline-tools/tools/bin를 환경 변수에 추가하십시오.PATHsdkmanager

답변

같은 문제가있어서 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를 사용한다고 가정하므로 그렇지 않은 경우 해당 지침 중 일부를 수정해야합니다.

  1. Android-SDK를 설치하십시오.

    sudo apt install android-sdk

    설치 후 / usr / lib에 android-sdk라는 폴더가 생깁니다.

  2. android-sdk 폴더 안에 cdmline-tools라는 폴더를 만듭니다

    sudo mkdir /usr/lib/android-sdk/cmdline-tools
  3. 여기에서 Android 명령 행 도구 zip을 다운로드하십시오 ( https://developer.android.com/studio?hl=ko-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. 운영

    sdkmanager --version

터미널에 버전이 인쇄되어 있어야합니다.


답변

다음 단계에 따라 최신 명령 줄 도구를 사용하는 솔루션을 찾았습니다.

1-명령 행 도구를 다음 구조의 폴더로 추출 : 예 : $HOME/Development/android/cmdline-tools/latest
(이 폴더에는 lib , bin , notice.txtsource.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"