Cách tạo dự án thư viện trong Android Studio và dự án ứng dụng sử dụng dự án thư viện


164

Tôi mới sử dụng hệ thống xây dựng lớp và IntelliJ.

Vậy làm cách nào để tôi tạo Dự án Thư viện Android (ví dụ: com.myapp.lib1) và dự án ứng dụng (ví dụ: com.myapp.app) và tạo hệ thống xây dựng bao gồm com.myapp.lib1 trong dự án ứng dụng?

Tôi đã đi đến Cấu trúc dự án -> Mô-đun -> Dự án ứng dụng của tôi và thêm một phụ thuộc vào dự án lib. IntelliJ hiện có thể nhận ra các lớp từ dự án lib khi được sử dụng trong dự án ứng dụng, nhưng khi tôi chạy dự án ứng dụng, có các lỗi như:

Gradle: error: package com.myapp.lib1 does not exist

1
Tôi đã sử dụng Thư viện Android để xây dựng các phiên bản Miễn phí / Trả phí cho ứng dụng của mình. Hệ thống xây dựng Gradle mới làm cho cách tiếp cận này trở nên lỗi thời với khái niệm Build Variants. Bây giờ bạn có thể tự động xây dựng các APK đã ký khác nhau từ cùng một mã. Tôi ước tôi đã biết điều này sớm hơn.
báo

1
@ thec Dixsensation - Bạn có thể giải thích? Sau khi tải lên APK cho phiên bản đầy đủ, tôi đã cố tải lên APK cho phiên bản miễn phí, nhưng sử dụng cùng tên gói. Cửa hàng Google Play (GPS) đã gửi cho tôi thông báo cho biết tôi đã sử dụng tên gói đó. Những gì bạn nói về gradle có nghĩa là tôi không cần hai ứng dụng riêng biệt trong hai gói riêng biệt?
DSlomer64

Dưới đây là câu trả lời hoàn hảo stackoverflow.com/a/31366602/1118772 . Aqib Mumtaz đã đề cập trong các câu trả lời, nhưng cuối cùng thì nó. Thay vì lãng phí thời gian cho những cách khác, bạn có thể đi với điều này. philosophicalhacker.com/2014/10/02/ móc
Noundla Sandeep

Chủ đề thú vị thêm Thư viện . Với lời giải thích bằng hình ảnh.
Harish

Câu trả lời:


111

Để tạo thư viện:

Tệp> Mô-đun mới

chọn Thư viện Android

Thiên Bình

Để sử dụng thư viện, hãy thêm nó làm phần phụ thuộc:

Tệp> Cấu trúc dự án> Mô-đun> Phụ thuộc

dep

Sau đó thêm mô-đun (thư viện Android) làm phụ thuộc mô-đun.

thêm mô-đun

Chạy dự án của bạn. Nó sẽ làm việc.


194
Điều này tạo ra các tệp của mô-đun trong dự án. Điều gì sẽ xảy ra nếu bạn muốn mô-đun nằm ngoài dự án để có thể sử dụng nó với một ứng dụng khác?
rrbrambley

2
@rrbrambley: Tôi đã tìm thấy cách sử dụng lại một mô-đun trong nhiều dự án. Tôi đã tạo các liên kết thư mục (NTFS Junction) bằng một ứng dụng có tên là winbolic link cho Windows. Khi tôi có một mô-đun mà tôi muốn sử dụng lại trong nhiều dự án, tôi tạo một liên kết thư mục đến dự án sẽ được sử dụng lại trong thư mục của từng dự án để sử dụng nó. Sau này, tôi thêm phần phụ thuộc mô-đun (trong Andr. Studio). Bây giờ tôi có thể sử dụng / chỉnh sửa mô-đun trong mỗi dự án trong khi giữ đồng bộ. Không chắc chắn nếu đó là cách đúng đắn để đi, nhưng bây giờ nó có vẻ hoạt động khá tốt! Điều này hoạt động tốt hơn so với một repo maven địa phương.
Peter

1
Thật không may, kể từ tháng 7 năm 2014, không còn cài đặt Dự án như cài đặt được hiển thị trong màn hình. Tôi đã phải đi chỉnh sửa các tập tin. Rever như trong câu trả lời của GrkEngineer bên dưới.
Tim Bray

