Gradle, Android và vị trí SDK ANDROID_HOME


152

chỉnh sửa: (tháng 8 năm 2016)

Câu hỏi đó là từ tháng 11 năm 2013 (trong khi Android Studio vẫn ở chế độ Xem trước dành cho nhà phát triển),

Hiện tại (AS v2.2, tháng 8-2016) trong quá trình cài đặt, AS yêu cầu chọn thư mục SDK (hoặc cài đặt theo mặc định của chúng) và nó tự động áp dụng cho bất kỳ dự án nào bạn đang mở.

Điều đó có nghĩa là bất kỳ cách giải quyết hoặc sửa chữa nào cũng không liên quan vì vấn đề không thể tái tạo được nữa.

câu hỏi ban đầu:

chúng tôi có dự án này với một số mô-đun đã được cấu hình và thực thi chính xác trên một PC nhà phát triển khác bằng cách sử dụng trình bao bọc. Tôi nhân bản các mô đun con git hoàn chỉnh vào máy của tôi.

Bên dưới nó là bản in trực tiếp dòng lệnh của tôi:

$ ./gradlew

FAILURE: Build failed with an exception.

* Where:
Build file '/home/budius/project_name/ActionBar-PullToRefresh/library/build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':ActionBar-PullToRefresh:library'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 6.378 secs

$ echo $ANDROID_HOME
/home/budius/Applications/android-studio/sdk
$ 

vì vậy, như bạn có thể thấy ANDROID_HOME đang ở đó. Họ muốn gì khác? Có gì sai ở đây.

chạy trên Ubuntu 13.04

biên tập:

Tôi đã tạo một tệp local.properIES với sdk.dir=<path>trên root dự án và nó hoạt động. Nhưng điều đó làm cho mã khó hơn để chuyển qua các hệ thống xây dựng máy chủ, vì vậy câu hỏi vẫn còn mở.

Bất cứ ai cũng biết tại sao ANDROID_HOME không hoạt động và phải làm gì để nó hoạt động?


1
Cố gắng chỉ định đường dẫn của SDK của bạn trong tệp local.properIES, trong thư mục gốc của dự án. Tệp phải có cái này: sdk.dir = <sdk_install_dir>
Gabriele Mariotti

1
Xin chào @GabrieleMariotti cảm ơn vì lời đề nghị. Nhưng tôi đã làm điều này và nó hoạt động. Nhưng điều đó làm cho mã khó chuyển qua hệ thống n máy chủ xây dựng. Tôi muốn biết nếu ai đó biết tại sao ANDROID_HOME không hoạt động và phải làm gì để nó hoạt động? Tôi đã thêm một chút thông tin vào câu hỏi.
Budius

Tôi đề nghị bạn đăng bài trong cộng đồng G + này. plus.google.com/cetworkities/114791428968349268860 Đây là một Cộng đồng Google chính thức. Thông thường nhóm Google trả lời nhanh chóng.
Gabriele Mariotti

vâng, tôi sẽ cho họ thử. Cảm ơn!
Budius

2
@Budius Tôi gặp trường hợp tương tự với thông báo lỗi. Giải pháp là thêm settings.gradletệp vào thư mục dự án.
JJD

Câu trả lời:


94

Tôi đã giải quyết vấn đề. Điều này làm việc cho tôi:

Trong

/ my_cản_project /

Tôi đã tạo một tệp có tên local.properies và đặt vào trong

sdk.dir = / my_cản_path_to / sdk

Trong giao diện điều khiển tôi cần làm

đặt ANDROID_HOME = / my_cản_path_to / sdk

Hi vọng điêu nay co ich.


8
Nó không khắc phục được sự cố vì các tệp local.properations phải là "Cục bộ" và không phải là phiên bản. (Cùng một vấn đề như Budius: Tôi muốn tập local.properties này trong máy tính xách tay của tôi để tạo xây dựng trong quá trình phát triển, Nhưng tôi không muốn tập tin này trong xây dựng máy tính của tôi bởi vì con đường SDK là không giống nhau)
Tobliug

7
Ít nhất là trên các cửa sổ, nó hoạt động sau chuỗi gạch chéo ngược sdk.dir = D: \\ Soft \\ adt-bundle-windows-x86_64-20140702 \\ sdk
Cheburek

