Programing

명령 행에 Android SDK 빌드 도구를 설치하는 방법은 무엇입니까?

lottogame 2020. 3. 21. 10:08
반응형

명령 행에 Android SDK 빌드 도구를 설치하는 방법은 무엇입니까?


명령 줄에서 Android dev 환경을 설정하고 다음과 같은 문제가 발생합니다.

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz

파일을 추출한 후 다음을 실행하십시오.

tools/android update sdk --no-ui

그러나 실행 속도가 너무 느립니다.

Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml

결과는 폴더 빌드 도구에 아무것도 없으며 개미없이 명령 줄에서 apk를 빌드하기 때문에 aapt 및 apkbuilder입니다.


기본적으로 명령 행의 SDK 관리자는 목록에 빌드 도구를 포함하지 않습니다. 그들은 "오래된"카테고리에 있습니다. 사용 가능한 모든 다운로드를 보려면

android list sdk --all

그런 다음 명령 행에서 해당 목록의 패키지 중 하나를 가져 오려면 다음을 사용하십시오.

android update sdk -u -a -t <package no.>

-u는 --no-ui, -a는 --all, -t는 --filter를 나타냅니다.

여러 패키지를 설치해야하는 경우 다음을 수행하십시오.

안드로이드 업데이트 SDK -u -a -t 1,2,3,4, .., n 

여기서 1,2, .., n은 위의 list 명령으로 나열된 패키지 번호입니다.


다른 답변에서 언급했듯이 --filter옵션을 사용 하여 설치된 패키지를 제한 할 수 있습니다 .

android update sdk --filter ...

다른 답변에서는 필터 옵션에 대해 인덱스 대신 변경되는 상수 문자열 식별자를 사용할 수 있다고 언급하지 않았습니다. 이것은 무인 또는 스크립트 설치에 도움이됩니다. --filter선택권을 위한 남자 :

... 'list sdk --extended'에 의해 반환 된 식별자도 허용합니다.

android list sdk --all --extended :

Packages available for installation or update: 97
----------
id: 1 or "tools"
     Type: Tool
     Desc: Android SDK Tools, revision 22.6.2
----------
id: 2 or "platform-tools"
     Type: PlatformTool
     Desc: Android SDK Platform-tools, revision 19.0.1
----------
id: 3 or "build-tools-19.0.3"
     Type: BuildTool
     Desc: Android SDK Build-tools, revision 19.0.3

그런 다음 문자열 ID를 필터 옵션으로 사용하여 원하는 버전을 정확하게 지정할 수 있습니다.

android update sdk --filter tools,platform-tools,build-tools-19.0.3 기타


Android SDK Tools패키지 버전 25.2.3 이상 에는 새로운 도구 인 sdkmanager 가 포함되어 있어 명령 줄에서 빌드 도구를 설치하는이 작업을 단순화합니다.
그것은에 위치한 android_sdk/tools/bin폴더에 있습니다.

사용법 ( 문서에서 ) :

sdkmanager packages [options]

packages인수는 (예를 들어, 따옴표로 싸서 SDK 스타일의 경로입니다 "build-tools;25.0.0"또는 "platforms;android-25"). 공백으로 구분 된 여러 패키지 경로를 전달할 수 있지만 각각 고유 한 따옴표로 묶어야합니다.

사용 예 (내 Mac) :

alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/   
alex@mbpro:~/sdk/tools/bin$ ./sdkmanager "build-tools;25.0.2"  
done   
alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/ 25.0.2/

예를 들어 모든 연결에서 HTTP ( )를 사용하도록하거나 프록시 서버 ( ) 를 사용하기 위해 다양한 옵션 을 지정할 수도 있습니다 .--no_https--proxy_host=address--proxy_port=port

사용 가능한 옵션을 확인하려면 --help플래그를 사용하십시오 . 내 컴퓨터 (Mac)에서 출력은 다음과 같습니다.

alex@mbpro:~/sdk/tools/bin$ ./sdkmanager --help
Usage: 
  sdkmanager [--uninstall] [<common args>] \
    [--package_file <package-file>] [<packages>...]
  sdkmanager --update [<common args>]
  sdkmanager --list [<common args>]

