Làm cách nào để cài đặt Android SDK Build Tools trên dòng lệnh?


292

Tôi muốn thiết lập môi trường phát triển Android từ dòng lệnh và gặp phải sự cố sau:

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz

Sau khi giải nén tập tin, hãy chạy

tools/android update sdk --no-ui

Tuy nhiên, nó chạy quá chậm

Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml

Kết quả là không có gì trong các công cụ xây dựng thư mục và tôi muốn là aapt và apkbuilder, vì tôi muốn xây dựng apk từ dòng lệnh mà không có ant.

Câu trả lời:


479

Theo mặc định, Trình quản lý SDK từ dòng lệnh không bao gồm các công cụ xây dựng trong danh sách. Họ thuộc nhóm "lỗi thời". Để xem tất cả các tải xuống có sẵn, sử dụng

android list sdk --all

Và sau đó để lấy một trong các gói trong danh sách đó từ dòng lệnh, hãy sử dụng:

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

Trong đó -u là viết tắt của --no-ui, -a là viết tắt của --all và -t là viết tắt của --filter.

Nếu bạn cần cài đặt nhiều gói làm:

cập nhật Android sdk -u -a -t 1,2,3,4, .., n 

Trong đó 1,2, .., n là số gói được liệt kê với lệnh danh sách ở trên


4
Nếu bạn đang thiếu các công cụ xây dựng như 18.1.1 thì đây là cách phù hợp để cài đặt nó bằng dòng lệnh.
Cray

19
Thật tệ, họ không đề cập đến --alltùy chọn trong các mẹo chính thức . Cảm ơn bạn.
Alexander Malakhov

4
@DanielJonker Vâng, đúng vậy. Chỉ cần echo "yes" cho lệnh, tức là echo yes | cập nhật android sdk --all --filter tools --no-ui --force> / dev / null
nsg

4
echo "yes"có thể rút ngắn lại echo "y", nhưng dù sao thì nó cũng không hoạt động. Trong một số trường hợp, bạn có thể nhận được nhiều hơn một dấu nhắc giấy phép y / n, tùy thuộc vào bộ lọc và các gói cụ thể. echo "y"sẽ chỉ trả lời lời nhắc đầu tiên chứ không phải phần còn lại. Tôi đang cố gắng để làm cho nó hoạt động với yeslệnh không có thành công cho đến nay.
i4niac

3
@AlexanderMalakhov Tôi đồng ý, nếu hệ điều hành máy chủ của bạn có tiện ích, sử dụng nó là lựa chọn tốt nhất. Tôi đã nhìn vào sự mong đợi trước tiên, nhưng trong trường hợp của tôi, tôi phải chạy tập lệnh trên một bản phân phối Linux nhất định đang chạy trong đám mây AWS. Bản phân phối đó không mong đợi được cài đặt và tôi không có đủ quyền để cài đặt nó như là một phần của kế hoạch xây dựng. Sau khi nhìn xung quanh, giải pháp tốt nhất mà tôi tìm thấy là <pre> <code> # update Android SDK trên máy chủ không đầu FILTER = tool, platform, android-20 (ngủ 5 && trong khi [1]; ngủ 1; echo y; xong ) \ | cập nhật android sdk --no-ui --all \ --filter $ {LỌC} </ code> </ pre>
i4niac

140

Như đã đề cập trong các câu trả lời khác, bạn có thể sử dụng --filtertùy chọn để giới hạn các gói đã cài đặt:

android update sdk --filter ...

Các câu trả lời khác không đề cập rằng bạn có thể sử dụng mã định danh chuỗi không đổi thay vì chỉ mục (sẽ thay đổi) cho các tùy chọn bộ lọc. Điều này rất hữu ích cho các cài đặt không có giám sát hoặc theo kịch bản. Người đàn ông cho --filterlựa chọn:

... Điều này cũng chấp nhận các định danh được trả về bởi 'list sdk --extends'.

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

Sau đó, bạn có thể sử dụng id chuỗi làm tùy chọn bộ lọc để chỉ định chính xác các phiên bản bạn muốn:

android update sdk --filter tools,platform-tools,build-tools-19.0.3 Vân vân


27
+1 cho --extendedtùy chọn, làm rõ những gì cần cài đặt cho tập lệnh CI.
nhaarman

16
android updatecũng sẽ yêu cầu --alltùy chọn, nếu không thì trợ giúp sử dụng được hiển thị. Ví dụ: android update sdk --no-ui --all --filter build-tools-21.1.0(và +1 cho --extendedtùy chọn cho phép bạn xem các bí danh như thế nào build-tools-21.1.0)
Petrus Repo