24
Điều này nên được bỏ phiếu vì điều này tạo ra một mô-đun từ trong một dự án hiện có
Jonathan

2
Nếu bạn muốn sử dụng cùng lib trong các dự án khác, bạn phải sao chép mô-đun thư viện vào dự án đó và định cấu hình cài đặt. Nâng cấp và xây dựng mô-đun chính bằng tay.
hanoo

114

Tôi tự hỏi tại sao không có ví dụ về dự án jar độc lập.

Trong nhật thực, chúng ta chỉ cần chọn hộp "Is Library" trong hộp thoại thiết lập dự án.
Trong studio Android, tôi đã làm theo các bước này và nhận được một tệp jar.

  1. Tạo một dự án.

  2. mở tệp trong menu dự án bên trái. (app / build.gradle): Gradle Sc scripts> build.gradle (Module: XXX)

  3. thay đổi một dòng: apply plugin: 'com.android.application'->'apply plugin: com.android.library'

  4. xóa applicationId trong tệp: applicationId "com.mycompany.testproject"

  5. xây dựng dự án: Xây dựng> Dự án xây dựng lại

  6. sau đó bạn có thể lấy tệp aar: app> build> output> thư mục aar

  7. thay đổi aartên phần mở rộng tập tin thànhzip

  8. giải nén, và bạn có thể thấy classes.jartrong thư mục. đổi tên và sử dụng nó!

Dù sao, tôi không biết tại sao google làm cho việc tạo jar trở nên rắc rối trong studio android.


1
Hoạt động với tôi trên Android Studio 2.2.2 dec. 2016.
Herman

95

Plugin Gradle của Google được đề xuất cách định cấu hình các tệp lớp của bạn để xây dựng nhiều dự án có một số thiếu sót Nếu bạn có nhiều dự án tùy thuộc vào một dự án thư viện, bài đăng này giải thích ngắn gọn về cấu hình được đề xuất của Google, các thiếu sót của nó và đề xuất một cách khác để định cấu hình các tệp lớp của bạn hỗ trợ thiết lập nhiều dự án trong Android Studio:

Thiết lập đa hướng thay thế cho studio android

Một cách khác :

Hóa ra có một cách tốt hơn để quản lý nhiều dự án trong Android Studio. Mẹo nhỏ là tạo các dự án Android Studio riêng cho các thư viện của bạn và thông báo cho lớp rằng mô-đun cho thư viện mà ứng dụng của bạn phụ thuộc vào nằm trong thư mục dự án của thư viện. Nếu bạn muốn sử dụng phương pháp này với cấu trúc dự án mà tôi đã mô tả ở trên, bạn sẽ làm như sau:

  1. Tạo một dự án Android Studio cho thư viện DínhListHeaders
  2. Tạo dự án Android Studio cho App2
  3. Tạo dự án Android Studio cho App1
  4. Định cấu hình App1 và App2 để xây dựng các mô-đun trong dự án DínhListHeaders.

Bước thứ 4 là phần khó, vì vậy đó là bước duy nhất tôi sẽ mô tả chi tiết. Bạn có thể tham chiếu các mô-đun bên ngoài vào thư mục dự án của bạn bằng cách thêm một câu lệnh dự án vào tệp settings.gradle và bằng cách đặt thuộc tính projectDir trên đối tượng ProjectDescriptor được trả về bởi câu lệnh dự án đó:

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

Mã người ta phải đặt vào settings.gradle:

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

Nếu bạn đã thực hiện điều này một cách chính xác, bạn sẽ nhận thấy rằng các mô-đun được tham chiếu bởi dự án của bạn sẽ hiển thị trong trình điều hướng dự án, ngay cả khi các mô-đun đó nằm ngoài thư mục dự án:

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

Điều này cho phép bạn làm việc trên mã thư viện và mã ứng dụng đồng thời. Tích hợp kiểm soát phiên bản cũng hoạt động tốt khi bạn tham chiếu các mô-đun bên ngoài theo cách này. Bạn có thể cam kết và đẩy các sửa đổi của mình vào mã thư viện giống như bạn có thể cam kết và đẩy các sửa đổi vào mã ứng dụng của mình.

