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
, Flavors
và Variants
(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
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ụ: HelloWorldProject
nế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ụ: HelloWorld
nế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 make
quy 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 java
và res
thư mục mà tương ứng với các src
thư mục và res
thư 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: debug
và release
có buildTypes
sẵ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 release
APK 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.product
cho release
và com.company.product.debug
cho 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 release
bản dựng. Điều này giúp tạo ra một bản debug
dựng nhanh hơn trong quá trình phát triển nhưng cũng là một bản release
dự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). Flavors
có 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 Main
Mã 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 buildVariant
là 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ó free
và paid
dướ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 có 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 buildVariants
hoặc APK, vì phiên bản mặc định là không tên / trống:
phát hành
gỡ lỗi
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.