Studio Android thêm dự án bên ngoài để build.gradle


139

Tôi có một dự án mẫu, với các thiết lập sau:

/root
  + Pure Java Lib
  + Android Test Lib
  + Android Test Project

Trường hợp Project Dự án thử nghiệm 'phụ thuộc vào' Thử nghiệm Lib 'và cuối cùng phụ thuộc vào ' Biên dịch Java thuần túy ' Biên dịch dự án và khởi chạy thiết lập này hoạt động tốt.

Bây giờ tôi đang suy nghĩ về việc nhập không gian làm việc Eclipse trước đây của mình và làm việc với studio Android, vấn đề là thiết lập dự án là khác nhau và tôi muốn giữ nó theo cách này.

ví dụ nếu sử dụng ví dụ trước:

/root
  + Android Test Lib
  + Android Test Project

/Some Other folder (another repository for example)
  + Pure Java Lib

Tôi đã thử nhiều cấu hình, nhưng tôi không tìm thấy cách nào để tham chiếu một dự án ngoài phạm vi của thư mục mẹ (' root ' trong trường hợp ví dụ).

Trong nhiều nền tảng / mô-đun, bạn có thể sử dụng '..' để di chuyển lên trong các thư mục nhưng điều này không hiệu quả với tôi, có lẽ tôi đã sử dụng sai.

Có ai biết làm thế nào điều này có thể đạt được với Gradle?

CẬP NHẬT

Tôi sẽ cố gắng để chung chung hơn:

/C:/

  /Project A
    + Module 1 - Pure Java
    + Module 2 - Android Test Lib
    + Module 3 - Android Test Project

  /Project B
    + Module 1 - Pure Java
    + Module 2 - Pure Java
    + Module 3 - Pure Java

Tôi muốn sử dụng Module 1 của dự án B , trong dự án A .


CẬP NHẬT: 09-03-19

Tôi đã thấy điều này ngay bây giờ và tôi phải cập nhật ... sau gần 6 năm, hôm nay tôi khôn ngoan hơn và tôi chắc chắn có thể nói vấn đề là tôi đã hiểu sai khái niệm "Nguồn sự thật".

Mặc dù có một tham chiếu đến thư viện là một khái niệm hay .. và có thể giống như "Nguồn sự thật", "Nguồn chân lý" THỰC SỰ sẽ là phiên bản mã mà mỗi dự án đang sử dụng của thư viện đó, vì bản thân thư viện có các phiên bản .. nhiều phiên bản "Nguồn sự thật" có liên quan đến dự án đang sử dụng thư viện.

Cách chính xác sẽ là sử dụng những gì hầu hết các nhà phát triển không thích, và đó là các mô đun con git và có trùng lặp các nguồn trong mỗi dự án vì hầu hết các dự án sử dụng một phiên bản mã khác nhau.

Tuy nhiên, bạn sẽ cần nhắm đến tất cả các dự án của mình để sử dụng phiên bản mới nhất và lớn nhất của tất cả các thư viện của bạn .. đó là một thách thức của chính nó

Lý do đây là cách phù hợp để phát triển một dự án với các nguồn thư viện là vì quy mô này ... bạn có thể có hàng trăm dự án với mỗi cấu hình thư viện riêng.


4
Tôi thấy câu hỏi này được chú ý ... Sau khi cố gắng thực sự rất khó khăn, tôi đã từ bỏ studio Android, vì sự phức tạp của thiết lập mà tôi đang cố gắng xây dựng là quá nhiều, và việc xây dựng dự án cuối cùng của tôi là có thể thực hiện được, nhưng rất không ổn định. với mỗi lần ra mắt của studio Android, tôi phải thiết lập lại một số tham số và khiến quá trình xây dựng hoạt động theo cách thủ công. đã được khoảng hai tháng kể từ khi tôi từ bỏ, và tôi hy vọng mọi thứ sẽ tốt hơn bây giờ!
TacB0sS