1
Người đàn ông cho --filter--extendedlựa chọn ở đâu?
Ciro Santilli 郝海东 冠状 病 事件

2
Tôi đồng ý sử dụng chuỗi tốt hơn là số không cố định.
wvducky

1
Tôi đã tìm kiếm --extendedtùy chọn đó để tôi có thể viết một tập lệnh và sử dụng nó trong Máy chủ tích hợp liên tục của tôi, nơi nó có thể làm mới chính tài nguyên sdk. Mẹo hay!
osayilgan

73

Phiên bản 25.2.3 (và cao hơn) của Android SDK Toolsgói chứa công cụ mới - sdkmanager - giúp đơn giản hóa nhiệm vụ cài đặt công cụ xây dựng này từ dòng lệnh.
Nó nằm trong android_sdk/tools/binthư mục.

Cách sử dụng (từ tài liệu ):

sdkmanager packages [options]

Đối packagessố là một đường dẫn kiểu SDK, được gói trong dấu ngoặc kép (ví dụ: "build-tools;25.0.0"hoặc "platforms;android-25"). Bạn có thể vượt qua nhiều đường dẫn gói, được phân tách bằng một khoảng trắng, nhưng chúng phải được gói trong một dấu ngoặc kép riêng.

Ví dụ sử dụng (trên máy Mac của tôi):

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/

Bạn cũng có thể chỉ định các tùy chọn khác nhau , ví dụ để buộc tất cả các kết nối sử dụng HTTP ( --no_https) hoặc để sử dụng máy chủ proxy ( --proxy_host=address--proxy_port=port).

Để kiểm tra các tùy chọn có sẵn, sử dụng --helpcờ. Trên máy của tôi (Mac), đầu ra như sau:

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
Bất cứ ai khác nhận được Warning: Unknown argument --package_file?
ulidtko

3
@ulidtko Có lỗi trong tài liệu sử dụng. Cách chính xác là nối các dấu bằng, ví dụ --package_file=packages.txt.
Alex Lipov

Thật không may, nó không đơn giản hóa nhiệm vụ cài đặt. Không phải tất cả các lập trình viên Android đều lập trình trên linux mà không cần GUI. Một số người trong chúng ta làm điều đó trên Windows và thích một giao diện người dùng chạy như mọi ứng dụng Windows khác. Điều này đang di chuyển lùi thay vì tiến lên
AaA

2
@AaA Nó đơn giản hóa nhiệm vụ cài đặt từ dòng lệnh . OP tuyên bố rõ ràng rằng anh ta đang tìm kiếm một giải pháp dòng lệnh , và do đó bình luận của bạn không liên quan trong bối cảnh này.
Alex Lipov

55

ADB Build-Tools sẽ không được tải xuống tự động, bằng lệnh cập nhật android sdk --no-ui

Vì vậy, để cài đặt loại Buil-Tool (trong bảng điều khiển):

android list sdk --all

Ghi nhớ số được liệt kê trước mục và thực hiện như sau:

android update sdk -u --all --filter <number>

các lệnh nên được nhập vào / YourFolder / android-sdk-linux / tools

Ngoài ra đối với thư mục từ xa (máy chủ được mở bởi ssh chẳng hạn) gõ:

**./android** list sdk --all
**./android** update sdk -u --all --filter <number>

Đối với danh sách đơn giản các loại gói ADB trong thiết bị đầu cuối:

android list sdk

để cài đặt tất cả các gói:

android update sdk --no-ui

Hoặc với các bộ lọc (dấu phẩy là dấu phân cách):

android update sdk --no-ui --filter 3,5,8,14

đối với các sdks cũ không dùng nữa, bạn phải sử dụng --all. ví dụ: bản cập nhật android sdk --no-ui --all --filter 27 để cài đặt nền tảng-8
fluke

do trình cài đặt SDK liên tục gặp sự cố khi tôi đang sử dụng GUI, tôi đã phải chuyển sang dòng lệnh, vì vậy điều này thực sự hữu ích. Cảm ơn.
Yvonne Aburrow

32

Một nguồn thông tin tuyệt vời mà tôi đã gặp trong khi cố gắng cài đặt mọi thứ Android SDK liên quan từ dòng lệnh, là Dockerfile này . Trong Dockerfile, bạn có thể thấy rằng tác giả thực thi một lệnh duy nhất để cài đặt platform toolsbuild toolskhông có bất kỳ tương tác nào khác. Trong trường hợp OP đưa ra, lệnh sẽ được điều chỉnh thành:

