Cấu trúc dự án Android Studio (so với Cấu trúc dự án Eclipse)


109

Tôi đang cố gắng học cách phát triển Android và ban đầu tôi cảm thấy bối rối bởi các cấu trúc dự án khác nhau giữa Eclipse và Android Studio. Điều này gây khó khăn cho việc làm theo các hướng dẫn được thiết kế cho Eclipse. Bất cứ ai có thể cho tôi biết tại sao những khác biệt này tồn tại? Chúng có nên tồn tại không?

Ví dụ: nếu tôi định vị tệp R.java trong hai IDE khác nhau, các đường dẫn sẽ giống như sau:

Eclipse: app \ gen \ com.example.app \ R.java

Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java

Tại sao những con đường này lại khác nhau? Tại sao R.java của tôi lại nằm trong thư mục gỡ lỗi trong Android Studio? Điều này dẫn đến một số sai sót sớm, và nếu ai có hiểu biết sâu sắc về những khác biệt này, tôi sẽ đánh giá cao họ.


3
Tôi đã cố gắng đăng hình ảnh trong câu hỏi này, nhưng tôi cần ít nhất 10 danh tiếng. Tôi sẽ chỉnh sửa bài đăng để bao gồm các hình ảnh khi tôi đủ điều kiện.
Jesse

9
Tại sao bạn không sử dụng Eclipse để chỉ giải quyết các vấn đề cụ thể của Android chứ không phải nội dung IDE (đặc biệt là khi Android Studio đang ở chế độ xem trước truy cập sớm )?
Luksprog

3
Đã đồng ý. Trừ khi bạn có ít nhất một năm kinh nghiệm phát triển Android, còn IMHO, bạn không nên gây rối với Android Studio cho đến khi nó rời khỏi chế độ "xem trước quyền truy cập sớm".
CommonsWare

2
Tôi muốn nói thêm rằng bạn có thể sử dụng IntelliJ IDEA để thay thế, vì nó rất ổn định. Ngoài ra, một khi Android Studio ổn định hơn, việc chuyển sang nó sẽ rất dễ dàng vì chúng có cùng một IDE (với AS chỉ cung cấp tích hợp Android nâng cao).
free3dom

3
Tôi đã có 3 năm kinh nghiệm trong lĩnh vực phát triển Android bằng Eclipse và tôi thực sự cảm thấy khó khăn khi sử dụng A.Studio. Tôi ước ai đó đưa ra câu trả lời thẳng thắn vì đã đến lúc mọi người chuyển đi; Tôi đã chuyển đi. Tôi không muốn làm việc dựa trên linh cảm trong quá trình phát triển.
Dheeraj Bhaskar,

Câu trả lời:


203

Bí ẩn: Hệ thống xây dựng và cấu trúc dự án của Android Studio

Tôi không biết liệu điều này có phải là do Hệ thống xây dựng Gradle (tôi cá là vậy), nhưng tôi sẽ cho bạn biết những gì tôi đã hiểu cho đến nay.

Cập nhật 4: 2014/09/11 Đã thêm Cheat Sheet cho BuildTypes, FlavorsVariants(cuối cùng tôi cảm thấy tự tin khi viết cái này: D)
Cập nhật 3: 2014/09/11 Đã cập nhật chính xác các không gian làm việc và dự án so sánh
Cập nhật 2: 2014/04/17 Đã thêm chi tiết hơn vào cấu trúc dự án AS
Cập nhật 1: 2013/07/29 Đã thêm cấu trúc dự án IntelliJ

Cấu trúc Dự án của IntelliJ (được hiển thị ở cuối) dành cho IntelliJ với plugin android. Tuy nhiên, Android Studio có cấu trúc dự án được chia như sau:

Cấu trúc: Dự án và Mô-đun

mô-đun trong Android Studio giống như một dự án trong Eclipse

dự án trong Android Studio giống như một không gian làm việc trong Eclipse (chính xác là một không gian làm việc với các dự án phụ thuộc lẫn nhau)

Từ tài liệu (Android Studio dựa trên Intellij IDEA):

Dù bạn làm gì trong IntelliJ IDEA, bạn làm điều đó trong bối cảnh của một dự án. Dự án là một đơn vị tổ chức đại diện cho một giải pháp phần mềm hoàn chỉnh.

