จะติดตั้ง Android SDK Build Tools บนบรรทัดรับคำสั่งได้อย่างไร


292

ฉันต้องการตั้งค่าสภาพแวดล้อม 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

ผลลัพธ์คือไม่มีอะไรในเครื่องมือสร้างโฟลเดอร์และฉันต้องการคือ aapt และ apkbuilder เนื่องจากฉันต้องการสร้าง apk จากบรรทัดคำสั่งโดยไม่มีมด

คำตอบ:


479

โดยค่าเริ่มต้นตัวจัดการ SDK จากบรรทัดคำสั่งไม่รวมเครื่องมือสร้างในรายการ พวกเขาอยู่ในหมวดหมู่ "ล้าสมัย" หากต้องการดูการดาวน์โหลดทั้งหมดที่มีให้ใช้

android list sdk --all

จากนั้นเมื่อต้องการรับหนึ่งในแพ็คเกจในรายการนั้นจากบรรทัดคำสั่งให้ใช้:

android update sdk -u -a -t <package no.>

โดยที่ -u หมายถึง --no-ui, -a หมายถึง - ทั้งหมดและ -t ย่อมาจาก - ตัวกรอง

หากคุณต้องการติดตั้งหลายแพ็คเกจให้ทำดังนี้

อัปเดต android sdk -u -a -t 1,2,3,4, .. , n 

โดยที่ 1,2, .. , n คือหมายเลขแพ็กเกจที่แสดงรายการพร้อมกับคำสั่ง list ด้านบน


4
หากคุณไม่มีเครื่องมือสร้างเช่น 18.1.1 นี่เป็นวิธีที่ถูกต้องในการติดตั้งโดยใช้บรรทัดคำสั่ง
Cray

19
มันนะครับที่พวกเขาไม่ได้พูดถึง--allตัวเลือกในเคล็ดลับอย่างเป็นทางการ ขอบคุณ.
Alexander Malakhov

4
@DanielJonker ใช่มันเป็น เพียงแค่สะท้อน "ใช่" กับคำสั่งเช่น echo yes | Android อัปเดต sdk - ทั้งหมด - เครื่องมือตัวกรอง - ไม่มี ui - บังคับ> / dev / null
nsg

4
echo "yes"สามารถย่อให้สั้นลงได้echo "y"แต่ไม่สามารถใช้งานได้ในทุกกรณี ในบางกรณีคุณสามารถได้รับพรอมต์ใบอนุญาตมากกว่าหนึ่ง y / n ขึ้นอยู่กับตัวกรองและแพคเกจเฉพาะ echo "y"จะตอบกลับการแจ้งเตือนครั้งแรกเท่านั้น แต่ไม่ใช่การโต้ตอบที่เหลือ ฉันพยายามทำให้มันใช้งานได้ด้วยการyesควบคุมโดยที่ไม่ประสบความสำเร็จ
i4niac

3
@AlexanderMalakhov ฉันเห็นด้วยถ้าโฮสต์ระบบปฏิบัติการของคุณมียูทิลิตี้การใช้มันเป็นตัวเลือกที่ดีที่สุด ฉันดูที่คาดหวังก่อน แต่ในกรณีของฉันฉันต้องเรียกใช้สคริปต์บน Linux ดิสทริบิวชันที่ทำงานใน AWS cloud distro นั้นไม่ได้คาดหวังว่าจะติดตั้งและฉันไม่มีสิทธิ์เพียงพอที่จะติดตั้งเป็นส่วนหนึ่งของแผนการสร้าง หลังจากมองไปรอบ ๆ ทางออกที่ดีที่สุดที่ฉันพบคือ <pre> <code> # อัปเดต Android SDK บนเซิร์ฟเวอร์ตัวกรอง = เครื่องมือแพลตฟอร์ม android-20 (sleep 5 && ในขณะที่ [1]; do sleep 1; echo y; ) \ | android อัปเดต sdk --no-ui - ทั้งหมด \ - ตัวกรอง $ {FILTER} </code> </pre>
i4niac