echo y | $ANDROID_HOME/tools/android update sdk --all --filter build-tools-21.1.0 --no-ui

Nếu tôi không muốn tất cả các gói thì sao? Chỉ muốn 21.1.0 .
IgorGanapolsky

@IgorGanapolsky Có lẽ bạn nên thử mà không có --allcờ
Geoand

21

Tôi chỉ có một chút thời gian để cài đặt các phụ thuộc sdk của Android thông qua dòng lệnh và vì tài liệu đi kèm với các công cụ và trực tuyến rất thiếu, tôi nghĩ rằng tôi đã đăng những gì tôi đã khám phá ở đây.

Tôi đang làm việc với android sdk r24.4.1cho linux. Có hai lệnh mà bạn có thể chạy để liệt kê các gói có sẵn:

android list sdk

và càng mệt mỏi hơn:

android list sdk --all

Số gói cho các gói cụ thể khác nhau cho mỗi lệnh ở trên! Ví dụ, gói danh sách trước API 23.1 revision 3là gói #3và gói sau liệt kê dưới dạng #29.

Bây giờ, có hai cách khác nhau để cài đặt bằng lệnh android.

tools/android update sdk --no-ui --filter <package number>

tools/android update sdk -u -a -t <package number>

Cho rằng các lệnh cài đặt mỗi lệnh có thể lấy gói # làm tham số, bạn sử dụng số gói nào? Sau nhiều lần tìm kiếm trực tuyến và dùng thử và lỗi, tôi phát hiện ra rằng

android update sdk --no-ui --filter sử dụng số gói từ android list sdk

android update sdk -u -a -t sử dụng số gói từ android list sdk --all

Nói cách khác - để cài đặt, API 23.1 revision 3bạn có thể thực hiện:

android update sdk --no-ui --filter 3

hoặc là

android update sdk -u -a -t 29

Điên, nhưng nó hoạt động.


1
-alà phiên bản ngắn của --all, đó là lý do tại sao nó sử dụng số gói đó. ( -uviết tắt của --no-ui-tviết tắt của --filter.)
darthmaim

Tôi tin những gì Ips nói. Google được biết là không giữ cho usage()văn bản của họ cập nhật với thực tế.
not2qubit

trên Ubuntu tôi đã chạy: $ echo y | $ ANDROID_HOME / tools / android update sdk -u -a -t 27 Bây giờ làm thế nào để xác nhận tôi đã được cập nhật lên Android 8?
Ashish Karpe

$ ANDROID_HOME / công cụ / mục tiêu danh sách Android | grep "Dựa trên Android" Dựa trên Android 4.0.3 (API cấp 15) Dựa trên Android 4.1.2 (API cấp 16) Dựa trên Android 4.2.2 (API cấp 17) Dựa trên Android 4.3.1 (API cấp 18) Dựa trên Android 4.4.2 (API cấp 19) Dựa trên Android 4.4.2 (API cấp 19) Dựa trên Android 5.0.1 (API cấp 21) Dựa trên Android 5.1.1 (API cấp 22) Dựa trên Android 6.0 (API cấp 23) Dựa trên Android 7.0 (API cấp 24)
Ashish Karpe

Nguyên nhân khi tôi chạy: $ ANDROID_HOME / tools / android list sdk Gói có sẵn để cài đặt hoặc cập nhật: 1 1- Nền tảng SDK Android 8.1.0, API 27, phiên bản 1
Ashish Karpe

20

Hầu hết các câu trả lời dường như bỏ qua thực tế là bạn có thể cần chạy cập nhật trong môi trường không đầu, không có quyền siêu người dùng, điều đó có nghĩa là tập lệnh phải y/ntự động trả lời tất cả các lời nhắc cấp phép.

Đây là ví dụ mà lừa.

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}

Cho dù bạn nhận được bao nhiêu lời nhắc, tất cả những điều đó sẽ được trả lời. while/sleepVòng lặp này trông giống như mô phỏng của lệnh yes , và trên thực tế, nó gần như vậy . Vấn đề yeslà nó tràn ngập thiết bị xuất chuẩn 'y'và hầu như không có sự chậm trễ nào giữa việc gửi các ký tự đó và phiên bản tôi phải xử lý không có tùy chọn hết thời gian chờ. Nó sẽ "gây ô nhiễm" thiết bị xuất chuẩn và kịch bản sẽ không phàn nàn về đầu vào không chính xác. Giải pháp là đặt một độ trễ giữa việc gửi 'y'tới thiết bị xuất chuẩn và đó chính xác là những gì while/sleepkết hợp.

