โครงสร้างโครงการ Android Studio (เทียบกับโครงสร้างโครงการ Eclipse)


109

ฉันพยายามเรียนรู้การพัฒนา Android และตอนแรกฉันสับสนกับโครงสร้างโครงการที่แตกต่างกันระหว่าง Eclipse และ Android Studio ทำให้ยากต่อการทำตามบทแนะนำที่ออกแบบมาสำหรับ Eclipse ใครช่วยบอกฉันหน่อยได้ไหมว่าทำไมถึงมีความแตกต่างเหล่านี้ ควรมีอยู่หรือไม่?

ตัวอย่างเช่นหากฉันค้นหาไฟล์ R.java ใน IDE สองรายการที่แตกต่างกันพา ธ จะมีลักษณะดังนี้:

Eclipse: app \ gen \ com.example.app \ R.java

Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java

ทำไมเส้นทางเหล่านี้ถึงแตกต่างกัน? เหตุใด R.java ของฉันจึงอยู่ในโฟลเดอร์ดีบักใน Android Studio สิ่งนี้นำไปสู่ข้อผิดพลาดบางอย่างในช่วงต้นและหากใครมีข้อมูลเชิงลึกเกี่ยวกับความแตกต่างเหล่านี้ฉันจะขอบคุณพวกเขา


3
ฉันพยายามโพสต์ภาพในคำถามนี้ แต่ฉันต้องการชื่อเสียงอย่างน้อย 10 ภาพ ฉันจะแก้ไขโพสต์เพื่อรวมรูปภาพเมื่อฉันมีคุณสมบัติ
Jesse

9
ทำไมคุณไม่ใช้ Eclipse เพื่อที่คุณจะจัดการกับปัญหาเฉพาะของ Android เท่านั้นไม่ใช่เรื่อง IDE (โดยเฉพาะอย่างยิ่งเมื่อ Android Studio อยู่ใน การทดลองใช้ก่อนเปิดตัว )
Luksprog

3
เห็นด้วย หากคุณไม่มีประสบการณ์ในการพัฒนา Android อย่างน้อยหนึ่งปี IMHO คุณไม่ควรยุ่งกับ Android Studio จนกว่าจะออกจากโหมด "ทดลองใช้ก่อนเปิดตัว"
CommonsWare

2
ฉันขอเพิ่มว่าคุณสามารถใช้ IntelliJ IDEA แทนได้เนื่องจากมีความเสถียรมาก นอกจากนี้เมื่อ Android Studio มีความเสถียรมากขึ้นแล้วการย้ายไปใช้งานจะง่ายมากเนื่องจากเป็น IDE เดียวกัน (โดย AS ให้การผสานรวม Android ที่ปรับปรุงแล้วเท่านั้น)
free3dom

3
ฉันมีประสบการณ์ 3 ปีใน Android dev ที่ใช้ Eclipse และฉันพบว่าการใช้ A.Studio เป็นเรื่องยากอย่างจริงจัง ฉันหวังว่าจะมีคนตอบตรง ๆ เพราะถึงเวลาที่คนอื่นย้าย ฉันย้ายแล้ว ฉันไม่ต้องการทำงานแบบลางสังหรณ์ในระหว่างการพัฒนา
Dheeraj Bhaskar

คำตอบ:


203

ความลึกลับ: โครงสร้างโครงการและระบบสร้างของ Android Studio

ฉันไม่รู้ว่านี่เป็นเพราะ Gradle Build System หรือเปล่า (ฉันจะเดิมพัน) แต่ฉันจะบอกคุณว่าฉันเข้าใจอะไรจนถึงตอนนี้

ปรับปรุง 4: 2014/09/11 เพิ่มโกงแผ่นสำหรับBuildTypes, FlavorsและVariants(ในที่สุดผมก็รู้สึกมั่นใจที่จะเขียนนี้: D)
ปรับปรุง 3: 2014/09/11 ปรับปรุงพื้นที่ทำงานการเปรียบเทียบและโครงการที่จะแม่นยำ
ปรับปรุง 2: 2014/04/17 เพิ่มรายละเอียดเพิ่มเติมในโครงสร้างโครงการ AS
อัปเดต 1: 2013/07/29 เพิ่มโครงสร้างโครงการ IntelliJ