@Tobulug: bạn có thể kiểm soát các tệp nào dưới sự kiểm soát phiên bản và không thêm hoặc bỏ chọn các tệp cục bộ
sivi

Sử dụng xuất thay vì thiết lập sửa chữa nó.
AugustoL

1
Đặt sai, tôi dùng xuất . Nhưng theo cách này, nếu bạn xuất Biến này, bạn không cần tệp local.properIES trong Thư mục Projekt của bạn. Để giữ cài đặt này trên mỗi lần khởi động lại, hãy thêm
dấu phẩy

52

Trên OSX , IntelliJ sẽ không chọn các biến môi trường bạn đã đặt trong .bash_profile hoặc .bash_rc, v.v.

Hãy thử điều này, thay thế giá trị của vị trí sdk của riêng bạn:

launchctl setenv ANDROID_HOME /usr/local/opt/android-sdk

Sau đó khởi động lại IntelliJ và Bob là chú của bạn.

Dưới đây là một tài liệu tham khảo cho vấn đề, nói chung hơn: https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/


4
FYI giải pháp này là dành cho osx.
Matthew Daumen

4
Vâng làm việc cho tôi trên elcapitan. launchctl setenv ANDROID_HOME ~/Library/Android/sdk
agmcleod

2
Hoặc bạn có thể chỉ cần ủy quyền các biến môi trường của bạn như launchctl setenv ANDROID_HOME $ANDROID_HOMElaunchctl setenv JAVA_HOME $JAVA_HOME
Vagif

Chỉ cần FYI, đối với OSX, sửa lỗi này cũng giúp xây dựng dòng lệnh thông qua lớp, khi xảy ra lỗi tương tự trong khi bạn đang sử dụng shell khác với bash (ví dụ zsh). Chỉ cần chạy lệnh này và khởi động lại cửa sổ terminal của bạn.
làm gián đoạn

30

Trong trường hợp của tôi settings.gradleđã mất tích.

Lưu tệp và đặt nó ở thư mục cấp cao nhất trong dự án của bạn, thậm chí bạn cũng có thể sao chép từ dự án khác.

Ảnh chụp màn hình tham khảo:

nhập mô tả hình ảnh ở đây

Hy vọng điều này sẽ tiết kiệm thời gian của bạn.


Hoặc ai đó đã không thêm mô hình con của bạn vào tệp settings.gradle. Tôi đã có một đàn em trong đội của chúng tôi đã không làm điều này sau khi thêm một mô hình con. Không chắc chắn IntellIJ của họ được cấu hình như thế nào nhưng điều này đã lãng phí một lượng thời gian không hề nhỏ của tôi.
Sốt

25

Điều này làm việc cho tôi:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew

1
bạn cũng có thể thêm dòng "xuất khẩu" ở trên vào ~ / .bashrc hoặc ~ / .bash_profile để làm cho nó vĩnh viễn ngay cả sau khi khởi động lại.
suther

19

Plugin Android Gradle vẫn đang trong giai đoạn thử nghiệm và đây có thể chỉ là một lỗi. Đối với tôi, cài đặt ANDROID_HOME hoạt động, nhưng chúng tôi có thể ở các phiên bản khác nhau (vui lòng thử lại với phiên bản mới nhất và cho tôi biết nếu nó hoạt động hay không).

Cũng đáng cài đặt biến môi trường ANDROID_SDK cũng như ANDROID_HOME.

Tôi đã thấy vấn đề với điều này trên một số máy, vì vậy chúng tôi tạo local.property trong những trường hợp đó - Tôi cũng nhận thấy rằng phiên bản Android Studio mới nhất sẽ tạo tệp này cho bạn và điền vào thuộc tính sdk.dir.

Lưu ý rằng bạn không nên kiểm tra local.properations vào kiểm soát phiên bản, chúng tôi đã thêm nó vào gitignore của chúng tôi để nó không can thiệp vào việc chuyển mã qua các hệ thống mà bạn xác định là vấn đề tiềm ẩn.


2
Xác định ANDROID_SDK không làm gì cho tôi.
Heath

Phiên bản nào của Gradle và plugin Android bạn đang sử dụng và bạn có tệp local.properIES không?
ZoFreX