expect không có sẵn theo mặc định trên một số distro linux và tôi không có cách nào để cài đặt nó như là một phần của tập lệnh CI của tôi, vì vậy phải sử dụng giải pháp chung nhất và không có gì có thể chung chung hơn tập lệnh bash đơn giản, phải không?

Trên thực tế, tôi đã viết blog về nó ( NSBogan ), hãy kiểm tra nó để biết thêm chi tiết ở đây nếu bạn quan tâm.


--all sẽ cài đặt tất cả các sdk có thể. Không lý tưởng nếu bạn muốn giới hạn trong một bộ lọc cụ thể.
IgorGanapolsky

17

Nếu bạn đã sdkmanagercài đặt (Tôi đang sử dụng MAC)

chạy sdkmanager --listđể liệt kê các gói có sẵn.

Nếu bạn muốn cài đặt các công cụ xây dựng, hãy sao chép phiên bản ưa thích từ danh sách các gói có sẵn.

Để cài đặt phiên bản ưa thích chạy

sdkmanager "build-tools;27.0.3"

1
Cảm ơn. Nó hoạt động! Lệnh "android" không còn dùng nữa với phiên bản Android-sdk mới nhất, chúng tôi phải sử dụng ./sdkmanager từ thư mục / tools / bin
JLavoie 16/12/18

8

Tuy nhiên, nó chạy quá chậm

Vâng, tôi đã có cùng một vấn đề. Một số tải xuống tệp cực kỳ chậm (hoặc ít nhất là chúng đã được trong vài ngày qua). Nếu bạn muốn tải xuống mọi thứ, bạn không thể làm gì nhiều về điều đó.

Kết quả là không có gì trong các công cụ xây dựng thư mục và tôi muốn là aapt và apkbuilder, vì tôi muốn xây dựng apk từ dòng lệnh mà không có ant.

Bạn đã để nó chạy đến khi hoàn thành?

Một điều bạn có thể làm là lọc các gói đang được tải xuống bằng cách sử dụng -tchuyển đổi.

Ví dụ:

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

Khi tôi thử điều này vào một ngày khác, tôi đã cài đặt phiên bản 18.0.0 của các công cụ xây dựng. Vì một số lý do, phiên bản mới nhất 18.0.1 không được bộ lọc này đưa vào và cách duy nhất để có được nó là cài đặt mọi thứ với công --alltắc.


2
Chạy phần mềm này để có được các bộ lọc có sẵn: "android update sdk -h" ... Bộ lọc giới hạn cập nhật đối với các loại gói được chỉ định dưới dạng danh sách [nền tảng, hình ảnh hệ thống, công cụ, nền tảng được phân tách bằng dấu phẩy -tool, doc, mẫu, nguồn]. Điều này cũng chấp nhận các định danh được trả về bởi 'list sdk --extends'.
aleb

6

Tôi thích đặt một tập lệnh cài đặt các phụ thuộc của tôi

Cái gì đó như:

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


Cảm ơn, giúp tôi tiết kiệm rất nhiều thời gian.
utzcoz

4

Tôi chỉ gặp vấn đề này, vì vậy cuối cùng tôi đã viết một giải pháp bẩn bash 1 dòng bằng cách đọc và phân tích danh sách các công cụ khả thi:

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

Tôi đã chuyển dự án của mình sang chơi các dịch vụ, nó yêu cầu giấy phép nhiều hơn là chỉ xây dựng các công cụ, vì vậy giải pháp này rất hạn chế.
Nurettin

Cảm thấy có tính quyết định cao hơn nhiều so với các chỉ số có thể thay đổi theo thời gian khi các phiên bản phát triển ...
Augustin Riedinger

4

Lấy cảm hứng từ câu trả lời của @ i4niac & @ Aurélien Lambert, đây là những gì tôi nghĩ ra

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

Giải trình

  • lấy một danh sách các số được phân tách bằng dấu phẩy là các chỉ mục của các gói công cụ xây dựng trong kết quả của android list sdk --alllệnh (Bỏ qua các gói lỗi thời).
  • cứ ném vài giây vào thiết bị đầu cuối cứ sau vài giây để chấp nhận giấy phép.

4

