अब मुझे एंड्रॉइड एसडीके और एवीडी मैनेजर को डाउनलोड और इंस्टॉल करना होगा, और फिर यूआई के माध्यम से एपीआई, टूल स्थापित करना होगा। क्या इस प्रक्रिया को स्वचालित करने का कोई तरीका है?
अब मुझे एंड्रॉइड एसडीके और एवीडी मैनेजर को डाउनलोड और इंस्टॉल करना होगा, और फिर यूआई के माध्यम से एपीआई, टूल स्थापित करना होगा। क्या इस प्रक्रिया को स्वचालित करने का कोई तरीका है?
जवाबों:
नवीनतम संस्करण पेश करते हैं sdkmanager
, एक कमांड लाइन टूल जो आपको एंड्रॉइड एसडीके के लिए पैकेज देखने, इंस्टॉल करने, अपडेट करने और अनइंस्टॉल करने की अनुमति देता है।
यह sdkmanager
टूल एंड्रॉइड एसडीके टूल्स पैकेज ( 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 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
जहां घटक एक या एक से अधिक है
android list sdk
(यानी 1 , पैकेज इंडेक्स के रूप में भी जानते हैं )या एक या अधिक विशिष्ट पहचानकर्ता हो सकते हैं। उदाहरण के लिए, यदि आप विशिष्ट पैकेज का एक छोटा सा सेट डाउनलोड करना चाहते हैं, तो आप ऐसा कर सकते हैं:
$ android update sdk -u --filter platform-tools,android-16,extra-android-support
और आपको सिर्फ प्लेटफार्म टूल, एपी स्तर 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
}
'
मैं इसे ट्रैविस-सीआई पर 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
'Y' वाले सभी लाइसेंसों का उत्तर देने के लिए, आप इसे स्क्रिप्ट में आज़मा सकते हैं:
(while :
do
echo 'y'
sleep 2
done) | android update sdk -u .....
सभी एंड्रॉइड पैकेजों को डाउनलोड करने के लिए किसी भी विधि को खोजने के लिए, मैंने ऐसा करने के लिए एक स्क्रिप्ट लिखी है। यह सभी गैर-बाधित संकुल डाउनलोड करेगा ।
#!/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
आप इसे मेरे जीथब रेपो पर भी देख सकते हैं
अच्छा:
expect
।चढ़ाव:
android
अपने रास्ते में लाना होगा।नए Android संस्करणों (जैसे 25.2.5
) में हमें sdkmanager (के बजाय ) का उपयोग करना चाहिएandroid
कमांड के )
पैकेज स्थापित करने का उदाहरण:
android-sdk/tools/bin/sdkmanager "extras;android;m2repository"
सभी उपलब्ध पैकेजों की सूची प्राप्त करने के लिए कमांड:
android-sdk/tools/bin/sdkmanager --verbose --list
यह वेब-पेज सूची एसडीके-टूल्स के लिए लिंक डाउनलोड करता है:
यहाँ एक ओपन-सोर्स रिपॉजिटरी docker-android का लिंक दिया गया है जो डॉकटर इमेज में android इंस्टॉल कर सकता है।
आपको इस SO प्रश्न के उत्तर भी मिल सकते हैं : सभी SDK लाइसेंस को स्वतः स्वीकार कर लें ।
ग्रैडल संस्करण 2.2.0 के लिए एंड्रॉइड प्लगइन के साथ शुरू होने से , लापता एसडीके घटक स्वचालित रूप से डाउनलोड हो जाते हैं ।
मैंने एक रूबी लिपि को एक साथ रखा जो बिना एसडीके को डाउनलोड और इंस्टॉल किए बिना मदद कर सकता है। https://github.com/ayvazj/andenv
अभी तक केवल आवश्यक, गैर- {अचूक, स्रोत, एमुलेटर-छवि, डॉक्टर} पैकेज डाउनलोड करने के लिए एक और स्क्रिप्ट:
#!/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
विंडोज पर प्रॉम्प्ट को स्वचालित करने के लिए (बिल्ड इंफ्रास्ट्रक्चर के लिए स्वचालन के माध्यम से स्थापित कर रहे हैं) ... इसे न चलाएं। यह पता लगाने में समय बर्बाद न करें कि y
इसमें पाइप कैसे डाला जाए। मैंने कोशिश की; अस्वीकार असफल।
इसके बजाय - इसे एक बार, स्वयं चलाएं, और ध्यान दें कि यह फ़ाइलों को उत्पन्न करता है c:\android\android-sdk\licenses
(जहां आप चल रहे हैं c:\android\android-sdk\tools\bin\sdkmanager.bat
- आपकी इंस्टॉल की जड़ भिन्न हो सकती है)।
उन फ़ाइलों को ले लो, और उन्हें कहीं भी रखें आप उन्हें अपनी स्वचालित सेटअप स्क्रिप्ट से हड़प सकते हैं। व्यक्तिगत रूप से, अन्सिबल मेरा जहर है, इसलिए:
# 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
पता लगाया गया और जो आपको चाहिए उसे स्थापित किया जाएगा। यह विंडोज, ओएसएक्स और लिनक्स पर काम करता है और यदि आप ग्रैडल के साथ निर्माण करते हैं तो किसी भी अतिरिक्त निर्भरता की आवश्यकता नहीं है।
यदि आप रुचि रखते हैं, तो आप मेरे डॉक्स को यहां देख सकते हैं: https://github.com/quittle/gradle-setup-android-ddk
एक नौसिखिया एंड्रॉइड डेवलपर के लिए, लेकिन एक अनुभवी जावा डेवलपर के लिए, यदि आप उपरोक्त सभी बुरे सपने देखते हैं तो वास्तव में, जो कि निर्भरता, ईवीएन को जानना बहुत ही चौंकाने वाला है। मेरे सहयोगी ने मुझे Android स्टूडियो (जो कि इंटेलीज आधारित है :-) का उपयोग करने की सलाह दी विशेष रूपउपरोक्त बुरे सपने की वजह से। मैंने उनकी सलाह मानी। लेकिन मैंने इंस्टॉलेशन के लिए चूक को स्वीकार नहीं किया, और इसे एक सॉफ़्टवेयर ड्राइव में स्थापित करने का प्रयास किया। यह एक बुरा सपना बन गया। एसडीके संवाद लटका हुआ लग रहा था और यह बिल्कुल सहज नहीं था। यही कारण है कि मैं यहाँ समाप्त हुआ। उपरोक्त पढ़ने के बाद, मैंने स्टूडियो को एक और कोशिश दी, और इस बार इंटालैशन के लिए सभी चूक को स्वीकार किया। अरे PRESTO ... यह सभी SDK निर्भरता (मुख्य मैं अनुमान लगा रहा हूँ) का ध्यान रखा गया है बिना कुछ संवाद के सीटीएल-शिफ्ट-एस और एसकेडी यानी। इसलिए मैं इसे नौसिखिया के लिए सुझाऊंगा। यहाँ हलवा का प्रमाण जैसे ही डाउनलोड होता है:
Sudio का संस्करण जिसे मैंने डाउनलोड किया और स्थापित किया: विंडोज़ का संस्करण: और यहाँ इसके अच्छा-सामान करने के बाद:
निष्ठा से आशा है कि यह आपके लिए काम करता है !!