In its first form, installs, or uninstalls, or updates packages.
    <package> is a sdk-style path (e.g. "build-tools;23.0.0" or 
             "platforms;android-23").
    <package-file> is a text file where each line is a sdk-style path
                   of a package to install or uninstall.
    Multiple --package_file arguments may be specified in combination
     with explicit paths.
In its second form (with --update), currently installed packages are
    updated to the latest version.
In its third form, all installed and available packages are printed out.

Common Arguments:
    --sdk_root=<sdkRootPath>: Use the specified SDK root instead of the SDK containing this tool
    --channel=<channelId>: Include packages in channels up to <channelId>.
                           Common channels are:
                           0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary).

    --include_obsolete: With --list, show obsolete packages in the
                        package listing. With --update, update obsolete
                        packages as well as non-obsolete.
    --no_https: Force all connections to use http rather than https.
    --proxy=<http | socks>: Connect via a proxy of the given type.
    --proxy_host=<IP or DNS address>: IP or DNS address of the proxy to use.
    --proxy_port=<port #>: Proxy port to connect to.

* If the env var REPO_OS_OVERRIDE is set to "windows",
  "macosx", or "linux", packages will be downloaded for that OS.

android update sdk --no-ui 명령으로 ADB Build-Tools가 자동으로 다운로드되지 않습니다

따라서 콘솔에서 Buil-Tool 유형을 설치하려면 다음을 수행하십시오.

android list sdk --all

항목 앞에 나열된 번호를 기억하고 다음을 실행하십시오.

android update sdk -u --all --filter <number>

명령은 / YourFolder / android-sdk-linux / tools에 입력해야합니다

또한 원격 폴더 (예 : ssh로 열린 서버)의 경우 다음을 입력하십시오.

**./android** list sdk --all
**./android** update sdk -u --all --filter <number>

터미널에서 ADB 패키지 유형의 간단한 목록을 보려면 :

android list sdk

모든 패키지 설치 :

android update sdk --no-ui

또는 필터 사용 (쉼표는 구분 기호) :

android update sdk --no-ui --filter 3,5,8,14

커맨드 라인에서 Android SDK와 관련된 모든 것을 설치하려고 할 때 얻은 많은 정보 소스 가이 Dockerfile이었습니다. Dockerfile 내부는 저자가 설치 한 명령을 실행하는 것을 볼 수 있습니다 platform toolsbuild tools다른 상호 작용없이합니다. OP가 제시된 경우 명령은 다음과 같이 조정됩니다.

echo y | $ANDROID_HOME/tools/android update sdk --all --filter build-tools-21.1.0 --no-ui

방금 명령 줄을 통해 안드로이드 SDK 종속성을 설치하는 데 많은 시간을 보냈으며 도구와 온라인과 함께 제공되는 문서가 너무 부족하기 때문에 여기서 발견 한 것을 게시 할 것이라고 생각했습니다.

에 협력하고 android sdk r24.4.1있습니다 linux. 사용 가능한 패키지를 나열하기 위해 실행할 수있는 두 가지 명령이 있습니다.

android list sdk

그리고 더 철저한 :

android list sdk --all

특정 패키지의 패키지 번호는 위의 각 명령마다 다릅니다! 예를 들어, 전자는 패키지 API 23.1 revision 3로 패키지 #3를 나열하고 후자는 패키지 나열합니다 #29.

이제 android 명령을 사용하여 설치하는 두 가지 방법이 있습니다.

tools/android update sdk --no-ui --filter <package number>

tools/android update sdk -u -a -t <package number>

설치 명령이 각각 패키지 번호를 매개 변수로 사용할 수 있다고 가정하면 어떤 패키지 번호를 사용합니까? 많은 온라인 검색 및 시행 착오 끝에

android update sdk --no-ui --filter 패키지 번호를 사용합니다. android list sdk

android update sdk -u -a -t 패키지 번호를 사용합니다. android list sdk --all

즉, 설치하려면 API 23.1 revision 3다음 중 하나를 수행하십시오.

android update sdk --no-ui --filter 3

또는

android update sdk -u -a -t 29

미쳤지 만 작동합니다.


