วิธีส่งออกการอ้างอิงในไลบรารี Android

ตั้งแต่เวอร์ชัน 3.0.0 ปลั๊กอิน Android สำหรับ Gradle ช่วยให้คุณสามารถส่งออกการพึ่งพาของโมดูลไปยังโมดูลอื่น ๆ ได้

ตามที่ฉันเข้าใจ นี่หมายความว่าในโมดูลไลบรารี Android ของฉัน ฉันควรจะสามารถประกาศการพึ่งพาโดยใช้ api <dependency declaration> และเข้าถึงการพึ่งพานั้นเป็นการพึ่งพาสกรรมกริยาที่ส่งออกในโครงการแอปหลักของฉัน โดยที่ฉันได้ประกาศโมดูลไลบรารีของฉันเป็นการพึ่งพา

ฉันยังใช้การพึ่งพาไฟล์แบบคงที่ด้วย

ตัวอย่างเช่น:

ฉันมีคลาส NeededEverywhere ซึ่งกำหนดไว้ในโมดูล gradle ของตัวเอง everywhere-module โมดูลนี้อยู่ในโครงการเดียวกับโมดูลห้องสมุดของฉัน

//library module's build.gradle:
dependencies {
    api project(':everywhere-module')
}

ใน build.gradle ของแอปของฉัน (ซึ่งอยู่ในโปรเจ็กต์ Android Studio อื่น) ฉันประกาศการพึ่งพาไลบรารี แต่ไม่ใช่ everywhere-module นี่ควรหมายความว่า everywhere-module เป็นการพึ่งพาสกรรมกริยาที่ส่งออก

//app project's build.gradle
dependencies {
    implementation files("path/to/my/library/file.aar")
}

อย่างไรก็ตาม ฉันไม่สามารถเข้าถึงคลาส NeededEverywhere ในแอปของฉันได้

ผมทำอะไรผิดหรือเปล่า?




คำตอบ (1)


คุณกำลังอ้างอิงถึง AAR โดยตรง

ข้อมูลการพึ่งพาไม่อยู่ใน AAR มากกว่าข้อมูลการพึ่งพาอยู่ใน JAR ข้อมูลการพึ่งพาจะเก็บไว้ในข้อมูลเมตาของพื้นที่เก็บข้อมูลอาร์ติแฟกต์ เช่น ไฟล์ POM ของพื้นที่เก็บข้อมูลสไตล์ Maven

ดังนั้น โปรเจ็กต์ที่มีโมดูลไลบรารีจำเป็นต้องเผยแพร่ AAR ไปยังที่เก็บอาร์ติแฟกต์ นั่นอาจเป็นหนึ่งรายการในเครื่องของคุณ (เช่น mavenLocal()) จากนั้น โปรเจ็กต์ที่ต้องขึ้นอยู่กับโมดูลไลบรารีจะต้องดำเนินการจากพื้นที่เก็บข้อมูล ไม่ใช่ผ่าน file() จากนั้น Gradle สามารถรับข้อมูลการพึ่งพาสกรรมกริยาจากพื้นที่เก็บข้อมูลและใช้ประโยชน์จากมันได้

person CommonsWare    schedule 19.02.2018
comment
ฉันไม่เคยใช้ Maven ดังนั้นข้อมูลเมตาที่ Gradle ปกติจะจัดการโดยอัตโนมัติจึงไม่ชัดเจนสำหรับฉัน ขอบคุณสำหรับการตอบกลับอย่างรวดเร็วของคุณ! - person medavox; 19.02.2018
comment
@medavox: Gradle สามารถจัดการการพึ่งพาสกรรมกริยาโดยอัตโนมัติหากโมดูลอยู่ในโปรเจ็กต์เดียวหรือหากข้อมูลเมตาเป็นส่วนหนึ่งของสิ่งประดิษฐ์ในพื้นที่เก็บข้อมูล ดังนั้น อีกวิธีหนึ่งคือให้คุณรวมสองโปรเจ็กต์ที่แยกจากกันนี้ให้เป็นโปรเจ็กต์ขนาดใหญ่เพียงโปรเจ็กต์เดียว เพื่อให้การอ้างอิงของคุณทั้งหมดอยู่ในโปรเจ็กต์เดียวกัน (และด้วยเหตุนี้การกำหนดค่า Gradle โดยรวมจึงเหมือนกัน) - person CommonsWare; 19.02.2018