2
thêm sdk.dir=/path/to/android/sdklàm việc cho tôi. Tôi đang chạy lớp như một phần của dự án được tạo bằng IntelliJ 13.0.2
Heath

Có vẻ như đây là một lỗi IntelliJ. youtrack.jetbrains.com/su/IDEA-119361
Heath

Cũng có thể có một lỗi trong IntelliJ hoặc Android Studio, nhưng câu hỏi ban đầu là về việc sử dụng Gradle từ dòng lệnh, dường như có lỗi riêng của nó (có thể có hoặc không liên quan đến vấn đề bạn đang gặp). Chỉnh sửa: Ngoài ra, trên hệ thống của tôi, IntelliJ không kế thừa các biến môi trường từ dòng lệnh, đây có thể là vấn đề của bạn?
ZoFreX

16

Vì bất kỳ lý do gì, tập lệnh phân lớp không nhận giá trị của ANDROID_HOME từ môi trường. Hãy thử chỉ định nó trên dòng lệnh một cách rõ ràng

$ ANDROID_HOME=<sdk location> ./gradlew

1
Một cái gì đó mạnh mẽ - điều này hoạt động cho ANDROID_HOME nhưng sẽ không hoạt động cho ANDROID_NDK_HOME. Tôi đã phải sử dụng local.properies cho sau này.
Andrew Smart

Cách giải quyết này không làm gì cho tôi (trong một container docker).
IgorGanapolsky

14

Tôi đã đối mặt với cùng một vấn đề, mặc dù tôi có tệp local.properIES trong mô-đun chính của mình và biến môi trường ANDROID_HOME được đặt ở cấp hệ thống.

Điều đã khắc phục vấn đề này là khi tôi sao chép tệp local.properIES trong mô đun dự án chính của tôi vào thư mục gốc của toàn bộ dự án (tức là thư mục mẹ vào mô đun chính của bạn)

Hãy thử sao chép tệp local.properIES bên trong các mô-đun và thư mục gốc. Nên làm việc.


1
Tôi nghĩ rằng tệp local.properIES được IDE tự động tạo. Tại sao cần phải sao chép thủ công hoặc di chuyển tệp này sang các thư mục khác?
IgorGanapolsky

13

Tôi đã gặp một vấn đề tương tự khi mở một kho lưu trữ git nhân bản. Tệp local.properIES được tự động thêm vào tệp .gitignore vì nó dành riêng cho môi trường xây dựng của mỗi máy và do đó không phải là một phần của repo.

Giải pháp là nhập dự án thay vì chỉ mở nó sau khi bạn đã sao chép nó từ git, điều này buộc studio android phải tạo tệp local.properations dành riêng cho máy của bạn:

Tệp >> Nhập dự án >>


12

MAC OSX:

  1. Mở Terminal và chỉnh sửa tập tin:

~/.bash_profile

thêm:

export ANDROID_HOME=~/Library/Android/sdk export PATH=${PATH}:${ANDROID_HOME}/tools export PATH=${PATH}:${ANDROID_HOME}/platform-tools

  1. Chạy:

    source ~/.bash_profile

  2. Khởi động lại Terminal và Android Studio


8

Cách thực hiện trên MAC OSX:

1) Mở Terminal và Chỉnh sửa: vi ~/.bash_profileNếu không có tệp nào ở đó, chỉ cần thêm nó.

2) Thêm (Thay đổi thành TÊN NGƯỜI DÙNG CỦA BẠN và thêm cái này):

#Java var home: JAVA_HOME="/usr/libexec/java_home" ANDROID_HOME="/Users/<YOUR USER NAME>/Library/Android/sdk"

3) Chạy source ~/.bash_profile.

4) Chạy echo $JAVA_HOME; echo $ANDROID_HOME;

5) Nếu đầu ra của bạn là:

/usr/libexec/java_home /Users/<YOUR USER NAME>/Library/Android/sdk

Vì vậy, bạn là tốt.

và studio android RESTART!

Và, hãy chắc chắn rằng bạn có java :)

java -version

Và lớp :)

gradle --version


trong suy nghĩ bạn đang mất tích:export ANDROID_HOME
Tới Kra