140

ตามที่กล่าวไว้ในคำตอบอื่น ๆ คุณสามารถใช้--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

จากนั้นคุณสามารถใช้รหัสสตริงเป็นตัวเลือกตัวกรองเพื่อระบุเวอร์ชันที่คุณต้องการได้อย่างแม่นยำ:

android update sdk --filter tools,platform-tools,build-tools-19.0.3 ฯลฯ


27
+1 สำหรับ--extendedตัวเลือกทำให้ชัดเจนว่าจะติดตั้งอะไรสำหรับสคริปต์ CI
nhaarman

16
android updateจะต้องมี--allตัวเลือกไม่เช่นนั้นความช่วยเหลือในการใช้งานจะปรากฏขึ้น ตัวอย่างเช่น: android update sdk --no-ui --all --filter build-tools-21.1.0(และ +1 สำหรับ--extendedตัวเลือกที่ช่วยให้คุณเห็นชื่อแทนbuild-tools-21.1.0)
Petrus Repo

1
ผู้ชายอยู่ที่ไหน--filterและ--extendedตัวเลือก?
Ciro Santilli 郝海东冠状病六四事件法轮功

2
ฉันเห็นด้วยที่ดีกว่าการใช้สตริงมากกว่าจำนวนซึ่งไม่ได้รับการแก้ไข
wisbucky

1
ฉันกำลังมองหา--extendedตัวเลือกนั้นเพื่อให้ฉันสามารถเขียนสคริปต์และใช้ในเซิร์ฟเวอร์การรวมอย่างต่อเนื่องของฉันซึ่งมันสามารถรีเฟรชทรัพยากร sdk เอง คำแนะนำที่ดี!
osayilgan

73

Android SDK Toolsแพ็คเกจ25.2.3 เวอร์ชัน (และสูงกว่า) มีเครื่องมือใหม่ - sdkmanagerซึ่งช่วยให้งานนี้ง่ายขึ้นในการติดตั้ง build-tools จากบรรทัดคำสั่ง
มันตั้งอยู่ใน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.

1
ใครรับWarning: Unknown argument --package_fileบ้าง
ulidtko

3
@ulidtko มีข้อผิดพลาดในเอกสารการใช้งาน --package_file=packages.txtวิธีที่ถูกต้องคือการผนวกเครื่องหมายเท่ากับเช่น
Alex Lipov

น่าเสียดายที่มันไม่ได้ทำให้งานติดตั้งง่ายขึ้น โปรแกรมเมอร์ Android บางคนไม่ทำการเขียนโปรแกรมบน linux โดยไม่มี GUI พวกเราบางคนทำบน Windows และชอบ UI ที่ทำงานเหมือนกับแอพพลิเคชัน Windows อื่น ๆ นี้จะเลื่อนไปข้างหลังแทนการไปข้างหน้า
AAA

2
@AaA มันจะลดความซับซ้อนของงานในการติดตั้งจากบรรทัดคำสั่ง OP ระบุอย่างชัดเจนว่าเขากำลังมองหาโซลูชันบรรทัดคำสั่งดังนั้นความคิดเห็นของคุณไม่เกี่ยวข้องในบริบทนี้
Alex Lipov

55

เครื่องมือ ADB Build จะไม่ถูกดาวน์โหลดโดยอัตโนมัติโดยใช้คำสั่ง android update sdk --no-ui

ดังนั้นสำหรับการติดตั้ง Buil-Tool type (ในคอนโซล):

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

สำหรับ sdks ที่เลิกใช้แล้วคุณต้องใช้ - ทั้งหมด ตัวอย่างเช่น android update sdk --no-ui - ทั้งหมด - กรอง 27 เพื่อติดตั้งแพลตฟอร์ม -8
fluke

