Şimdi Android SDK ve AVD Manager'ı indirip yüklemem ve ardından API'leri, araçları UI aracılığıyla yüklemem gerekiyor. Bu işlemi otomatikleştirmenin bir yolu var mı?
Şimdi Android SDK ve AVD Manager'ı indirip yüklemem ve ardından API'leri, araçları UI aracılığıyla yüklemem gerekiyor. Bu işlemi otomatikleştirmenin bir yolu var mı?
Yanıtlar:
En son sürümler sdkmanager
, Android SDK için paketleri görüntülemenize, yüklemenize, güncellemenize ve kaldırmanıza izin veren bir komut satırı aracı sunar.
sdkmanager
Aracı Android SDK Tool paketi (sağlanır 25.2.3 ve üstü ) ve yer almaktadır 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.
yani, paketleri çalıştırmak için çalıştırın
$ sdkmanager --update
lisansları kabul etmek
$ yes | sdkmanager --licenses
(Lütfen dikkat: android komutu kullanımdan kaldırıldı!)
Otomasyona ne kadar yakın olursanız muhtemelen:
$ android update sdk --no-ui
android otomatik güncellemeler için şu seçenekleri sunar:
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
Kurulum için hangi paketlerin mevcut olduğunu listelemek isterseniz,
$ android list sdk
ve sıralı bir paket listesi elde edersiniz, örneğin
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
Ayrıca, --filter
seçeneği kullanıyorsanız güncellemeyi yalnızca istenen bir bileşenle sınırlayabilirsiniz.
$ android update sdk --filter <component> --no-ui
burada bileşen bir veya daha fazla
android list sdk
(yani 1 , paket dizini olarak da bilinir )veya bir veya daha fazla spesifik tanımlayıcı olabilir. Örneğin, yalnızca küçük bir paket kümesi indirmek istiyorsanız, bunu yapabilirsiniz:
$ android update sdk -u --filter platform-tools,android-16,extra-android-support
ve sadece platform araçları, api seviye 16 ve destek paketi kavanozunu alacaksınız. Bu, yalnızca bir yapı makinesi oluşturuyorsanız ve asla kullanmayacağınız tüm ekstra şeyleri indirmek için ödemek zorunda kalırsanız gerçekten kullanışlıdır.
Kullanılabilir seçenekleri görmek için --help kullanabilirsiniz, örneğin
$ 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'
veya gibi saçma sapan hatalar aldığını unutmayın Error: Ignoring unknown package filter 'android-17'
.
--accept-license
bayrak ekleyecektir . Bu arada yapabilirsinizecho "y" | android update sdk --no--ui
Bu benim için işe yaramadı ...
echo "y" | android ....
bu yüzden buraya geldim:
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
}
'
Ben travis-ci sdk yüklemek ve güncellemek için kullanın
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
Tüm lisansları 'y' ile cevaplamak için bunu komut dosyasında deneyebilirsiniz:
(while :
do
echo 'y'
sleep 2
done) | android update sdk -u .....
Hala tüm Android paketlerini indirmek için bir yöntem arayan biri için, bunu yapmak için bir komut dosyası yazdım. Kullanılmayan tüm paketleri indirecektir .
#!/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
Bunu Github deposumda da görebilirsiniz
İyi:
expect
.Dezavantajları:
android
yolunuza koymanız gerekir.Daha yeni android sürümlerinde (örneğin 25.2.5
) sdkmanager kullanmalıyız ( android
komut yerine )
Paket kurma örneği:
android-sdk/tools/bin/sdkmanager "extras;android;m2repository"
Mevcut tüm paketlerin bir listesini alma komutu:
android-sdk/tools/bin/sdkmanager --verbose --list
Bu web sayfasında SDK araçları için indirme bağlantıları listelenmektedir:
İşte bir Docker görüntüsünde android yükleyebilen açık kaynaklı bir havuz docker-android bağlantısı .
Yanıtları bu SO Sorusunda da bulabilirsiniz : Tüm SDK lisanslarını otomatik olarak yararlı kabul edin .
Gradle sürüm 2.2.0 için Android Plugin ile başlayarak , eksik SDK bileşenleri otomatik olarak indirilir .
SDK'yı indiren ve yükleyebilen bir yakut komut dosyası hazırladım, bu da yardımcı olabilir. https://github.com/ayvazj/andenv
Sadece gerekli olan, olmayan, eski, kaynak, emülatör-görüntü, doc} paketlerini indirmek için başka bir komut dosyası:
#!/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
Bazı bölümler bu konudaki diğer cevaplardan alınmıştır.
Otomatikleştirmek için sdkmanager.bat --licenses
Windows üzerinde istemi away (eğer inşa altyapı için otomasyon yoluyla yüklüyoruz ki) ... Do it yayınlanmaz. İçine nasıl boru koyacağınızı anlamaya çalışırken zaman kaybetmeyin y
. Denedim; dışlama başarısız.
Aksine - bir kez, kendiniz çalıştırın ve içine dosya oluşturduğunu unutmayın c:\android\android-sdk\licenses
(çalıştığınız yerde c:\android\android-sdk\tools\bin\sdkmanager.bat
- yükleme kökünüz değişebilir).
Bu dosyaları alın ve otomatik kurulum komut dosyalarınızda alabileceğiniz bir yere yerleştirin. Şahsen, benim zehirim ansible, bu yüzden:
# 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"}
...
Bununla da sinirli oldum com.quittle.setup-android-sdk
ve ihtiyacınız olanı tespit edip yükleyecek bir Gradle eklentisi oluşturdum. Windows, OSX ve Linux'ta çalışır ve Gradle ile oluşturursanız ek bağımlılıklar gerektirmez.
İlgileniyorsanız, dokümanlarımı buradan kontrol edebilirsiniz: https://github.com/quittle/gradle-setup-android-sdk
Yeni bir Android geliştiricisi, ancak deneyimli bir Java geliştiricisi için, yukarıdaki kabusların hepsini geçerseniz, HANGİ bağımlılıkları bilmek gerçekten şaşırtıcıdır. Madenin Meslektaş esaslı :-) Intellij olan Android Studio (kullanmak için bana tavsiye özellikleyukarıdaki kabuslar yüzünden. Onun tavsiyelerine uydum. Ancak yükleme için varsayılanları kabul etmedim ve bir yazılım sürücüsüne yüklemeye çalıştım. Bir kabus olduğu ortaya çıktı. SDK diyalogu asılmış gibiydi ve sezgisel değildi. Bu yüzden buraya geldim. Yukarıdakileri okuduktan sonra Studio'ya başka bir deneme yaptım ve bu sefer TÜM varsayılanları kabul etti. Hey PRESTO ... Ctl-Shift-S ve SKD sorulmadan birkaç diyalogda tüm SDK bağımlılıklarını (tahmin ettiğim temel bağımlılıkları) halletti. Bu nedenle bir acemi için tavsiye ederim. İşte pudingin indirildiği kanıtı:
İndirdiğim ve yüklediğim sudio sürümü: Windows sürümü: Ve burada iyi şeyler yaptıktan sonra:
İçtenlikle sizin için çalışıyor umut !!