Cách tiếp cận 2 ở đây giải thích cách thực hiện việc này rất dễ dàng: stackoverflow.com/questions/25610727/iêu
Doron Ben-Ari

Câu trả lời:


222

Giả sử rằng Một số Thư mục khác là một dự án cấp, bạn có thể thêm một cái gì đó như sau vào tệp settings.gradle của bạn:

include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')

1
Một sốOtherFolder trỏ đến một thư mục dự án và trong đó có các mô-đun, mà tôi quan tâm để thêm làm mô-đun cho dự án Android Lib
TacB0sS

Các thư mục cài đặt trỏ đến 'root' Tôi cần tăng cấp độ, đến một mô-đun khác trong dự án khác.
TacB0sS

bạn có thể thêm các mô hình con sau đó không? bao gồm ': someOtherFolder: proj1'
Ethan

1
cập nhật với một số chi tiết. settings.gradle nên có trong / Project A
Ethan

5
Câu trả lời chính xác. Trong AS 1.0.2, tôi cũng cần thực hiện các thao tác sau: Mô-đun nhấp chuột phải -> Mở Cài đặt mô-đun -> Phụ thuộc -> + (dưới cùng), chọn Phụ thuộc mô-đun, chọn thư viện của bạn từ danh sách, nhấp ok :)
T. Coutlakis

49

Bạn phải đặt trong cài đặt tệp của mình. Nâng cấp dòng này:

include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')

Sau đó, bạn phải thêm vào builde.gradle (Module: ứng dụng) của bạn trong cây phụ thuộc , dòng này:

implementation project(':module2')

hoặc đi vào Cấu trúc dự án > ứng dụng > Phụ thuộc , nhấp vào Thêm , chọn 3 Phụ thuộc mô-đun và chọn mô-đun của bạn


1
Nếu bạn gặp vấn đề với việc tham chiếu các lớp của thư viện từ ứng dụng chính, thì điều này là do thư viện có thể có các biến thể khác nhau. Vì vậy, chỉ cần xác định sự phụ thuộc một cách thích hợp : compile project(path: ':library', configuration: 'variant'). Ở đây, variantbao gồm flavorbuildTypenhư được định nghĩa bởi build.gradletệp của thư viện . Ví dụ, nếu bạn muốn releasexây dựng kiểu thư viện trong một develophương vị, thì variantdevelopRelease.
Sevastyan Savanyuk

9

Với Gradle 1.10 (không biết phiên bản nào khác sẽ hợp lệ) đây là những gì tôi đã đưa ra dựa trên phản hồi được đưa ra ở đây http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

Tôi có một dự án thư viện api, một dự án thư viện chung và dự án ứng dụng chính. Mỗi dự án là một dự án phát triển độc lập và hai thư viện có nghĩa là được chia sẻ giữa nhiều ứng dụng.

Trong cài đặt. Nâng cấp cho dự án chung:

def apiLibDir = file('../android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'

Sau đó, trong cài đặt dự án ứng dụng chính. Nâng cấp:

def apiLibDir = file('../android-libs/android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'

def commonLibDir = file('../android-libs/android-common/android-common-lib')
settings.createProjectDescriptor(rootProjectDescriptor, 'android-common-lib', commonLibDir)
include ':android-common-lib'

Trong mỗi tệp build.gradle tương ứng, bạn chỉ cần tham chiếu chúng theo tên mà bạn đã đặt cho chúng trong settings.createProjectDescriptor giống như bất kỳ phụ thuộc dự án nào khác:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':android-api-lib')
    compile project(':android-common-lib')
}

Điều này dường như làm việc. Nó thậm chí không gây ra lỗi cho nhiều tệp DEX xác định thư viện api, tôi nghi ngờ vì tất cả đều là một phần của cùng một quá trình xây dựng và Gradle đủ thông minh để tìm ra tất cả.


2
Tôi tiếp tục thử điều này nhưng vấn đề là các phụ thuộc trong thư viện tương ứng dường như không bao giờ được tải. Vì vậy, nếu tôi chỉ mở thư viện thì có vẻ ổn nhưng khi tôi thử nó từ ứng dụng chính, nó nói rằng tất cả các thư viện đã nhập bị thiếu.
Công nghệ