Cách thiết lập nhiều dự án này sẽ tránh được những khó khăn gây khó khăn cho cấu hình được đề xuất của Google. Bởi vì chúng tôi đang tham chiếu một mô-đun nằm ngoài thư mục dự án, chúng tôi không phải tạo thêm các bản sao của mô-đun thư viện cho mọi ứng dụng phụ thuộc vào nó và chúng tôi có thể phiên bản các thư viện của mình mà không có bất kỳ loại mô hình con nào vô nghĩa.

Thật không may, cách khác để thiết lập nhiều dự án là rất khó tìm. Rõ ràng, đây không phải là thứ bạn sẽ tìm ra khi xem hướng dẫn của Google và tại thời điểm này, không có cách nào để định cấu hình dự án của bạn theo cách này bằng cách sử dụng Giao diện người dùng của Android Studio.


4
Đây là câu trả lời hoàn hảo. Cảm ơn.
Noundla Sandeep

1
Câu trả lời tốt, nhưng bạn nên sao chép các bit có liên quan từ bài đăng sang câu trả lời của bạn trong trường hợp liên kết bị hỏng.
Greyson Parrelli

2
LƯU Ý: để đánh giá chuỗi trong lớp, bạn phải sử dụng dấu ngoặc kép ("). Điều này" tiết kiệm trong ngày "cho tôi. Liên kết với điều này
Solata

1
Làm thế nào để chúng ta tham chiếu mã thư viện từ mã ứng dụng? Sau khi làm theo hướng dẫn thiết lập của bạn, mã ứng dụng vẫn không thể tham chiếu đến một gói trong mã thư viện. Có một bước bổ sung cần phải được thực hiện?
CEGRD 18/03/2016

2
@CEGRD Bạn cần vào Tệp> Cấu trúc dự án và nhấp vào tên của mô-đun bạn đang làm việc. Sau đó, chuyển đến tab phụ thuộc> nhấp vào '+' rồi 'Phụ thuộc mô-đun' trong menu thả xuống. Sau đó, bạn có thể thêm mô-đun library1 vào dự án hiện tại của bạn.
OliasailO

45

Kiểm tra liên kết này về thiết lập nhiều dự án .

Một số điều cần chỉ ra, đảm bảo bạn đã cài đặt. Cập nhật để tham khảo cả mô-đun ứng dụng và thư viện.

cài đặt. Nâng cấp: include ':app', ':libraries:lib1', ':libraries:lib2'

Đồng thời đảm bảo rằng build.gradle của ứng dụng có phần sau:

dependencies {
     compile project(':libraries:lib1')
}

Bạn nên có cấu trúc sau:

 MyProject/
  | settings.gradle
  + app/
    | build.gradle
  + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

Build.gradle của ứng dụng nên sử dụng com.android.applicationplugin trong khi build.gradle của bất kỳ thư viện nào cũng nên sử dụngcom.android.library plugin.

IDE Android Studio sẽ cập nhật nếu bạn có thể xây dựng từ dòng lệnh với thiết lập này.


Là plugin được định nghĩa trong build.gradle là sự khác biệt duy nhất? tức là bạn có thể thay đổi một mô-đun hiện có thành một thư viện Android bằng cách thay đổi một dòng đó không?
Enrico

22
Một ngày nào đó, chúng tôi sẽ nhấp vào nút nhập và thư viện sẽ hoạt động, sau đó chúng tôi sẽ bắt đầu nhập mã trong trình chỉnh sửa.
Steve M

6
Cách tiếp cận này dường như bao gồm các thư viện trong dự án thực tế. Điều OP muốn là biết cách tạo một dự án thư viện Android riêng biệt sống trong dự án / không gian riêng của mình và chỉ được đưa vào dự án ứng dụng chính dưới dạng lib
Jonathan

@SteveM Đó là vấn đề của tôi trong suốt sự nghiệp của tôi. Tôi chỉ bắt đầu viết mã mà không cần thiết kế. Và sau đó dành hàng giờ để gỡ lỗi và tái cấu trúc.
Rajkiran

13

Đối với Intellij IDEA (và Android Studio), mỗi thư viện là một Mô-đun. Hãy nghĩ về một Mô-đun trong Android Studio tương đương với dự án trong Eclipse. Dự án trong Android Studio là một tập hợp các mô-đun. Các mô-đun có thể là các ứng dụng chạy được hoặc các mô-đun thư viện.

Vì vậy, để thêm một dự án thư viện Android mới, bạn cần tạo một mô-đun loại "thư viện Android". Sau đó thêm mô-đun thư viện này vào danh sách phụ thuộc của mô-đun chính (mô-đun ứng dụng).


12

Cách đơn giản nhất để tôi tạosử dụng lại một dự án thư viện:

  1. Trên một dự án đã mở file > new > new module(và trả lời các câu hỏi UI)

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

  1. kiểm tra / hoặc thêm nếu trong cài đặt tập tin. Nâng cấp :include ':myLibrary'
  2. kiểm tra / hoặc thêm nếu trong tệp build.gradle :

    dependencies { ... compile project(':myLibrary') }

  3. Để sử dụng lại mô-đun thư viện này trong dự án khác, hãy sao chép thư mục của nó trong dự án thay vì bước 1 và thực hiện các bước 2 và 3.

Bạn cũng có thể tạo một dự án ứng dụng phòng thu mới Bạn có thể dễ dàng thay đổi mô-đun ứng dụng hiện có thành mô-đun thư viện bằng cách thay đổi gán plugin trong tệp build.gradle thành com.android.l Library.

apply plugin: 'com.android.application'

android {...}

đến

apply plugin: 'com.android.library'

android {...}

thêm ở đây


Nếu bạn thay đổi mô-đun ứng dụng hiện có thành mô-đun thư viện bằng cách thay đổi gán gán plugin, bạn cũng sẽ phải xóa dòng `applicationId" com .... "khỏi tệp lớp.
TDG

"CẢNH BÁO: Cấu hình 'biên dịch' đã lỗi thời và đã được thay thế bằng 'triển khai' và 'api'."
slhck

9

Bạn có thể thêm một mô-đun mới vào bất kỳ ứng dụng nào như Blundell nói về câu trả lời của mình và sau đó tham chiếu nó từ bất kỳ ứng dụng nào khác.

Nếu bạn muốn di chuyển mô-đun đến bất kỳ nơi nào trên máy tính của bạn, chỉ cần di chuyển thư mục mô-đun (mô-đun hoàn toàn độc lập), thì bạn sẽ phải tham chiếu mô-đun.

Để tham khảo mô-đun này, bạn nên:

  • Trên tệp build.gradle của ứng dụng của bạn thêm:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • Trên tệp settings.gradle thêm vào như sau:

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    

ví dụ project(':library').projectDir = new File('../library')nơi librarylà tên thư mục trong song song với thư mục android của dự án.
Ai đó ở đâu đó

5

Đừng quên sử dụng apply plugin: 'com.android.library'trong build.gradleplugin thay vì áp dụng:'com.android.application'


4

Cách thức tài liệu

Đây là cách được đề xuất theo lời khuyên được đưa ra trong tài liệu Android Studio.

Tạo một mô-đun thư viện

Tạo một dự án mới để đưa thư viện của bạn vào. Bấm vào Tệp> Mới> Mô-đun mới> Thư viện Android> Tiếp theo> (chọn tên)> Kết thúc . Sau đó thêm bất kỳ lớp nào và cung cấp lại bạn muốn vào thư viện của bạn.

Khi bạn xây dựng mô-đun, tệp AAR sẽ được tạo. Bạn có thể tìm thấy nó trong project-name/module-name/build/outputs/aar/.

Thêm thư viện của bạn làm phụ thuộc

Bạn có thể thêm thư viện của mình dưới dạng phụ thuộc vào một dự án khác như thế này:

  1. Nhập thư viện tệp AAR của bạn với Tệp> Mô-đun mới> Nhập gói .JAR / .AAR> Tiếp theo> (chọn vị trí tệp)> Kết thúc . (Không nhập mã, nếu không nó sẽ có thể chỉnh sửa ở quá nhiều nơi.)
  2. Trong tệp settings.gradle, đảm bảo tên thư viện của bạn ở đó.

    include ':app', ':my-library-module'
    
  3. Trong tệp build.gradle của ứng dụng, thêm dòng biên dịch vào phần phụ thuộc:

    dependencies {
        compile project(":my-library-module")
    }
    
  4. Bạn sẽ được nhắc đồng bộ hóa dự án của bạn với gradle. Làm đi.

Đó là nó. Bạn sẽ có thể sử dụng thư viện của bạn bây giờ.

Ghi chú

Nếu bạn muốn làm cho thư viện của mình dễ dàng có sẵn cho đối tượng lớn hơn, hãy xem xét sử dụng JitPac hoặc JCenter .


3

Có cùng một câu hỏi và giải quyết nó theo cách sau:

Tình huống bắt đầu :

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

Mục tiêu : muốn thêm một mô-đun có têndataformats

  1. Thêm một mô-đun mới (ví dụ Java Library:)
  2. Đảm bảo settings.gradlegiao diện của bạn như thế này (thường tự động):

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. Đảm bảo ( thủ công ) rằng các build.gradletệp của các mô-đun cần sử dụng thư viện của bạn có phụ thuộc sau:

    dependencies { ... compile project(':dataformats') }



2

Như đã nhận xét ở trên, tôi cố gắng tìm kiếm về Gradle Build Varians và tôi đã tìm thấy liên kết này: http://code.tutsplus.com/tutorials/USE-gradle-build-variants--cms-25005 Đây là một giải pháp rất đơn giản. Đây là những gì tôi đã làm: - Trong build.gradle:

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

Sau đó, tôi có thêm 2 phiên bản ứng dụng của mình: pro và dùng thử với 2 gói tên khác nhau, đó là 2 applicationId trong mã trên để tôi có thể tải cả lên Google Play. Tôi vẫn chỉ viết mã trong phần "chính" và sử dụng getpackageName để chuyển giữa phiên bản. Chỉ cần đi đến liên kết tôi đã cho chi tiết.


1

Có hai cách đơn giản nhất nếu một cách không hiệu quả, vui lòng thử cách khác.

  1. Thêm phụ thuộc của thư viện bên trong phụ thuộc bên trong tệp build.gradle của thư viện ur bằng cách sử dụng và dán thư viện ur trong Thư viện bên ngoài.

HOẶC LÀ

  1. Chỉ cần vào thư mục libs của bạn bên trong thư mục ứng dụng và dán tất cả ứng dụng '"Nó chắc chắn sẽ hoạt động ........... :)

1

Trong trường hợp của tôi, sử dụng MAC OS X 10.11 và Android 2.0 và bằng cách thực hiện chính xác những gì Aqib Mumtaz đã giải thích.

Nhưng, mỗi lần, tôi có thông báo này: "Đã xảy ra sự cố khi định cấu hình dự án ': ứng dụng'.> Không thể đánh giá mô-đun xxx: Không tìm thấy cấu hình có tên 'mặc định' ."

Tôi thấy rằng lý do của thông báo này là Android 2.0 không cho phép tạo thư viện trực tiếp. Vì vậy, trước tiên tôi đã quyết định tạo một ứng dụng projet và sau đó sửa đổi build.gradle để biến nó thành một thư viện.

Giải pháp này không hiệu quả, vì dự án Thư viện rất khác so với dự án ứng dụng.

Vì vậy, tôi đã giải quyết vấn đề của mình như thế này:

  • Đầu tiên tạo một ứng dụng tiêu chuẩn (nếu cần);
  • Sau đó chọn 'Tệp / Tạo mô-đun'
  • Chuyển đến công cụ tìm và di chuyển thư mục của mô-đun mới được tạo trong thư mục khung của bạn

Sau đó tiếp tục với giải pháp được đề xuất bởi Aqib Mumtaz.

Do đó, nguồn thư viện của bạn sẽ được chia sẻ mà không cần sao chép các tệp nguồn mỗi lần (đó là một dị giáo đối với tôi!)

Hy vọng rằng điều này sẽ giúp bạn.

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.