대부분의 답변은 수퍼 유저 권한이없는 헤드리스 환경에서 업데이트를 실행해야한다는 사실을 무시하는 것 같습니다. 즉, 스크립트가 모든 y/n라이센스 프롬프트에 자동으로 응답해야합니다 .

트릭을 수행하는 예는 다음과 같습니다.

FILTER=tool,platform,android-20,build-tools-20.0.0,android-19,android-19.0.1

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | android update sdk --no-ui --all \
    --filter ${FILTER}

아무리 많은 프롬프트가 표시 되더라도 모든 응답이 응답됩니다. while/sleep루프는 yes 명령의 시뮬레이션처럼 보이며 실제로는 거의 비슷 합니다. 문제 yes는 그것이 stdout을 범람 'y'시키고 그 문자를 보내는 것 사이에 사실상 지연이 없으며 내가 처리 해야하는 버전에는 어떤 종류의 타임 아웃 옵션도 없다는 것입니다. stdout을 "pollute"하고 스크립트가 잘못된 입력에 대해 불평하지 않습니다. 해결책은 'y'stdout으로 전송 하는 것 사이에 지연을 두는 while/sleep입니다. 이것이 바로 콤보입니다.

expect 일부 Linux 배포판에서 기본적으로 사용할 수 없으며 CI 스크립트의 일부로 설치 할 수있는 방법이 없었으므로 가장 일반적인 솔루션을 사용해야했으며 간단한 bash 스크립트보다 더 일반적인 것은 없습니다.

사실, 나는 그것에 대해 블로그를 만들었 습니다 ( NSBogan ), 자세한 내용은 여기를 확인하십시오.


당신이 경우 sdkmanager설치 (I는 MAC을 사용하고 있습니다)

sdkmanager --list사용 가능한 패키지를 나열하기 위해 실행 합니다.

빌드 도구를 설치하려면 사용 가능한 패키지 목록에서 선호하는 버전을 복사하십시오.

기본 버전을 설치하려면

sdkmanager "build-tools;27.0.3"

그러나 실행 속도가 너무 느립니다.

예, 같은 문제가 있습니다. 일부 파일 다운로드 속도가 매우 느리거나 적어도 지난 며칠이 지났습니다. 모든 것을 다운로드하려면 그에 대해 할 수있는 일이 많지 않습니다.

결과는 폴더 빌드 도구에 아무것도 없으며 개미없이 명령 줄에서 apk를 빌드하기 때문에 aapt 및 apkbuilder입니다.

당신은 완료까지 실행 했습니까?

-t스위치를 사용하여 다운로드중인 패키지를 필터링하면됩니다 .

예를 들면 다음과 같습니다.

tools/android update sdk --no-ui -t platform-tool

다른 날 이것을 시도했을 때 버전 18.0.0의 빌드 도구가 설치되었습니다. 어떤 이유로 최신 버전 18.0.1이이 필터에 포함되어 있지 않으며이를 얻는 유일한 방법은 --all스위치로 모든 것을 설치하는 것입니다 .


종속성을 설치하는 스크립트를 선호합니다

다음과 같은 것 :

#!/usr/bin/env bash
#
# Install JUST the required dependencies for the project.
# May be used for ci or other team members.
#

for I in android-25 \
         build-tools-25.0.2  \
         tool \
         extra-android-m2repository \
         extra-android-support \
         extra-google-google_play_services \
         extra-google-m2repository;

 do echo y | android update sdk --no-ui --all --filter $I ; done

https://github.com/caipivara/android-scripts/blob/master/install-android-dependencies.sh


방금이 문제가 있었기 때문에 마침내 실행 가능한 도구 목록을 읽고 파싱하여 1 줄 bash 더러운 솔루션을 작성했습니다.

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')

@ i4niac & @ Aurélien Lambert의 답변에서 영감을 얻은 이것은 내가 생각해 낸 것입니다.

csv_update_numbers=$(./android list sdk --all | grep 'Android SDK Build-tools' | grep -v 'Obsolete' | sed 's/\(.*\)\- A.*/\1/'|sed '/^$/d'|sed -e 's/^[ \t]*//'| tr '\n' ',')
csv_update_numbers_without_trailing_comma=${csv_update_numbers%?}

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | ./android update sdk --all -u -t $csv_update_numbers_without_trailing_comma