Sản phẩm hoàn chỉnh của bạn có thể được phân tách thành một loạt các mô-đun riêng biệt, rời rạc, nhưng đó là một định nghĩa dự án mang chúng lại với nhau và liên kết chúng thành một tổng thể lớn hơn.

Đối với Android, nó có nghĩa là một dự án cho mỗi ứng dụng và một mô-đun cho mỗi thư viện và mỗi ứng dụng thử nghiệm.

Có nhiều vấn đề nếu bạn cố gắng tạo nhiều ứng dụng trong cùng một dự án. Điều đó có thể xảy ra, nhưng nếu bạn thử (như tôi đã làm), bạn sẽ thấy rằng hầu hết mọi thứ đều được thiết kế để hoạt động với một ứng dụng duy nhất cho mỗi dự án.

Ví dụ: có một tùy chọn để "xây dựng lại dự án", điều này không có ý nghĩa gì với nhiều ứng dụng, nhiều cài đặt dự án khác sẽ vô dụng và hệ thống VCS tích hợp không tuyệt vời khi bạn có nhiều kho lưu trữ.

Cấu trúc: Cấu trúc thư mục

Cấu trúc dự án Android Studio

Thư mục cấp cao nhất

1. Dự án chính

Đây sẽ là toàn bộ bối cảnh dự án ( Eclipse Land: Giống như không gian làm việc của bạn nhưng giới hạn ở những gì có liên quan đến dự án của bạn). Ví dụ: HelloWorldProjectnếu tên của ứng dụng bạn đã cung cấp làHelloWorld

2. .idea

Đây là nơi siêu dữ liệu cụ thể của dự án được Android Studio (AS) lưu trữ. ( Eclipse Land: project.properties tập tin)

3. Mô-đun dự án

Đây là dự án thực tế. ví dụ: HelloWorldnếu tên ứng dụng của bạn mà bạn đã cung cấp là HelloWorld

4. gradle

Đây là nơi mà trình bao bọc jar của hệ thống xây dựng gradle tức là jar này là cách AS giao tiếp với gradle được cài đặt trong Windows (hệ điều hành trong trường hợp của tôi).

5. Thư viện bên ngoài

Đây thực ra không phải là một thư mục mà là nơi hiển thị các Thư viện Tham chiếu ( Eclipse Land: Referenced Libraries). Đây là nơi hiển thị Nền tảng được nhắm mục tiêu, v.v.

[ Ghi chú bên: Đây là nơi mà nhiều người trong chúng ta ở Eclipse Land đã sử dụng để xóa các thư viện được tham chiếu và Sửa thuộc tính dự án để sửa lỗi tham chiếu, nhớ không?]

Chi tiết Thư mục Dự án

Đây là vị trí thứ 3 trong danh sách trên. Có các dirs phụ sau

1. xây dựng

Điều này có tất cả đầu ra hoàn chỉnh của makequy trình, tức là các lớp.dex, các lớp và tài nguyên đã biên dịch, v.v.

Trong Android Studio GUI, chỉ một số thư mục được hiển thị. Phần quan trọng là R.java của bạn được tìm thấy ở đây dướibuild/source/<flavor>/r/<build type(optional)>/<package>/R.java

2. libs

Đây là libs chuẩn thư mục mà bạn nhìn thấy trong đất nhật thực quá

3. src

Ở đây, bạn chỉ nhìn thấy javaresthư mục mà tương ứng với các srcthư mục và resthư mục trong Eclipse đất . Đây là IMHO đơn giản hóa được hoan nghênh nhiều.

Lưu ý về Mô-đun:

