[android] 명령 행에 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 ), 관심이 있으시 다면 여기에서 자세한 내용을 확인하십시오.