명령 행에 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 tools
및 build 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의 명령 줄 버전이 있음을 주목할 가치가 있습니다.
- bin 폴더 안에있을 때 Shift 키를 누른 상태에서 마우스 오른쪽 단추를 클릭 한 후 여기에서 명령 행 열기를 선택하십시오. Shift + 오른쪽 클릭 >> >> 명령 행 열기를여십시오.
- 명령 행이 열리면
sdkmanager
click enter를 입력하십시오. - 그런 다음 유형
sdkmanager
(공백), 이중 하이픈 (--
), 유형 목록sdkmanager --list
(SDK 관리자의 모든 패키지를 나열)을 실행하십시오. - 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 버그 추적기에는이 두 지점에 대한 기능 요청이 이미 있습니다. 그들에게 투표 해주세요. 이렇게하면 언젠가 일어날 수 있습니다.
- https://code.google.com/p/android/issues/detail?id=78765
- https://code.google.com/p/android/issues/detail?id=58337
나는 이것을 모두 업데이트하려고 시도했지만 효과가 있었다!
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 플랫폼 도구의 모든 최신 릴리스를 업데이트하고 설치합니다.
그것은 나를 위해 일합니다.
'Programing' 카테고리의 다른 글
"읽기 전용"속성을 추가하는 방법 (0) | 2020.03.21 |
---|---|
Jupyter Notebook에 Conda 환경이 표시되지 않음 (0) | 2020.03.21 |
바닥 글 바닥 글 플러시, 트위터 부트 스트랩 (0) | 2020.03.21 |
node.js에서 로컬 IP 주소 가져 오기 (0) | 2020.03.21 |
전자 : jQuery가 정의되지 않았습니다 (0) | 2020.03.20 |