Các mô-đun giống như các dự án Eclipse Land . Ở đây ý tưởng là bạn có một dự án ứng dụng (Mô-đun số 3 trong danh sách trên) và một số dự án thư viện (dưới dạng Mô-đun riêng biệt trong thư mục dự án toàn cầu (# 1 trong danh sách trên)) mà dự án ứng dụng phụ thuộc vào. Làm thế nào để các dự án thư viện này có thể được sử dụng lại trong các ứng dụng khác, tôi vẫn chưa tìm hiểu.

[ Lưu ý: Toàn bộ tổ chức lại có một số lợi ích như đơn giản hóa trong thư mục src, nhưng rất nhiều phức tạp. Các biến chứng chủ yếu là do tài liệu RẤT RẤT mỏng về bố cục dự án mới này.]

Hệ thống xây dựng mới

Hướng dẫn Sử dụng cho Hệ thống Xây dựng mới

Giải thích về hương vị và kiểu xây dựng, v.v. - Hullabaloo nói về cái gì?

CheatSheet cho hương vị và buildTypes

BuildType: debugreleasebuildTypessẵn theo mặc định trên tất cả các dự án. Chúng dùng để xây dựng / biên dịch CÙNG MÃ để tạo các APK khác nhau. Ví dụ: trên releaseAPK bạn muốn chạy proguard (để làm xáo trộn), hãy ký nó bằng khóa của bạn (như đối với khóa gỡ lỗi), chạy tối ưu hóa (có thể thông qua proguard hoặc các công cụ khác), sử dụng hơi khác packageNames(chúng tôi sử dụng com.company.productcho releasecom.company.product.debugcho debug), v.v ... Chúng tôi cũng sử dụng cờ gỡ lỗi ( BuildConfig.DEBUG) để tắt ghi nhật ký vào logcat (vì nó làm cho ứng dụng chạy chậm) trên các releasebản dựng. Điều này giúp tạo ra một bản debugdựng nhanh hơn trong quá trình phát triển nhưng cũng là một bản releasedựng được tối ưu hóa để đưa vào cửa hàng chơi.

Hương vị sản phẩm: Không có sẵn hương vị mặc định (hoặc nói chính xác, hương vị mặc định là trống / không tên). Flavorscó thể là phiên bản miễn phí hoặc phiên bản trả phí khi chúng có MÃ SỐ KHÁC NHAU . Chúng chia sẻ cùng một MainMã nhưng các phiên bản khác nhau (hoặc không có phiên bản) của một số tệp hoặc tài nguyên mã nguồn.

BuildVariant: A buildVariantlà APK được tạo thực sự tương ứng với. Chúng được đặt tên như vậy (theo thứ tự) Product Flavor+ Build Type=Build Variant .
Ví dụ 1: nếu bạn có freepaiddưới dạng hai hương vị. Các biến thể bản dựng mà bạn sẽ nhận được là:
Miễn phí - gỡ lỗi
Miễn phí - phát hành Có
trả tiền - gỡ lỗi Có
trả tiền - phát hành
Vì vậy, đó là 4 cấu hình APK có thể có. Một vài cấu hình có thể không có ý nghĩa trong một dự án cụ thể, nhưng chúng sẵn.

Ví dụ 2: (dành cho các dự án mới / không có phiên bản) Bạn có sẵn 2 buildVariantshoặc APK, vì phiên bản mặc định là không tên / trống: phát hành
gỡ lỗi

So sánh điều này với Cấu trúc dự án của Intellij nếu điều đó giúp:

Ảnh chụp cấu trúc dự án Intellij

Thư mục .idea (1) chứa một số thư mục con, chủ yếu chứa thông tin IntelliJ IDEA nội bộ.

Thư mục src (2) chứa mã nguồn tệp MyActivity.java (3) triển khai chức năng của ứng dụng của bạn. Tệp thuộc gói com.example.

Thư mục res (4) chứa nhiều tài nguyên trực quan khác nhau.

Tệp layout / main.xml (5) xác định diện mạo của ứng dụng được tạo thành từ các loại tài nguyên khác nhau.

Thư mục giá trị (6) dành để lưu trữ các tệp .xml mô tả các loại tài nguyên khác nhau. Hiện tại, thư mục chứa một tệp string.xml với các định nghĩa tài nguyên Chuỗi. Như bạn sẽ thấy từ phần Thêm màu, thư mục bố cục cũng có thể chứa, ví dụ, một bộ mô tả màu sắc.

Thư mục có thể vẽ (7) chứa hình ảnh.

Thư mục gen (8) chứa tệp R.java (9) liên kết tài nguyên trực quan và mã nguồn Java. Như bạn sẽ thấy từ các phần bên dưới, IntelliJ IDEA hỗ trợ tích hợp chặt chẽ giữa tài nguyên tĩnh và R.java. Ngay sau khi bất kỳ tài nguyên nào được thêm vào hoặc xóa bỏ, các lớp và trường lớp tương ứng trong R.java sẽ tự động được tạo hoặc xóa tương ứng. Tệp R.java cũng thuộc về gói com.example.


3
Cảm ơn bạn rất nhiều vì đã so sánh cấu trúc dự án Eclipse và Android Studio! Và vâng, tài liệu về cấu trúc dự án này và cách nó có thể được sử dụng trong phát triển hàng ngày là không tồn tại.
kpsfoo

1
"3. src Ở đây, bạn chỉ thấy thư mục java và res ..." Nói chính xác hơn, javaresnằm dưới src/main.
Code-Apprentice

Dưới đây là một số tài liệu về cấu trúc thư mục Android Studio: developer.android.com/sdk/installing/studio-build.html
David d C e Freitas

31

Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java

Tại sao những con đường này lại khác nhau? Tại sao R.java của tôi lại nằm trong thư mục gỡ lỗi trong Android Studio? Điều này dẫn đến một số sai sót sớm, và nếu ai có hiểu biết sâu sắc về những khác biệt này, tôi sẽ đánh giá cao họ.

Nói một cách đơn giản, Android Studio được định cấu hình để xây dựng Loại bản dựng gỡ lỗi trên hệ thống của bạn.

Eclipse / ADT được thiết kế để hỗ trợ một bản dựng duy nhất tại một thời điểm (theo những gì tôi có thể nói). Một trong những mục tiêu chính của hệ thống xây dựng mới ( từ hướng dẫn sử dụng ):

Make it easy to create several variants of an application, 
either for multi-apk distribution or for different flavors of an application

Vì vậy, khi Eclipse / ADT có thể tạo một R.javatệp, Android Studio hỗ trợ nhiều tệp. Phần được tạo R.javanằm trong debugthư mục vì theo mặc định, hệ thống xây dựng mới hỗ trợ debugreleasecác kiểu xây dựng khác nhau. Nếu bạn đã thay đổi biến thể xây dựng của mình (nút, góc dưới bên trái của AS) để phát hành AS sẽ tạo ra R.javatrong releasethư mục.

Điều này có thể không có ý nghĩa gì đối với các dự án đơn giản, nhưng sự hỗ trợ của Build Variants có nghĩa là sự đơn giản hóa mạnh mẽ quy trình xây dựng đối với nhiều nhà phát triển, bao gồm cả dự án mà tôi đang thực hiện.

Dự án của chúng tôi hỗ trợ 4 phiên bản với 2 loại xây dựng (gỡ lỗi và phát hành), để hỗ trợ tổng cộng 8 tổ hợp APK khác nhau. Và mỗi sự kết hợp đó có cấu hình hơi khác nhau, vì vậy hệ thống xây dựng này thực sự hiệu quả với chúng tôi. Studio android của tôi được cài đặt trên một máy khác, nhưng nếu bộ nhớ phục vụ đúng cách thì R.javatệp sẽ tồn tại trong đó build/source/<flavor>/r/<build type>/package/R.java. Khi máy chủ CI của chúng tôi tạo các tệp APK, nó sẽ sử dụng từng R.javatệp này để tạo các gói riêng biệt.


0

Google Ngừng hỗ trợ cho Công cụ nhà phát triển Android (ADT) trong Eclipse sắp kết thúc, theo thông báo của chúng tôi. Bạn nên chuyển các dự án phát triển ứng dụng của mình sang Android Studio càng sớm càng tốt. Để biết thêm thông tin về cách chuyển sang Android Studio, hãy xem Chuyển sang Android Studio.

Vì vậy, công cụ phát triển tốt nhất cho Android dành cho Android Studio chỉ dành cho tất cả các hỗ trợ trong tương lai của Android M ---


Eclipse cho Android Developers - eclipse.org/downloads/packages/...
Yousha Aleayoub

-2

Đối với android Studio 3.0.1 và đã chọn tất cả các tính năng:

  • Android O mới nhất
  • Android Auto
  • Những thứ Android
  • Android wear
  • Android TV
  • Hỗ trợ C ++
  • Kotlin hỗ trợ

Cấu trúc trong phiên bản 3.0.1 không giống với tất cả các câu trả lời khác.

Cấu trúc gần đây được hiển thị vào năm 2018, Android Studio 3.0.1 01/2018.

Newbie kinda đã tìm thấy thứ gì đó tương tự như có thể sử dụng được trong thư mục con của tính năng:

Cập nhật Android Studio 3.0.1 01_2018 của bạn:

Mẹo công cụ:

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.