1
Tôi thiết lập ANDROID_HOMEvà sau đó thực thi source ~/.bash_profile, đây là permete (thực thi sourcelà tốt nếu bạn không muốn đăng xuất và đăng nhập hoặc khởi động lại). Trong trường hợp của bạn, với export ANDROID_HOME, sau khi khởi động lại hoặc đăng nhập, biến môi trường ANDROID_HOMEtrong mac sẽ biến mất.
Nimitack


4

Điều này làm việc cho tôi (Ubuntu):

Thêm ANDROID_HOME=/path/to/android-sdkvào /etc/environment.

Khởi động lại.


Tôi đã bối rối về điều này trong nhiều ngày và chỉ có điều này làm việc. Cảm ơn ngài.
Zygro

3

trong windows, tôi đặt ANDROID_HOME = E: \ android \ adt-bundle-windows-x86_64-20131030 \ sdk Sau đó, nó hoạt động như mong đợi.

Khi ở Linux, bạn cần đặt sdk.dir.

Kịch bản sử dụng hai biến khác nhau.


1
Tôi đã thêm nó, thêm vào tệp location.properations nhưng vẫn gặp phải vấn đề tương tự
Suneel Prakash

1
Trên Windows, đảm bảo bạn thoát khỏi dấu gạch chéo ngược trong đường dẫn. Tôi đã phải đi vào con đường như thếsdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk
Xsasan

2

Tôi có cùng một vấn đề, có vẻ như mã mẫu không thể tìm thấy môi trường Android, thay vào đó để cố gắng khắc phục rằng tôi chỉ xóa mã mẫu khỏi cài đặt. Nâng cấp và sau đó quá trình cài đặt diễn ra tốt đẹp.

sau đó chỉ cần nhập dự án trong nhật thực và thế thôi :)


2

Trong Linux, hãy thử chạy studio.sh từ một thiết bị đầu cuối và đặt ANDROID_HOME trong thiết bị đầu cuối này. Điều này làm việc cho tôi.


2

Nếu bạn đang sử dụng windows plantform, vui lòng thử chạy Android Studio với tư cách Quản trị viên


1

Chỉ cần xóa sdk.dir bên trong tệp local.preoperties và đặt biến môi trường ANDROID_HOME . Nó làm việc cho tôi.


Tệp local.properIES được IDE tự động tạo. Có phải nó được giả mạo?
IgorGanapolsky

1

xuất ANDROID_HOME = / xxx / xxx / trong shell, sau đó sử dụng nó bởi System.env.ANDROID_HOME trong tệp lớp.

PS: đừng quên các từ khóa 'xuất khẩu' để làm cho ANDROID_HOME toàn cầu.


Trong exportcâu trả lời này là quan trọng cần lưu ý. Tôi đã ANDROID_HOMExác định và thậm chí đã thêm nó vào PATH, nhưng nếu bạn không export ANDROID_HOME, gradle sẽ không thể tìm thấy nó.
lase

1

Tệp local.properIES của bạn có thể bị thiếu. Nếu vậy hãy thêm một tệp có tên 'local.properIES' bên trong /local.properIES và cung cấp vị trí sdk như sau.

sdk.dir = C: \ Users \\ AppData \ Local \ Android \ Sdk


1

Tôi đã đặt ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] cho biến môi trường của mình. Giải pháp đó hiệu quả với tôi.


0

Tôi vừa giải quyết chính xác vấn đề tương tự bằng cách thêm ANDROID_HOME làm biến toàn hệ thống. Trong Ubuntu, nó phải ở trong / etc / profile hoặc trong tệp script shell trong /etc/profile.d/

Sau đó đăng xuất và đăng nhập lại, bây giờ Gradle sẽ nhận ra biến ANDROID_HOME.


0

Tôi đã gặp một vấn đề tương tự. Bằng cách nào đó, tôi không có một thư mục xây dựng trong dự án của mình. Bằng cách sao chép thư mục này từ dự án khác vào dự án của tôi, tôi đã gặp vấn đề, điều này đã khắc phục vấn đề này.


0

Cài đặt Build-Tools 23.0.1 thay vì 23.0.2 đã khắc phục sự cố này cho tôi.


0

các giải pháp:

