ความแตกต่างระหว่าง build.gradle (Project) และ build.gradle (Module)


99

ฉันกำลังพยายามเพิ่มการอ้างอิงของ Android Asynchronous Http Client ในโครงการของฉัน ดังนั้นจึงมีไฟล์ build.gradle สองไฟล์อยู่ในโปรเจ็กต์

ป้อนคำอธิบายภาพที่นี่

ตามความเข้าใจของฉันมีการอ้างอิงที่แตกต่างกัน:

  1. หนึ่งซึ่งกำหนดไว้ในระดับรูทของ build.gradle (Project: My-app)
  2. หนึ่งใน buildscript ของ build.gradle (Project: My-app)
  3. อีกอย่างคือ build.gradle (Modules: app)

คำถามนี้เกี่ยวกับที่เก็บสำหรับการอ้างอิงของ buildScript อธิบายเล็กน้อยเกี่ยวกับสองประเภทแรก

build.gradle (Project: My-app) พูดด้วย

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

ดังนั้นฉันเดาว่าควรเพิ่มรหัสอ้างอิงของ Android Asynchronous Http Client ใน build.gradle (Module: app)

หากมีใครสามารถให้ภาพที่ชัดเจนเกี่ยวกับสิ่งเหล่านี้เพื่อความเข้าใจที่ดีขึ้นก็จะเป็นการดีมาก


3
ถ้าห้องสมุดภายนอกใช่คุณควรเพิ่มที่ build.gradle(Modules:app)หรือไปFile -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciesที่ที่คุณจะเห็นเครื่องหมายกากบาทสีเขียวโดยแตะที่เลือกModule Dependencyและเพิ่มห้องสมุดของคุณโดยอัตโนมัติ
ชม

การเพิ่ม build.gradle (Module: app) ทำให้ฉันมีข้อผิดพลาดว่าFailed to find: com.loopj.android:android-async-http:1.4.5 เหตุใดจึงไม่สามารถดาวน์โหลดได้โดยตรงฉันได้ตั้งค่าพร็อกซีด้วย ฉันดาวน์โหลดไฟล์ jar และลองด้วยตนเอง แต่เนื่องจากFile Repository.. เป็นวิธีที่ถูกต้อง
Anil Bhaskar

เพื่อความเรียบง่ายProject Structureให้ไปที่Modulesและเลือกโครงการของคุณ คุณจะเห็นไฟล์green cross sign. คลิกเพื่อเปิดNew Moduleหน้าต่าง มีคุณเลือกที่จะนำเข้า library.If ของคุณคุณมีไฟล์แล้วเลือกด้านล่าง.jar import .JAR or .AAR packageหรือคัดลอก jar ของคุณไปยังlibsโฟลเดอร์และModule:appเพิ่มการอ้างอิงเหล่านี้:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
ชม

คำตอบ:


47

build.gradle(Project:My-app)

ไฟล์บิลด์ระดับบนสุดที่คุณสามารถเพิ่มอ็อพชันคอนฟิกูเรชันทั่วไปให้กับโปรเจ็กต์ / โมดูลย่อยทั้งหมด

แต่ละโครงการประกอบด้วยไฟล์top-level gradle file . มัน usally มีทั้งหมดcommon configs modulesสิ่งที่จะรวมอยู่ในนี้ก็จะส่งผลกระทบต่อทุกคนtop-level gradlemodules

เช่น:

// 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)

สร้างไฟล์ของโมดูลเฉพาะของคุณ(ซึ่งคุณเพิ่มการอ้างอิงการลงนามการกำหนดค่าประเภทการสร้างรสชาติ ฯลฯ )

ทั้งหมดmodulesมีเฉพาะgradleไฟล์ สิ่งที่รวมอยู่ในgradleไฟล์นี้จะมีผลกับไฟล์moduleที่รวมอยู่เท่านั้น

เช่น:

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'
}

45

ค่อนข้างสับสนเล็กน้อยเนื่องจากโดยค่าเริ่มต้น Android Studio จะแสดงทั้งสองbuild.gradleไฟล์ติดกัน (เมื่อใช้มุมมอง Android)

ป้อนคำอธิบายภาพที่นี่

หากคุณเปลี่ยนไปใช้มุมมองโครงการคุณจะเห็นโครงสร้างจริงและตำแหน่งของbuild.gradleไฟล์ต่างๆ

ป้อนคำอธิบายภาพที่นี่

ไฟล์build.gradle(Project: MyApplication) อยู่ในโฟลเดอร์รูทของโปรเจ็กต์และการตั้งค่าคอนฟิกจะใช้กับทุกโมดูลในโปรเจ็กต์ โมดูลคือชิ้นส่วนแยกของโครงการที่ใหญ่กว่า ในโครงการแบบหลายโมดูลโมดูลเหล่านี้มีงานของตนเอง แต่ทำงานร่วมกันเพื่อสร้างโครงการทั้งหมด โครงการ Android ส่วนใหญ่มีเพียงโมดูลเดียวคือโมดูลแอป

ไฟล์build.gradle(Module: app) ที่นี่อยู่ในappโฟลเดอร์ การตั้งค่าการสร้างใช้กับโมดูลแอปเท่านั้น หากมีโมดูลอื่นโมดูลนั้นก็จะมีbuild.gradleไฟล์ของตัวเองเช่นกัน ในฐานะที่เป็นตัวอย่างที่ผมทำโครงการห้องสมุดที่มีสามโมดูล: โมดูลห้องสมุดสาธิตแอปของโมดูลและโมดูล app อื่นที่ฉันวางแผนที่จะใช้สำหรับการทดสอบ แต่ละคนมีbuild.gradleไฟล์ของตัวเองที่ฉันสามารถปรับแต่งได้

ป้อนคำอธิบายภาพที่นี่

ในโปรเจ็กต์พื้นฐานเกือบทุกอย่างที่คุณต้องแก้ไขจะอยู่ในbuild.gradleไฟล์ของโมดูลแอพ คุณสามารถจำได้ดังนี้:

คุณกำลังสร้างแอปให้ไปที่ไฟล์build.gradle(โมดูล: แอป )

อ่านเพิ่มเติม


คำตอบนี้ดีกว่ามากเนื่องจากอธิบายว่าอะไรคือโครงการและโมดูล
t3chb0t

1

เกี่ยวกับความสัมพันธ์ของสองgradleไฟล์นี้hrkrsให้คำอธิบายที่ชัดเจนมาก, ฉันจะเพิ่มข้อมูลเกี่ยวกับมัน

หากโปรเจ็กต์ของคุณมีเพียงโมดูลเดียว (เช่นแอพ ) ข้อได้เปรียบของ top build.gradle (Project: My-app) จะไม่แสดงชัดเจนมาก เนื่องจากคุณสามารถกำหนดค่าทุกอย่างในbuild.gradle (โมดูล: แอป)เกี่ยวกับโมดูลและแก้ไขได้เพียงไฟล์เดียวเมื่ออัปเกรดในวันถัดไป。

แต่ถ้าโปรเจ็กต์ของคุณมี 5 Modules และเกิดขึ้นว่ามีการพึ่งพาAเหมือนกันถ้าคุณไม่ใช้build.gradleอันดับต้น ๆ (Project: My-app)คุณจะต้องรักษา 5 ไฟล์ในวันต่อ ๆ ไป

โดยวิธีการที่build.gradle (Module: แอป)สามารถเขียนทับ build.gradle (โครงการ: My แอป)

การออกแบบนี้สามารถปรับปรุงการบำรุงรักษาของ APP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.