@ Công nghệ Có vấn đề tương tự. Giải quyết nó. Xem nhận xét của tôi cho câu trả lời này: stackoverflow.com/a/29603354/7408927
Sevastyan Savanyuk

9

Nhấp chuột phải vào dự án - Chọn "Mở cài đặt mô-đun" - Chọn "Mô-đun" trong khung bên trái - Nhấp vào biểu tượng "+" ở trên cùng - Chọn "Nhập mô-đun".

Sau khi nhập Module. Bạn cần thêm nó như một phụ thuộc cho dự án hiện tại của bạn.

Giữ "Mô-đun" được chọn trong khung bên trái và nhấp vào dự án của bạn - Bây giờ, hãy vào tab phụ thuộc và nhấp vào biểu tượng "+" nằm ở dưới cùng - Chọn tùy chọn thứ ba "Phụ thuộc mô-đun" và nếu bạn đã nhập chính xác dự án của mình, nó sẽ hiển thị cho bạn tất cả các mô-đun có sẵn có thể được thêm vào như một phụ thuộc vào dự án hiện tại của bạn.


Điều này gần như hoạt động ... dự án không thể được xây dựng vì đầu ra của mô đun phụ thuộc không được thêm vào tệp build.gradle, đây chính xác là vấn đề ban đầu của tôi.
TacB0sS

Tôi nghĩ với gradle, bạn cần đặt tất cả các dự án vào cùng một thư mục gốc. Hãy thử điều đó. Đặt dự án bạn muốn thêm làm phụ thuộc vào cùng thư mục với dự án hiện tại của bạn.
Varundroid

Đây là điều không ai muốn làm ngoài ATM nếu bạn muốn làm việc với Android Studio, đây là cách để mọi thứ hoạt động. Một cách khác mà tôi đang theo là, tôi tạo dự án trong Intellij thiết lập tất cả các phụ thuộc và sau đó nhập dự án đó vào studio Android, bằng cách này, tôi buộc Android Studio sử dụng hệ thống xây dựng kiến ​​thay vì Gradle. Hy vọng nó giúp. Chúc mừng !!
Varundroid

1
@Varundroid, giải pháp đầu tiên là nhập tham chiếu đến thư viện độc lập bằng câu trả lời của Ethan. Sau đó thêm mô-đun vào phần phụ thuộc của ứng dụng chính bằng câu trả lời của bạn. Điều này cho phép bạn tham chiếu cùng một thư viện trong nhiều ứng dụng mà không phải sao chép mã thư viện.
bcorso

1

Tôi hỏi lại câu hỏi này theo cách đòi hỏi ý định của người đăng ban đầu tại Làm thế nào để chúng tôi tham khảo các Thư viện Android và Java tùy chỉnh sống bên ngoài thư mục của Dự án Android chính của chúng tôi?

Ở đó tôi trả lời câu hỏi của riêng tôi. Về cốt lõi, câu trả lời của tôi sử dụng @ Ethan's (tác giả của câu trả lời được chọn trong luồng hiện tại) phân loại mã hóa sâu sắc. Nhưng câu trả lời của tôi cũng điều hướng một số vấn đề khác và cung cấp một ví dụ chi tiết từng bước.


-1

Như Ethan đã nói, nếu bạn thêm phần này vào cài đặt của mình. Nâng cấp, nó sẽ thêm một dự án bên ngoài vào Android Studio (trong ví dụ này, nó nằm trong thư mục mẹ):

project(':../ProjectB/:module1')

Sau đó, để thêm nó dưới dạng phụ thuộc của một trong các dự án của bạn, chỉ cần thêm nó vào build.gradle của dự án đó như một phụ thuộc khác như thế này (bạn cũng có thể thực hiện đồ họa như ở đây ):

compile project(':../ProjectB/:module1')
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.