ตั้งแต่ตัวติดตั้ง SDK หยุดทำงานเมื่อฉันใช้ GUI ฉันจึงต้องเปลี่ยนไปใช้บรรทัดคำสั่งดังนั้นสิ่งนี้ช่วยได้จริงๆ ขอบคุณ
Yvonne Aburrow

32

เป็นแหล่งที่ดีของข้อมูลผมมาในขณะที่พยายามที่จะติดตั้งทุกอย่าง 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

ถ้าฉันไม่ต้องการแพ็คเกจทั้งหมดล่ะ? เพียงแค่ต้องการ21.1.0
IgorGanapolsky

@IgorGanapolsky บางทีคุณควรลองโดยไม่ใช้--allธง
geoand

21

ฉันเพิ่งได้รับการติดตั้ง Android sdk dependencies ที่ติดตั้งผ่านทางบรรทัดคำสั่งและเนื่องจากเอกสารที่มาพร้อมกับเครื่องมือและออนไลน์ขาดความเศร้าโศกฉันคิดว่าฉันจะโพสต์สิ่งที่ฉันค้นพบที่นี่

ฉันกำลังทำงานกับสำหรับ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

บ้า แต่มันก็ใช้งานได้


1
-aเป็นรุ่นย่อ--allนั่นคือเหตุผลที่ใช้หมายเลขแพ็กเกจนั้น ( -uสั้น--no-uiและ-tสั้น--filterไป.)
darthmaim

ฉันเชื่อในสิ่งที่ Ips พูด Google เป็นที่รู้จักไม่ให้usage()ข้อความเป็นปัจจุบันเสมอไป
not2qubit

บน Ubuntu ฉันวิ่ง: $ echo y | $ ANDROID_HOME / tools / android อัปเดต sdk -u -a -t 27 ตอนนี้จะยืนยันได้อย่างไรว่าฉันได้รับการอัพเดตเป็น Android 8 แล้ว?
Ashish Karpe

$ ANDROID_HOME / tools / android เป้าหมายรายการ | grep "ยึดตาม Android" อ้างอิงจาก Android 4.0.3 (ระดับ API 15) อ้างอิงตาม Android 4.1.2 (ระดับ API 16) อ้างอิงตาม Android 4.2.2 (ระดับ API 17) อ้างอิงตาม Android 4.3.1 (ระดับ API 18) ขึ้นอยู่กับ Android 4.4.2 (ระดับ API 19) ขึ้นอยู่กับ Android 4.4.2 (ระดับ API 19) ขึ้นอยู่กับ Android 5.0.1 (ระดับ API 21) ขึ้นอยู่กับ Android 5.1.1 (ระดับ API 22) ขึ้นอยู่กับ Android 6.0 (API ระดับ 23) อ้างอิงตาม Android 7.0 (API ระดับ 24)
Ashish Karpe

สาเหตุเมื่อฉันวิ่ง: $ ANDROID_HOME / tools / android list sdk แพคเกจสำหรับการติดตั้งหรืออัปเดต: 1 1- SDK แพลตฟอร์ม Android 8.1.0, API 27, การแก้ไข 1
Ashish Karpe

20

คำตอบส่วนใหญ่ดูเหมือนจะเพิกเฉยต่อข้อเท็จจริงที่ว่าคุณอาจจำเป็นต้องเรียกใช้การอัปเดตในสภาพแวดล้อมที่ไม่มีส่วนหัวโดยไม่มีสิทธิ์ผู้ใช้ขั้นสูงซึ่งหมายความว่าสคริปต์จะต้องตอบคำถาม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คือมันท่วมท้นไปด้วย'y'และแทบไม่มีความล่าช้าระหว่างการส่งตัวละครเหล่านั้นกับเวอร์ชั่นที่ฉันต้องรับมือกับมันไม่มีตัวเลือกการหมดเวลาใด ๆ มันจะ "ก่อให้เกิดมลพิษ" stdout และสคริปต์จะไม่สามารถบ่นเกี่ยวกับอินพุตที่ไม่ถูกต้อง ทางออกคือการหน่วงเวลาระหว่างการส่ง'y'ไปยัง stdout และนั่นคือสิ่งที่while/sleepคำสั่งผสมจะทำ