โครงสร้างโครงการของ IntelliJ (แสดงไว้ตอนท้าย) ใช้สำหรับ IntelliJ ที่มีปลั๊กอิน android อย่างไรก็ตาม Android Studio มีโครงสร้างโครงการที่แบ่งออกดังนี้:

โครงสร้าง: โครงการและโมดูล

โมดูลในAndroid Studioก็เหมือนกับโปรเจ็กต์ในEclipse

โปรเจ็กต์ในAndroid Studioเปรียบเสมือนพื้นที่ทำงานในEclipse (พูดให้ถูกต้องคือพื้นที่ทำงานที่มีโปรเจ็กต์ที่พึ่งพาซึ่งกันและกัน)

จากเอกสารประกอบ (Android Studio อิงตาม Intellij IDEA):

ไม่ว่าคุณจะทำอะไรใน IntelliJ IDEA คุณก็ทำในบริบทของโปรเจ็กต์ โครงการคือหน่วยขององค์กรที่แสดงถึงโซลูชันซอฟต์แวร์ที่สมบูรณ์

ผลิตภัณฑ์สำเร็จรูปของคุณอาจถูกย่อยสลายเป็นชุดของโมดูลที่แยกจากกันไม่ต่อเนื่อง แต่เป็นคำจำกัดความของโครงการที่นำผลิตภัณฑ์เหล่านี้มารวมกันและเชื่อมโยงเข้าด้วยกันทั้งหมด

สำหรับ Android หมายถึงหนึ่งโครงการต่อแอปและหนึ่งโมดูลต่อไลบรารีและต่อแอปทดสอบ

มีปัญหาหลายประการหากคุณพยายามสร้างหลายแอปภายในโครงการเดียวกัน เป็นไปได้ แต่ถ้าคุณลอง (เหมือนที่ฉันทำ) คุณจะเห็นว่าเกือบทุกอย่างถูกออกแบบมาให้ทำงานกับแอปเดียวต่อโครงการ

ตัวอย่างเช่นมีตัวเลือกในการ "สร้างโปรเจ็กต์ใหม่" ซึ่งไม่สมเหตุสมผลกับแอพหลายตัวการตั้งค่าโปรเจ็กต์อื่น ๆ อีกมากมายจะไม่มีประโยชน์และระบบ VCS ในตัวจะไม่ดีเมื่อคุณมีที่เก็บหลายแห่ง

โครงสร้าง: โครงสร้างโฟลเดอร์

โครงสร้างโครงการ Android Studio

โฟลเดอร์ระดับบนสุด

1. โครงการหลัก

นี่จะเป็นบริบทโครงการทั้งหมด( Eclipse Land:เช่นเดียวกับพื้นที่ทำงานของคุณ แต่ จำกัด เฉพาะสิ่งที่เกี่ยวข้องกับโครงการของคุณ) เช่นHelloWorldProjectหากชื่อแอปพลิเคชันที่คุณระบุคือHelloWorld

2. .idea

Android Studio (AS) จัดเก็บข้อมูลเมตาเฉพาะโครงการ ( Eclipse Land: project.propertiesไฟล์)

3. โมดูลโครงการ

นี่คือโครงการที่เกิดขึ้นจริง เช่นHelloWorldหากชื่อแอปพลิเคชันของคุณที่คุณตั้งคือ HelloWorld

4. ไล่สี

นี่คือที่มาของ jar wrapper ของระบบ gradle build เช่น jar นี้เป็นวิธีที่ AS สื่อสารกับ gradle ที่ติดตั้งใน Windows (ระบบปฏิบัติการในกรณีของฉัน)

5. ห้องสมุดภายนอก

นี่ไม่ใช่โฟลเดอร์จริง ๆ แต่เป็นตำแหน่งที่แสดง Referenced Libraries ( Eclipse Land: Referenced Libraries) นี่คือตำแหน่งที่แสดงแพลตฟอร์มเป้าหมายเป็นต้น

[ หมายเหตุด้านข้าง:ที่ซึ่งพวกเราหลายคนใน Eclipse Land ใช้ในการลบไลบรารีที่อ้างอิงและ Fix Project Properties เพื่อแก้ไขข้อผิดพลาดในการอ้างอิงจำได้ไหม]

โฟลเดอร์โครงการโดยละเอียด

นี่คือหมายเลข # 3 ในรายการด้านบน มี dirs ย่อยดังต่อไปนี้

1. สร้าง