Tải xuống SDK Android từ developer.android.com (hiện là tệp 149mb cho hệ điều hành windows). Điều đáng lưu ý là android đã gỡ bỏ GUI sdkmanager nhưng có phiên bản dòng lệnh của sdkmanager trong thư mục bin nằm trong thư mục công cụ.

  1. Khi bên trong thư mục bin, giữ phím shift, nhấp chuột phải, sau đó chọn dòng lệnh mở ở đây. Shift + nhấp chuột phải >> mở dòng lệnh ở đây.
  2. Khi dòng lệnh mở ra, gõ sdkmanagerclick enter.
  3. Sau đó chạy loại sdkmanager(dấu cách), dấu gạch nối kép ( --), danh sách loại sdkmanager --list ( danh sách này liệt kê tất cả các gói trong trình quản lý SDK)
  4. Nhập sdkmanager (dấu cách) sau đó tên gói, nhấn enter. Ví dụ. công cụ nền tảng sdkmanager (nhấn enter) Nó sẽ tải thỏa thuận cấp phép. Với các tùy chọn (y / n). Nhập y để chấp nhận và nó sẽ tải xuống gói bạn đã chỉ định.

Để tham khảo thêm theo tài liệu chính thức ở đây

Tôi hi vọng cái này giúp được. :)


4

Lệnh "android" không được dùng nữa.

Đối với các công cụ dòng lệnh, sử dụng công cụ / bin / sdkmanagercông cụ / bin / avdmanager

Nếu bạn không cần Android Studio, bạn có thể tải xuống các công cụ dòng lệnh Android cơ bản từ developer.android.com trong phần Công cụ dòng lệnh .

từ CLI, nó sẽ giống như:

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

hoặc là

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

Sau đó, chỉ giải nén tệp lưu trữ vào thư mục đích

unzip sdk-tools-linux.zip

Và bây giờ chúng tôi có thể cài đặt mọi thứ bạn cần ...

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

Bạn có thể nhận được một danh sách đầy đủ các gói bằng cách sử dụng lệnh ./tools/bin/sdkmanager --list

Một số gói yêu cầu chấp nhận thỏa thuận cấp phép. bạn có thể chấp nhận nó một cách tương tác hoặc chỉ chuyển "y" cho luồng đầu vào, như thế này (trong trường hợp có hai thỏa thuận):

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

Và tất nhiên, để thuận tiện, bạn có thể xuất các biến như ANDROID_HOME hoặc ANDROID_SDK_ROOT (bao gồm thực hiện trong ~ / .profile hoặc ~ / .bash_profile) hoặc vá biến PATH - tất cả điều này theo ý của bạn.

Kịch bản ví dụ:

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'

Yêu cầu: curl (hoặc wget) và giải nén

Xử lý sự cố:

nếu bạn thấy Warning: Could not create settings, bạn cần phải có toolsthư mục bên trong cmdline-toolsthư mục bên trong ANDROID_HOME (tạo nó nếu cần với tên chính xác này), xem công cụ dòng lệnh Android sdkmanager luôn hiển thị: Cảnh báo: Không thể tạo cài đặt


2

Các công cụ xây dựng không thể được tải xuống tự động theo mặc định như Nate đã nói trong https://stackoverflow.com/a/19416222/1104031 bài đăng.

Nhưng tôi đã viết công cụ nhỏ làm mọi thứ cho bạn

Tôi đã sử dụng công cụ "mong đợi" là danb trong https://stackoverflow.com/a/17863931/1104031 bài đăng. Bạn chỉ cần android-sdk và python27, expect.

Tập lệnh này sẽ cài đặt tất cả các công cụ xây dựng, tất cả các sdks và mọi thứ bạn cần để xây dựng tự động:

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)

Thế còn echo "yes" | ./android update sdk --no-https --no-ui --filter 1,6?
schemacs

1
Sửa lỗi cho tôi nếu tôi sai nhưng có vẻ như tập lệnh này tải lại mọi thứ mỗi khi nó chạy. Tôi đã thử với -u param nhưng nó dường như không hoạt động: /
gbero

1

Như đã nêu trong các phản hồi khác, các công cụ xây dựng yêu cầu --allcài đặt cờ. Bạn cũng nên sử dụng -tcờ lọc để tránh cài đặt TẤT CẢ các gói nhưng không có cách nào để lọc tất cả các công cụ xây dựng.

Đã có các yêu cầu tính năng cho hai điểm này trong trình theo dõi lỗi AOSP. Hãy bình chọn cho họ, điều này có thể khiến họ xảy ra một ngày nào đó:


1

Tôi đã thử điều này để cập nhật tất cả, và nó đã hoạt động!

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


-1

cập nhật android sdk

Lệnh này sẽ cập nhật và cài đặt tất cả các bản phát hành mới nhất cho Công cụ SDK, Công cụ xây dựng, công cụ nền tảng SDK.

Đó là công việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.