expect ไม่สามารถใช้งานได้โดยค่าเริ่มต้นใน distros linux บางส่วนและฉันไม่มีวิธีติดตั้งเป็นส่วนหนึ่งของสคริปต์ CI ของฉันดังนั้นจึงต้องใช้วิธีการทั่วไปมากที่สุด

ตามความจริงแล้วฉันเขียนบล็อกเกี่ยวกับมัน ( NSBogan ) ตรวจสอบรายละเอียดเพิ่มเติมที่นี่หากคุณสนใจ


-จะติดตั้ง sdk ที่เป็นไปได้ทั้งหมด ไม่เหมาะถ้าคุณต้องการ จำกัด ตัวกรองเฉพาะ
IgorGanapolsky

17

หากคุณsdkmanagerติดตั้งแล้ว (ฉันใช้ MAC)

วิ่งsdkmanager --listไปที่รายการแพคเกจที่มีอยู่

หากคุณต้องการติดตั้งเครื่องมือสร้างให้คัดลอกเวอร์ชันที่ต้องการจากรายการแพ็คเกจที่มี

เพื่อติดตั้งเวอร์ชั่นที่ต้องการรัน

sdkmanager "build-tools;27.0.3"

1
ขอบคุณ มันได้ผล! คำสั่ง "android" เลิกใช้แล้วในขณะนี้ด้วย Android-sdk รุ่นล่าสุดเราต้องใช้. / sdkmanager จากไดเรกทอรี / tools / bin
JLavoie

8

อย่างไรก็ตามมันทำงานช้าเกินไป

ใช่ฉันมีปัญหาเดียวกัน การดาวน์โหลดไฟล์บางไฟล์ช้ามาก (หรืออย่างน้อยก็อยู่ในช่วงสองสามวันที่ผ่านมา) หากคุณต้องการดาวน์โหลดทุกสิ่งไม่มีอะไรมากมายที่คุณสามารถทำได้

ผลลัพธ์คือไม่มีอะไรในเครื่องมือสร้างโฟลเดอร์และฉันต้องการคือ aapt และ apkbuilder เนื่องจากฉันต้องการสร้าง apk จากบรรทัดคำสั่งโดยไม่มีมด

คุณปล่อยให้มันสำเร็จหรือเปล่า?

สิ่งหนึ่งที่คุณทำได้คือกรองแพ็คเกจที่กำลังดาวน์โหลดโดยใช้-tสวิตช์

ตัวอย่างเช่น:

tools/android update sdk --no-ui -t platform-tool

เมื่อฉันลองสิ่งนี้เมื่อวันก่อนฉันได้ติดตั้งเครื่องมือสร้างรุ่น 18.0.0 ด้วยเหตุผลบางอย่างเวอร์ชันล่าสุด 18.0.1 จะไม่รวมอยู่ในตัวกรองนี้และวิธีเดียวที่จะได้รับคือติดตั้งทุกอย่างด้วย--allสวิตช์


2
เรียกใช้สิ่งนี้เพื่อรับตัวกรองที่มี: "android update sdk -h" ... ตัวกรองที่ จำกัด การอัปเดตเป็นประเภทของแพคเกจที่ระบุในรูปแบบของรายการที่คั่นด้วยเครื่องหมายจุลภาคของ [แพลตฟอร์มระบบภาพเครื่องมือเครื่องมือแพลตฟอร์ม -tool, doc, sample, source] นอกจากนี้ยังยอมรับตัวระบุที่ส่งคืนโดย 'list sdk --extended'
aleb

6

ฉันชอบที่จะใส่สคริปต์ที่ติดตั้งการอ้างอิงของฉัน

สิ่งที่ต้องการ:

#!/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


