Sự khác biệt giữa build.gradle (Dự án) và build.gradle (Mô-đun)


98

Tôi đang cố gắng thêm phần phụ thuộc của Ứng dụng khách Http không đồng bộ Android vào dự án của mình. Vì vậy, có hai tệp build.gradle có trong dự án.

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

Theo sự hiểu biết của tôi, có nhiều loại phụ thuộc khác nhau:

  1. Một cái được định nghĩa ở cấp cơ sở của build.gradle (Dự án: Ứng dụng của tôi)
  2. Một bên trong bản dựng của build.gradle (Dự án: Ứng dụng của tôi)
  3. Một cái khác là build.gradle (Mô-đun: ứng dụng)

Câu hỏi này là về kho lưu trữ cho các phụ thuộc của buildScript, hãy giải thích một chút về hai loại đầu tiên.

Cũng build.gradle (Dự án: Ứng dụng của tôi) cho biết

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

Vì vậy, tôi đoán mã phụ thuộc của Ứng dụng khách Http không đồng bộ Android nên được thêm vào build.gradle (Mô-đun: ứng dụng).

Nếu ai đó có thể đưa ra một bức tranh rõ ràng về tất cả những điều này để hiểu rõ hơn thì thật tuyệt.


3
nếu thư viện bên ngoài, có, bạn nên thêm tại build.gradle(Modules:app)hoặc đi đến File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciesnơi bạn sẽ thấy dấu hiệu chữ thập màu xanh lá cây, bằng cách nhấn vào chọn Module Dependencyvà thêm thư viện yout tự động
hrskrs

Đang thêm vào build.gradle (Mô-đun: ứng dụng), tôi gặp lỗi là Failed to find: com.loopj.android:android-async-http:1.4.5 tại sao nó không thể tải xuống trực tiếp, tôi cũng đã đặt proxy. Tôi đã tải xuống tệp jar và thử theo cách thủ công nhưng File Repository... đó có phải là cách chính xác không.
Anil Bhaskar

để sử dụng đơn giản, Project Structurehãy truy cập Modulesvà chọn dự án của bạn. Ở đó bạn sẽ thấy a green cross sign. Nhấp vào đó sẽ mở ra New Modulecửa sổ. Ở đó bạn chọn để nhập thư viện của mình, nếu bạn có .jartệp thì hãy chọn bên dưới import .JAR or .AAR package. Nếu không, hãy sao chép jar của bạn vào libsthư mục và khi bạn Module:appthêm các phụ thuộc này vào:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs

Câu trả lời:


49

build.gradle(Project:My-app)

Tệp xây dựng cấp cao nhất nơi bạn có thể thêm các tùy chọn cấu hình chung cho tất cả các dự án con / mô-đun.

Mỗi dự án chứa mộttop-level gradle file . Nó thường chứa common configscho tất cả modules. Bất cứ điều gì được bao gồm trong này top-level gradle, nó sẽ ảnh hưởng đến tất cả modules.

Ví dụ:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha3'

        //Maven plugin
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(Module:app)

Xây dựng tệp của mô-đun cụ thể của bạn (nơi bạn thêm các phần phụ thuộc, cấu hình ký, kiểu xây dựng, hương vị, v.v.)

Tất cả modulesđều có một gradletệp cụ thể . Bất cứ điều gì được bao gồm trong gradletệp này , nó sẽ chỉ ảnh hưởng đến những modulegì được bao gồm trên.

Ví dụ:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.hrskrs.gesturefun"
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':gesture-fun')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.jakewharton:butterknife:7.0.1'
}

43

Có một chút khó hiểu vì Android Studio theo mặc định hiển thị cả hai build.gradletệp ngay cạnh nhau (khi sử dụng chế độ xem Android).

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

Nếu bạn chuyển sang dạng xem Dự án, bạn có thể thấy cấu trúc thực tế và vị trí của các build.gradletệp khác nhau .

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

Tệp build.gradle(Dự án: MyApplication) nằm trong thư mục gốc của dự án và cài đặt cấu hình của nó áp dụng cho mọi mô-đun trong dự án. Một mô-đun là một phần biệt lập của dự án lớn hơn. Trong một dự án nhiều mô-đun, các mô-đun này có công việc riêng nhưng kết hợp với nhau để tạo thành toàn bộ dự án. Hầu hết các dự án Android chỉ có một mô-đun, mô-đun ứng dụng.

Tệp build.gradle(Mô-đun: ứng dụng) ở đây nằm trong appthư mục. Cài đặt xây dựng của nó chỉ áp dụng cho mô-đun ứng dụng. Nếu có một mô-đun khác, thì mô-đun đó cũng sẽ có build.gradletệp riêng của nó . Như một ví dụ , tôi đã thực hiện một dự án thư viện với ba mô-đun: một module thư viện, một bản demo ứng dụng mô-đun, và một mô-đun ứng dụng mà tôi dự định sẽ sử dụng để thử nghiệm. Mỗi người trong số họ có các build.gradletệp riêng mà tôi có thể chỉnh sửa.

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

Trong một dự án cơ bản, hầu hết mọi thứ bạn cần chỉnh sửa sẽ nằm trong build.gradletệp của mô-đun ứng dụng . Bạn có thể nhớ nó như thế này:

Bạn đang tạo một ứng dụng , vì vậy hãy chuyển đến tệp build.gradle(Mô-đun: ứng dụng ).

đọc thêm


1

Về mối quan hệ của hai gradletệp, hrskrs đã giải thích rất rõ ràng , Tôi sẽ bổ sung thêm về nó.

nếu dự án của bạn chỉ có một Mô-đun (chẳng hạn như ứng dụng ), lợi thế của top build.gradle (Dự án: Ứng dụng của tôi) không hiển thị rõ ràng lắm. bởi vì bạn có thể định cấu hình mọi thứ trong build.gradle (Module: ứng dụng) về Mô-đun và chỉ sửa đổi một tệp khi nâng cấp trong những ngày tiếp theo。

nhưng nếu dự án của bạn có 5 Mô-đun và chúng có cùng sự phụ thuộc A , nếu bạn không sử dụng top build.gradle (Dự án: Ứng dụng của tôi) bạn cần duy trì 5 tệp trong những ngày tiếp theo.

Nhân tiện, build.gradle (Mô-đun: ứng dụng) có thể ghi đè build.gradle (Dự án: Ứng dụng của tôi) .

Thiết kế này có thể cải thiện khả năng bảo trì của APP

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.