1 thêm "sdk.dir = path_of_sdk"

2 thực hiện gradlew với biến evn như sau:

$ ANDROID_HOME = path_of_sdk ./gradlw


0

Bạn nói rằng phiên bản local.properies tạo ra vấn đề cho bạn. Tôi đã hack cùng một tập lệnh sử dụng công cụ dòng lệnh Android để làm mới tệp local.properIES trên các máy có liên quan đến việc sản xuất. Các android cập nhật dự án lệnh, bên cạnh những local.properties sản xuất rất nhiều thùng rác không mong muốn (ít nhất là đối với tôi) đó là lý do cho tất cả những rm lệnh ở phần cuối của kịch bản.

#!/bin/bash
scname="$0"
echo "${scname}: updating local properties..."
ln -fs src/main/AndroidManifest.xml
android update project -t 24 -p "$(pwd)"
echo "${scname}: ...done"
echo "${scname}: removing android update project junk ..."
rm -v project.properties
rm -v build.xml
rm -v proguard-project.txt
rm -v AndroidManifest.xml
echo "${scname}: ...done"

Kịch bản này là điều đầu tiên chúng tôi chạy trên bất kỳ máy mới nào mà chúng tôi viết mã. Nó phải được chạy trong thư mục gốc của dự án. Tất nhiên, android studio có thể có cách xử lý GUI, nhưng tôi không biết vì tôi sử dụng trình chỉnh sửa khác. Tôi cũng không thể tuyên bố rằng giải pháp này là chung chung, nhưng nó "Hoạt động cho tôi" (tm).


0

Tôi đã phải đối mặt với cùng một vấn đề trên Ubuntu (cả hai local.propertiesANDROID_HOMEđã được thêm vào), nhưng việc xây dựng không thành công. Vì vậy, cách giải quyết là thêm các dòng sau

export ANDROID_HOME=/home/<user>/Android/Sdk export PATH=$PATH:/home/<user>/Android/Sdk/tools

trực tiếp đến studio.shkịch bản (bên trong /usr/local/android-studio/bin)

Có lẽ nó sẽ hữu ích.


0

Tôi đã gặp lỗi tương tự nhưng trong trường hợp của tôi, tôi đã sao chép một dự án, dự án nhân bản được xây dựng với API Android 22 mà tôi không cài đặt vào thời điểm đó (tôi đã cài đặt API 24 và 25) ....... tôi đã phải tải xuống các công cụ sdk cho API 22


0

Cho cửa sổ:

  1. Thêm ANDROID_HOME vào các biến môi trường: ANDROID_HOME = C: / Users / YOU_USERNAME / AppData / Local / Android / sdk
  2. Thêm% ANDROID_HOME% \ công cụ nền tảng vào PATH.

0

Trên hệ thống của tôi (Ubuntu 20.04 sau hai phiên bản nâng cấp từ 19.04), các triệu chứng như thể gradle(4.4.1 được cài đặt từ APT repos) đã bỏ qua ANDROID_HOMEbiến môi trường, trong khi chọn sdk.dirgiá trị từ local.propertieskhi tôi tạo.

Lý do dường như là javalệnh đó được đề cập openjdk version "11.0.7". Sau khi tôi cài đặt openjdk-8-jdkgói và update-alternatives --config javalàm mặc định javalà phiên bản 8 ( "1.8.0_252"), gradlebắt đầu hoạt động như mong đợi.


-3

Câu hỏi đó là từ tháng 11 năm 2013 (trong khi Android Studio vẫn ở chế độ Xem trước dành cho nhà phát triển),

Hiện tại (AS v2.2, tháng 8-2016) trong quá trình cài đặt, AS yêu cầu chọn thư mục SDK (hoặc cài đặt theo mặc định của chúng) và nó tự động áp dụng cho bất kỳ dự án nào bạn đang mở.

Điều đó có nghĩa là bất kỳ cách giải quyết hoặc sửa chữa nào cũng không liên quan vì vấn đề không thể tái tạo được nữa.


Điều đó không chính xác. Tôi hiện đang cố gắng giải quyết vấn đề tương tự, vẫn không gặp may, đã thử nhiều giải pháp có thể được đăng ở đây.
AndroidDev
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.