ขอบคุณช่วยฉันประหยัดเวลาได้มาก
utzcoz

4

ฉันเพิ่งมีปัญหานี้ดังนั้นในที่สุดฉันก็เขียน 1 สกปรกทุบตีวิธีแก้ปัญหาโดยการอ่านและแยกรายการเครื่องมือท

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')

ฉันเปลี่ยนโครงการเล่นบริการมันขอสิทธิ์ใช้งานมากกว่าสร้างเครื่องมือดังนั้นโซลูชันนี้จึงมีข้อ จำกัด มาก
nurettin

รู้สึกว่าถูกกำหนดมากขึ้นกว่าดัชนีซึ่งอาจมีการเปลี่ยนแปลงเมื่อเวลาผ่านไปตามรุ่นที่พัฒนา ...
Augustin Riedinger

4

แรงบันดาลใจจากคำตอบโดย @ 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คำสั่ง (ละเว้นแพ็กเกจที่ล้าสมัย)
  • ขว้างขว้างของคุณที่เทอร์มินัลทุก ๆ สองสามไมล์เพื่อรับใบอนุญาต

4

ดาวน์โหลด android SDK จาก developer.android.com (ปัจจุบันเป็นไฟล์ 149mb สำหรับระบบปฏิบัติการ windows) เป็นที่น่าสังเกตุว่า Android ได้ลบ sdkmanager GUI แล้ว แต่มีรุ่นบรรทัดคำสั่งของ sdkmanager ในโฟลเดอร์ bin ซึ่งอยู่ภายในโฟลเดอร์ tools

  1. เมื่ออยู่ในโฟลเดอร์ bin ให้กดปุ่ม Shift ค้างไว้คลิกขวาจากนั้นเลือกบรรทัดคำสั่งเปิดที่นี่ Shift + คลิกขวา >> บรรทัดคำสั่งเปิดที่นี่
  2. เมื่อบรรทัดคำสั่งเปิดขึ้นให้พิมพ์sdkmanagerคลิก Enter
  3. จากนั้นเรียกใช้ประเภทsdkmanager(ช่องว่าง), เครื่องหมายขีดคั่นคู่ ( --), พิมพ์รายการ sdkmanager --list (ซึ่งแสดงรายการแพ็คเกจทั้งหมดในเครื่องมือจัดการ SDK)
  4. พิมพ์ sdkmanager (เว้นวรรค) จากนั้นชื่อแพคเกจกด Enter เช่น. เครื่องมือแพลตฟอร์ม sdkmanager (กด Enter) มันจะโหลดข้อตกลงใบอนุญาต ด้วยตัวเลือก (y / n) ป้อน y เพื่อยอมรับและจะดาวน์โหลดแพ็คเกจที่คุณระบุ

สำหรับการอ้างอิงเพิ่มเติมติดตามเอกสารอย่างเป็นทางการที่นี่

ฉันหวังว่านี่จะช่วยได้. :)


4

คำสั่ง "android" เลิกใช้แล้ว

สำหรับเครื่องมือบรรทัดคำสั่งให้ใช้tools / bin / sdkmanagerและtools / bin / avdmanager

ถ้าคุณไม่ต้องใช้ Android Studio คุณสามารถดาวน์โหลดเครื่องมือบรรทัดคำสั่งขั้นพื้นฐานจาก Android developer.android.comในส่วนเครื่องมือบรรทัดคำสั่งเท่านั้น

จาก CLI มันควรจะเป็นที่น่าพอใจเช่น:

curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

หรือ

wget --output-document sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

หลังจากนั้นเพียงเปิดไฟล์เก็บถาวรไปยังโฟลเดอร์เป้าหมาย

unzip sdk-tools-linux.zip

และตอนนี้เราสามารถติดตั้งทุกสิ่งที่คุณต้องการ ...

./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

คุณสามารถรับรายการแพ็กเกจทั้งหมดโดยใช้คำสั่ง ./tools/bin/sdkmanager --list