สิ่งนี้มีผลลัพธ์ทั้งหมดของmakeกระบวนการเช่น class.dex คลาสที่คอมไพล์และทรัพยากรเป็นต้น

ใน Android Studio GUI จะแสดงโฟลเดอร์เพียงไม่กี่โฟลเดอร์ ส่วนที่สำคัญคือR.java ของคุณอยู่ที่นี่ภายใต้build/source/<flavor>/r/<build type(optional)>/<package>/R.java

2. libs

นี่คือโฟลเดอร์ libs มาตรฐานที่คุณเห็นในeclipse landด้วย

3. src

ที่นี่คุณจะเห็นเพียงjavaและresโฟลเดอร์ซึ่งสอดคล้องกับsrcโฟลเดอร์และresโฟลเดอร์ในEclipse ที่ดิน นี่เป็นสิ่งที่น่ายินดีอย่างยิ่งสำหรับการทำให้ IMHO เข้าใจง่าย

หมายเหตุเกี่ยวกับโมดูล:

โมดูลก็เหมือนกับโครงการEclipse Land แนวคิดก็คือคุณมีโครงการแอปพลิเคชันหนึ่งโครงการ (โมดูล # 3 ในรายการด้านบน) และโครงการห้องสมุดหลายโครงการ (เป็นโมดูลแยกต่างหากภายใต้โฟลเดอร์โครงการส่วนกลาง (# 1 ในรายการด้านบน)) ซึ่งโครงการแอปพลิเคชันขึ้นอยู่กับ โครงการห้องสมุดเหล่านี้สามารถใช้ซ้ำในแอปพลิเคชันอื่นได้อย่างไรฉันยังไม่พบ

[ หมายเหตุด้านข้าง:การจัดระเบียบใหม่ทั้งหมดมีประโยชน์บางอย่างเช่นการทำให้ง่ายขึ้นในโฟลเดอร์ src แต่มีข้อยุ่งยากมากมาย ความยุ่งยากส่วนใหญ่เกิดจากเอกสารที่บางมากเกี่ยวกับเค้าโครงโครงการใหม่นี้]

ระบบสร้างใหม่

คู่มือผู้ใช้สำหรับระบบสร้างใหม่

คำอธิบายรสชาติและ buildTypes ฯลฯ - hullabaloo เกี่ยวกับอะไร?

CheatSheet สำหรับรสชาติและ buildTypes

BuildType: debugและreleaseมีความbuildTypesพร้อมใช้งานโดยค่าเริ่มต้นในทุกโครงการ ใช้สำหรับสร้าง / รวบรวมSAME CODEเพื่อสร้าง APK ที่แตกต่างกัน ตัวอย่างเช่นในreleaseAPK ที่คุณต้องการเรียกใช้ proguard (สำหรับการทำให้สับสน) ลงนามด้วยคีย์ของคุณ (เทียบกับคีย์การแก้ไขข้อบกพร่อง) เรียกใช้การเพิ่มประสิทธิภาพ (อาจผ่านทางโปรการ์ดหรือเครื่องมืออื่น ๆ ) ใช้งานที่แตกต่างกันเล็กน้อยpackageNames(เราใช้com.company.productสำหรับreleaseและcom.company.product.debugสำหรับdebug) เป็นต้นนอกจากนี้เรายังใช้แฟล็กการดีบัก ( BuildConfig.DEBUG) เพื่อปิดการบันทึกไปยัง logcat (เนื่องจากทำให้แอปทำงานช้า) ในreleaseบิลด์ สิ่งนี้ทำให้การdebugสร้างเร็วขึ้นในระหว่างการพัฒนา แต่ยังเป็นงานreleaseสร้างที่ปรับให้เหมาะสมเพื่อวางบน Play Store

รสชาติของผลิตภัณฑ์:ไม่มีรสชาติเริ่มต้นให้ใช้งานได้ (หรือพูดให้ชัดเจนคือรสชาติเริ่มต้นคือว่างเปล่า / ไม่มีชื่อ) Flavorsอาจเป็นเวอร์ชันฟรีหรือเวอร์ชันที่ต้องชำระเงินซึ่งมีรหัสที่แตกต่างกัน พวกเขาใช้Mainรหัสเดียวกันแต่คนละเวอร์ชัน (หรือไม่มีเวอร์ชัน) ของไฟล์ซอร์สโค้ดหรือทรัพยากร

BuildVariant: A buildVariantคือสิ่งที่ APK ที่สร้างขึ้นนั้นสอดคล้องกับจริง พวกเขาจะถูกตั้งชื่อเช่นดังนั้น (ตามลำดับ) Product Flavor+Build TypeBuild Variant =
ตัวอย่างที่ 1:ถ้าคุณมีfreeและpaidเป็นสองรสชาติ รูปแบบการสร้างที่คุณจะได้รับ ได้แก่
Free - debug
Free - release
Paid - debug
Paid - release
นั่นคือการกำหนดค่า APK ที่เป็นไปได้ 4 แบบ การกำหนดค่าบางอย่างอาจไม่สมเหตุสมผลในโครงการใดโครงการหนึ่ง แต่มีให้ใช้งาน

ตัวอย่างที่ 2: (สำหรับโปรเจ็กต์ใหม่ / ไม่มีรสชาติ) คุณมี 2 buildVariantsหรือ APK ที่พร้อมใช้งานเนื่องจากรสชาติเริ่มต้นคือไม่มีชื่อ / ว่างเปล่า: การ เปิดตัวการ
แก้ปัญหา

เปรียบเทียบสิ่งนี้กับโครงสร้างโครงการของ Intellijหากช่วยได้:

ภาพรวมโครงสร้างโครงการ Intellij

โฟลเดอร์ .idea (1)มีโฟลเดอร์ย่อยจำนวนหนึ่งโดยส่วนใหญ่มีข้อมูล IntelliJ IDEA ภายใน

โฟลเดอร์src (2)มีซอร์สโค้ดไฟล์ MyActivity.java (3)ที่ใช้ฟังก์ชันการทำงานของแอปพลิเคชันของคุณ ไฟล์เป็นของแพ็คเกจ com.example

โฟลเดอร์res (4)ประกอบด้วยทรัพยากรภาพต่างๆ

ไฟล์ layout / main.xml (5)กำหนดลักษณะที่ปรากฏของแอปพลิเคชันที่ประกอบด้วยทรัพยากรประเภทต่างๆ

โฟลเดอร์ค่า (6)มีไว้สำหรับจัดเก็บไฟล์. xml ที่อธิบายทรัพยากรประเภทต่างๆ ปัจจุบันโฟลเดอร์มีไฟล์ strings.xml ที่มีนิยามทรัพยากรสตริง ดังที่คุณจะเห็นจากส่วนการเพิ่มสีโฟลเดอร์เค้าโครงยังสามารถมีตัวอย่างเช่นตัวบอกสี

โฟลเดอร์ที่วาดได้ (7)มีรูปภาพ

โฟลเดอร์ gen (8)มีไฟล์R.java (9)ที่เชื่อมโยงวิชวลรีซอร์สและซอร์สโค้ด Java ดังที่คุณจะเห็นจากส่วนด้านล่าง IntelliJ IDEA สนับสนุนการผสานรวมอย่างแน่นหนาระหว่างทรัพยากรแบบคงที่และ R.java ทันทีที่มีการเพิ่มหรือลบทรัพยากรใด ๆ คลาสและฟิลด์คลาสที่เกี่ยวข้องใน R.java จะถูกสร้างหรือลบออกโดยอัตโนมัติ ไฟล์ R.java ยังเป็นของแพ็คเกจ com.example


3
ขอบคุณมากสำหรับการเปรียบเทียบโครงสร้างโครงการ Eclipse และ Android Studio! และใช่เอกสารเกี่ยวกับโครงสร้างโครงการนี้และวิธีที่อาจนำไปใช้ในการพัฒนาในชีวิตประจำวันนั้นไม่มีอยู่จริง
kpsfoo

1
"3 src ที่นี่คุณจะเห็นเฉพาะ Java และละเอียดโฟลเดอร์ ..." การจะมีความแม่นยำมากขึ้นjavaและอยู่ภายใต้การres src/main
Code-Apprentice

นี่คือเอกสารบางส่วนเกี่ยวกับโครงสร้างโฟลเดอร์ Android Studio: developer.android.com/sdk/installing/studio-build.html
David d C e Freitas

31

Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java

ทำไมเส้นทางเหล่านี้ถึงแตกต่างกัน? เหตุใด R.java ของฉันจึงอยู่ในโฟลเดอร์ดีบักใน Android Studio สิ่งนี้นำไปสู่ข้อผิดพลาดบางอย่างในช่วงต้นและหากใครมีข้อมูลเชิงลึกเกี่ยวกับความแตกต่างเหล่านี้ฉันจะขอบคุณพวกเขา

ใส่เพียงแค่ Android สตูดิโอมีการกำหนดค่าที่จะสร้างการแก้ปัญหาประเภทรูปร่างในระบบของคุณ

Eclipse / ADT ได้รับการออกแบบมาเพื่อรองรับการสร้างครั้งละหนึ่งชุด (จากสิ่งที่ฉันบอกได้) หนึ่งในเป้าหมายหลักของระบบสร้างใหม่ ( จากคู่มือผู้ใช้ ):

Make it easy to create several variants of an application, 
either for multi-apk distribution or for different flavors of an application

ดังนั้นเมื่อ Eclipse / ADT สามารถสร้างR.javaไฟล์เดียวได้Android Studio จึงรองรับไฟล์หลายไฟล์ ที่สร้างขึ้นR.javaจะอยู่ในdebugโฟลเดอร์เนื่องจากโดยค่าเริ่มต้นระบบการสร้างใหม่จะสนับสนุนdebugและreleaseสร้างประเภทจากแบ็ต หากคุณเปลี่ยนตัวแปรบิวด์ของคุณ (ปุ่มมุมล่างซ้ายของ AS) เป็นรีลีส AS จะสร้างR.javaในreleaseไดเร็กทอรี

นี่อาจไม่ได้มีความหมายอะไรสำหรับโปรเจ็กต์ธรรมดา ๆ แต่การสนับสนุนBuild Variantsหมายถึงการทำให้ขั้นตอนการสร้างง่ายขึ้นอย่างมากสำหรับนักพัฒนาซอฟต์แวร์จำนวนมากรวมถึงโปรเจ็กต์ที่ฉันกำลังทำอยู่

โครงการของเรารองรับ 4 รสชาติพร้อม 2 ประเภทบิวด์ (แก้จุดบกพร่องและรีลีส) เพื่อรองรับชุดค่าผสม APK ทั้งหมด 8 แบบ และชุดค่าผสมแต่ละชุดนั้นมีการกำหนดค่าที่แตกต่างกันเล็กน้อยดังนั้นระบบการสร้างนี้จึงเหมาะกับเราจริงๆ android studio ของฉันติดตั้งบนเครื่องอื่น แต่ถ้าหน่วยความจำทำหน้าที่ของฉันได้อย่างถูกต้องR.javaไฟล์นั้นมีอยู่ในbuild/source/<flavor>/r/<build type>/package/R.java. เมื่อเซิร์ฟเวอร์ CI ของเราสร้างไฟล์ APK ระบบจะใช้R.javaไฟล์เหล่านี้แต่ละไฟล์เพื่อสร้างแพ็คเกจแยกกัน


0

Google ยุติการสนับสนุนยุติ Android Developer Tools (ADT) ใน Eclipse กำลังจะสิ้นสุดลงตามประกาศของเรา คุณควรย้ายโครงการพัฒนาแอปไปยัง Android Studio โดยเร็วที่สุด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนไปใช้ Android Studio โปรดดูการย้ายข้อมูลไปใช้ Android Studio

ดีที่สุดสำหรับเครื่องมือพัฒนา Android สำหรับAndroid StudioสำหรับการรองรับAndroid Mในอนาคตเท่านั้น-


Eclipse for Android Developers - eclipse.org/downloads/packages/…
Yousha Aleayoub

-2

สำหรับ Android Studio 3.0.1 และเลือกคุณสมบัติทั้งหมด:

  • Android O ล่าสุด
  • Android Auto
  • สิ่งที่ Android
  • Android สวมใส่
  • Android TV
  • รองรับ C ++
  • การสนับสนุน Kotlin

โครงสร้างในเวอร์ชัน 3.0.1 ดูไม่เหมือนคำตอบอื่น ๆ ทั้งหมด

โครงสร้างล่าสุดจะแสดงในปี 2018 Android Studio 3.0.1 01/2018

มือใหม่พบบางสิ่งที่คล้ายกับใช้งานได้ในโฟลเดอร์ย่อยของคุณลักษณะ:

อัปเดต Android Studio 3.0.1 01_2018 ของคุณ:

เคล็ดลับเครื่องมือ:

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