설명

  • android list sdk --all명령 의 결과로 빌드 도구 패키지의 색인 인 쉼표로 구분 된 숫자 목록을 가져옵니다 (사용되지 않는 패키지 무시).
  • 라이센스를 수락하기 위해 몇 밀리 초마다 터미널에 'y'를 계속 던지십시오.

developer.android.com (현재 Windows OS 용 149mb 파일)에서 Android SDK를 다운로드하십시오. 안드로이드가 sdkmanager GUI를 제거했지만 도구 폴더 안에있는 bin 폴더에 sdkmanager의 명령 줄 버전이 있음을 주목할 가치가 있습니다.

  1. bin 폴더 안에있을 때 Shift 키를 누른 상태에서 마우스 오른쪽 단추를 클릭 한 후 여기에서 명령 행 열기를 선택하십시오. Shift + 오른쪽 클릭 >> >> 명령 행 열기를여십시오.
  2. 명령 행이 열리면 sdkmanagerclick enter를 입력하십시오.
  3. 그런 다음 유형 sdkmanager(공백), 이중 하이픈 ( --), 유형 목록 sdkmanager --list(SDK 관리자의 모든 패키지를 나열)을 실행하십시오.
  4. sdkmanager (공백)를 입력 한 다음 패키지 이름을 입력하고 Enter를 누르십시오. 예 : sdkmanager platform-tools (Enter를 누르십시오) 라이센스 계약을로드합니다. 옵션 사용 (y / n). 수락하려면 y를 입력하면 지정한 패키지가 다운로드됩니다.

자세한 내용은 공식 문서를 참조 하십시오.

이게 도움이 되길 바란다. :)


Nate가 https://stackoverflow.com/a/19416222/1104031 게시물 에서 말한 것처럼 기본적으로 빌드 도구를 자동으로 다운로드 할 수 없습니다 .

그러나 나는 당신을 위해 모든 것을 만드는 작은 도구를 썼습니다

https://stackoverflow.com/a/17863931/1104031 게시물 에서 "expect"도구를 danb로 사용 했습니다. 당신은 안드로이드 SDK를 필요로하고 python27, expect.

이 스크립트는 모든 빌드 도구, 모든 SDK 및 자동화 된 빌드에 필요한 모든 것을 설치합니다.

import subprocess,re,sys

w = subprocess.check_output(["android", "list", "sdk", "--all"])
lines = w.split("\n")
tools = filter(lambda x: "Build-tools" in x, lines)
filters = []
for tool in tools:
  m = re.search("^\s+([0-9]+)-", tool)
  tool_no = m.group(1)
  filters.append(tool_no)

if len(filters) == 0:
  raise Exception("Not found build tools")


filters.extend(['extra', 'platform', 'platform-tool', 'tool'])

filter = ",".join(filters)

expect= '''set timeout -1;
spawn android update sdk --no-ui --all --filter %s;
expect {
  "Do you accept the license" { exp_send "y\\r" ; exp_continue }
  eof
}''' % (filter)

print expect

ret = subprocess.call(["expect", "-c", expect])
sys.exit(ret)

다른 응답에서 언급했듯이 빌드 도구에는 --all플래그를 설치 해야합니다 . 또한 -t모든 패키지를 설치하지 않으려면 필터 플래그를 사용하는 것이 좋지만 모든 빌드 도구를 필터링하는 방법은 없습니다.

AOSP 버그 추적기에는이 두 지점에 대한 기능 요청이 이미 있습니다. 그들에게 투표 해주세요. 이렇게하면 언젠가 일어날 수 있습니다.


나는 이것을 모두 업데이트하려고 시도했지만 효과가 있었다!

echo y | $ANDROID_HOME/tools/android update sdk --no-ui

시험

1. 모든 패키지 목록

android list sdk --all

2. 다음 명령을 사용하여 패키지를 설치

android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 

안드로이드 업데이트 SDK

이 명령은 SDK 도구, 빌드 도구, SDK 플랫폼 도구의 모든 최신 릴리스를 업데이트하고 설치합니다.

그것은 나를 위해 일합니다.

참고 URL : https://stackoverflow.com/questions/17963508/how-to-install-android-sdk-build-tools-on-the-command-line

반응형