แพคเกจบางอย่างต้องยอมรับข้อตกลงใบอนุญาต คุณสามารถยอมรับมันแบบโต้ตอบหรือเพียงแค่ส่ง "y" ไปยังสตรีมอินพุตเช่นนี้ (สองข้อตกลงในกรณี):

echo -ne "y\ny" | ./tools/bin/sdkmanager --install 'system-images;android-29;default;x86_64'

และแน่นอนเพื่อความสะดวกของคุณคุณสามารถส่งออกตัวแปรเช่นANDROID_HOMEหรือANDROID_SDK_ROOT (รวมถึงทำใน ~ / .profile หรือ ~ / .bash_profile) หรือแก้ไขตัวแปรPATH - ทั้งหมดนี้ขึ้นอยู่กับดุลยพินิจของคุณ

ตัวอย่างสคริปต์:

mkdir /opt/android-sdk
cd /opt/android-sdk
curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux.zip
echo -ne "y" | ./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

ข้อกำหนด: ขด (หรือ wget) และเปิดเครื่องรูด

การแก้ไขปัญหา:

ถ้าคุณเห็นWarning: Could not create settingsคุณจะต้องมีtoolsไดเรกทอรีภายในcmdline-toolsไดเรกทอรีภายใน ANDROID_HOME (สร้างถ้าจำเป็นด้วยชื่อที่แน่นอนนี้) ดูเครื่องมือบรรทัดคำสั่ง Android sdkmanager แสดงเสมอ: คำเตือน: ไม่สามารถสร้างการตั้งค่า


2

ไม่สามารถดาวน์โหลดเครื่องมือสร้างได้โดยอัตโนมัติตามค่าเริ่มต้นตามที่ Nate กล่าวในhttps://stackoverflow.com/a/19416222/1104031โพสต์

แต่ฉันเขียนเครื่องมือเล็ก ๆ ที่ทำทุกอย่างให้คุณ

ฉันใช้เครื่องมือ "คาดหวัง" เป็น Danb ค่ะ https://stackoverflow.com/a/17863931/1104031โพสต์ คุณจะต้องหุ่นยนต์ SDK และ,python27expect

สคริปต์นี้จะติดตั้งเครื่องมือสร้างทั้งหมด, 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)

แล้วไงecho "yes" | ./android update sdk --no-https --no-ui --filter 1,6ล่ะ
schemacs

1
แก้ไขให้ถูกต้องหากฉันผิด แต่ดูเหมือนว่าสคริปต์นี้จะดาวน์โหลดทุกสิ่งทุกครั้งที่มันทำงาน ฉันลองกับ -u param แต่ดูเหมือนจะไม่ทำงาน: /
gbero

1

ตามที่ระบุในการตอบกลับอื่น ๆ เครื่องมือ--allบิลด์จะต้องติดตั้งแฟล็ก คุณควรใช้การ-tตั้งค่าตัวกรองเพื่อหลีกเลี่ยงการติดตั้งแพคเกจทั้งหมด แต่ไม่มีวิธีการกรองเครื่องมือสร้างทั้งหมด

มีคุณสมบัติการร้องขอสำหรับจุดสองจุดเหล่านี้ในตัวติดตามบั๊ก AOSP แล้ว รู้สึกฟรีเพื่อลงคะแนนให้พวกเขาซึ่งอาจทำให้พวกเขาเกิดขึ้นบางวัน:


1

ฉันลองสิ่งนี้เพื่ออัปเดตทั้งหมดและใช้งานได้!

echo y | $ANDROID_HOME/tools/android update sdk --no-ui


-1

อัปเดต android sdk

คำสั่งนี้จะอัปเดตและติดตั้งรีลีสล่าสุดทั้งหมดสำหรับเครื่องมือ SDK, เครื่องมือสร้าง, เครื่องมือแพลตฟอร์ม SDK

มันใช้งานได้สำหรับฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.