이제 Android SDK 및 AVD Manager를 다운로드하여 설치 한 다음 UI를 통해 API, 도구를 설치해야합니다. 이 프로세스를 자동화하는 방법이 있습니까?
이제 Android SDK 및 AVD Manager를 다운로드하여 설치 한 다음 UI를 통해 API, 도구를 설치해야합니다. 이 프로세스를 자동화하는 방법이 있습니까?
답변:
최신 버전에서는 sdkmanager
Android SDK 용 패키지를보고, 설치하고, 업데이트하고, 제거 할 수있는 명령 줄 도구 인을 도입했습니다 .
이 sdkmanager
도구는 Android SDK 도구 패키지 ( 25.2.3 이상 )에서 제공되며에 있습니다 android_sdk/tools/bin/
.
sdkmanager [--uninstall] [<common args>] [--package_file <file>] [<packages>...]
sdkmanager --update [<common args>]
sdkmanager --list [<common args>]
sdkmanager --licenses [<common args>]
In its first form, installs, or uninstalls, or updates packages.
By default, the listed packages are installed or (if already installed)
updated to the latest version.
--uninstall: uninstalled listed 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), all installed packages are
updated to the latest version.
In its third form, all installed and available packages are printed
out.
In its fourth form (with --licenses), show and offer the option to
accept licenses for all available packages that have not already been
accepted.
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.
따라서 패키지 실행을 업데이트하려면
$ sdkmanager --update
라이센스에 동의
$ yes | sdkmanager --licenses
(참고 : android 명령은 더 이상 사용되지 않습니다!)
자동화에 더 가까이 다가 갈 수있는 것은 다음과 같습니다.
$ android update sdk --no-ui
android는 자동 업데이트를 위해 다음 옵션을 제공합니다.
Action "update sdk":
Updates the SDK by suggesting new platforms to install if available.
Options:
-f --force Forces replacement of a package or its parts, even if something has been modified
-u --no-ui Updates from command-line (does not display the GUI)
-o --obsolete Installs obsolete packages
-t --filter A filter that limits the update to the specified types of packages in the form of
a comma-separated list of [platform, tool, platform-tool, doc, sample, extra]
-s --no-https Uses HTTP instead of HTTPS (the default) for downloads
-n --dry-mode Simulates the update but does not download or install anything
설치할 수있는 패키지를 나열하려면 다음을 사용할 수 있습니다.
$ android list sdk
예를 들어 순서가 지정된 패키지 목록을 얻을 수 있습니다.
Packages available for installation or update: 9
1- ARM EABI v7a System Image, Android API 15, revision 2
2- Intel x86 Atom System Image, Android API 15, revision 1
3- Android Support, revision 8
4- Google AdMob Ads SDK, revision 6
5- Google Analytics SDK, revision 2
6- Google Play APK Expansion Library, revision 1
7- Google Play Billing Library, revision 2
8- Google Play Licensing Library, revision 2
9- Google Web Driver, revision 2
또한 --filter
옵션 을 사용하는 경우 원하는 구성 요소로만 업데이트를 제한 할 수 있습니다
$ android update sdk --filter <component> --no-ui
여기서 component는 하나 이상
android list sdk
(예 : 1 , 패키지 인덱스 라고도 함 )또는 하나 이상의 특정 식별자 일 수 있습니다. 예를 들어, 작은 특정 패키지 세트 만 다운로드하려는 경우 다음을 수행 할 수 있습니다.
$ android update sdk -u --filter platform-tools,android-16,extra-android-support
플랫폼 도구, API 레벨 16 및 패키지 항아리를 얻을 수 있습니다. 이것은 빌드 머신 만 빌드하고 절대 사용하지 않을 추가 자료를 모두 다운로드해야하는 경우에 매우 유용합니다.
사용 가능한 옵션을 보려면 --help를 사용하십시오 (예 :
$ android --help list sdk
Usage:
android [global options] list sdk [action options]
Global options:
-h --help : Help on a specific command.
-v --verbose : Verbose mode, shows errors, warnings and all messages.
--clear-cache: Clear the SDK Manager repository manifest cache.
-s --silent : Silent mode, shows errors only.
Action "list sdk":
Lists remote SDK repository.
Options:
-o --obsolete : Deprecated. Please use --all instead.
-a --all : Lists all available packages (including obsolete and
installed ones)
--proxy-host: HTTP/HTTPS proxy host (overrides settings if defined)
--proxy-port: HTTP/HTTPS proxy port (overrides settings if defined)
-s --no-https : Uses HTTP instead of HTTPS (the default) for downloads.
-e --extended : Displays extended details on each package
-u --no-ui : Displays list result on console (no GUI) [Default: true]
Error: Ignoring unknown package filter 'tools'
또는 Error: Ignoring unknown package filter 'android-17'
.
--accept-license
플래그 를 추가합니다 . 한편 당신은 할 수 있습니다echo "y" | android update sdk --no--ui
이것은 나를 위해 작동하지 않았다 ...
echo "y" | android ....
그래서 나는 여기서 끝났습니다.
expect -c '
set timeout -1 ;
spawn sudo /opt/android-sdk/tools/android update sdk -u;
expect {
"Do you accept the license" { exp_send "y\r" ; exp_continue }
eof
}
'
travis-ci에 SDK를 설치하고 업데이트하는 데 사용합니다.
curl --location http://dl.google.com/android/android-sdk_r22.3-linux.tgz | tar -x -z -C $HOME
export ANDROID_HOME=$HOME/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --filter platform-tool,android-19,sysimg-19,build-tools-19.0.1
여전히 모든 안드로이드 패키지를 다운로드하는 방법을 찾고있는 사람이라면 스크립트를 작성했습니다. 사용되지 않는 모든 패키지를 다운로드 합니다.
#!/binbash
# Install all non-obsolete android sdk packages.
# author: Tai Le Tien (letientai299 at gmail.com)
function install_sdk {
android update sdk -u -s -a -t "$1"
}
function fetch_non_obsoled_package_indices {
# Fetch the sdk list using non-https connections
android list sdk -u -s -a |\
# Filter obsoleted packages
sed '/\(Obsolete\)/d' |\
# Filter to take only the index number of package
sed 's/^[ ]*\([0-9]*\).*/\1/' |\
# Remove the empty lines
sed -n 's/^[^ $]/\0/p'
}
for package_index in $(fetch_non_obsoled_package_indices)
do
echo "====================================================================="
echo "Start to install package: ${package_index}"
echo "====================================================================="
# Auto accept license
echo -e "y" | install_sdk "${package_index}"
echo
echo
done
내 Github 저장소 에서 볼 수도 있습니다.
좋은 점 :
expect
.단점 :
android
경로에 넣어야 합니다.최신 안드로이드 버전 (예 :) 에서는 명령 대신 sdkmanager를25.2.5
사용해야합니다android
패키지 설치 예 :
android-sdk/tools/bin/sdkmanager "extras;android;m2repository"
사용 가능한 모든 패키지 목록을 가져 오는 명령 :
android-sdk/tools/bin/sdkmanager --verbose --list
이 웹 페이지 에는 SDK 도구의 다운로드 링크가 나열되어 있습니다.
다음은 Docker 이미지에 android를 설치할 수 있는 오픈 소스 저장소 docker-android에 대한 링크 입니다.
이 SO 질문 : 모든 SDK 라이센스 자동 수락에 유용한 답변을 찾을 수도 있습니다 .
Gradle 버전 2.2.0 용 Android 플러그인 부터 누락 된 SDK 구성 요소 가 자동으로 다운로드됩니다 .
도움이 될지도 모르는 SDK를 다운로드하고 설치하는 루비 스크립트를 작성했습니다. https://github.com/ayvazj/andenv
또 다른 스크립트는 필수가 아닌 {obsolute, source, emulator-image, doc} 패키지 만 다운로드합니다.
#!/bin/bash
set -e
# cd into where tools/android can be found
if [[ -d "$ANDROID_HOME" ]]; then
cd "$ANDROID_HOME"
elif [[ -x "$(dirname "$0")/tools/android" ]]; then
cd "$(dirname "$0")"
else
echo "FAILED: Cannot find ANDROID_HOME/tools/android"
exit 1
fi
android () {
"$(dirname $0)/tools/android" "$@"
}
needed_packages () {
android list sdk -u -s -e \
| grep '^id:' \
| cut -d'"' -f2 \
| grep -v 'source' \
| grep -v 'sys-img' \
| grep -v 'doc' \
| paste -d, -s -
}
main () {
(while : ; do
echo 'y'
sleep 1
done) | android update sdk -u -s -a -t "$(needed_packages)"
}
main
이 부분의 다른 답변에서 일부 부품을 가져옵니다.
sdkmanager.bat --licenses
Windows 에서 프롬프트 를 자동화하려면 (빌드 인프라 자동화를 통해 설치하는 경우) ... 실행하지 마십시오. 배관 방법을 알아내는 데 시간을 낭비하지 마십시오 y
. 나는 시도했다; 실패 실패.
오히려-스스로 한 번 실행하고 파일을 생성한다는 점에 유의하십시오 c:\android\android-sdk\licenses
(실행중인 위치 c:\android\android-sdk\tools\bin\sdkmanager.bat
-설치 루트가 다를 수 있음).
해당 파일을 가져 와서 자동 설정 스크립트에서 가져올 수있는 위치에 배치하십시오. 개인적으로 ansible은 내 독약이므로
# Note to future-us:
# These are magical files generated by running `c:/android/android-sdk/tools/bin/sdkmanager.bat --licenses`
# This, delightfully, is interactive, and wants to _actually_ read the keyboard buffer.
# That's reputedly possible via SendKeys. I elected to not try that.
# So, instead:
# 1) remote to an instance like a cave-dweller
# 2) run `c:/android/android-sdk/tools/bin/sdkmanager.bat --licenses` in a prompt.
# 3) _actually type_ `y` however many godforsaken times you need to.
# 4) meticulously harvest `c:/android/android-sdk/licenses/*` to this task.
# (you don't need the newline that they thoughtfully put before the hash in each file).
- name: set up android licenses by hand
win_lineinfile:
path: c:/android/android-sdk/licenses/{{ item.name }}
line: "{{ item.line }}"
create: true
with_items:
- {name: "android-googletv-license", line: "SOME HASH"}
- {name: "android-sdk-license", line: "SOME OTHER HASH"}
...
나는 이것으로도 좌절했고 com.quittle.setup-android-sdk
필요한 것을 감지하고 설치할 Gradle 플러그인을 만들었습니다 . Windows, OSX 및 Linux에서 작동하며 Gradle로 빌드하는 경우 추가 종속성이 필요하지 않습니다.
관심이 있으시면 여기에서 내 문서를 확인하십시오 : https://github.com/quittle/gradle-setup-android-sdk
초보자 안드로이드 개발자이지만 경험 많은 Java 개발자에게는 위의 악몽을 모두 극복하더라도 WHICH 종속성을 아는 것이 정말 어리 석습니다. 내 동료 기반 :-) 인 IntelliJ 안드로이드 스튜디오 (사용하라고 조언 특별히을위의 악몽 때문에. 나는 그의 충고를 따랐다. 그러나 설치의 기본값을 수락하지 않고 소프트웨어 드라이브에 설치하려고했습니다. 악몽으로 밝혀졌습니다. SDK 대화가 멈추는 것처럼 보였고 전혀 직관적이지 않았습니다. 그렇기 때문에 여기까지 왔습니다. 위의 내용을 읽은 후 Studio에 다른 시도를했으며 이번에는 모든 기본값을 허용합니다. Hey PRESTO는 Ctl-Shift-S와 SKD를 묻지 않고 두 개의 대화에서 모든 SDK 종속성 (내가 추측하고있는 핵심 것)을 처리했습니다. 따라서 초보자에게 권장합니다. 다운로드시 푸딩의 증거는 다음과 같습니다.
내가 다운로드하여 설치 한 sudio 버전 : Windows 버전 : 여기에서 좋은 일을 한 후에 :
진심으로 그것이 당신을 위해 작동 희망!