1. คำสองสามคำ
2. รายละเอียด
Android SDK
วาง Android SDK ของคุณไว้ในไดเรกทอรีที่บ้านหรือสถานที่อื่น ๆ ที่ไม่เกี่ยวข้องกับแอพ IDE บางตัวจะเชื่อมโยง SDK เมื่อติดตั้งและวาง SDK ในไดเรกทอรีเดียวกันของ IDE เมื่อคุณต้องการอัพเกรด (ติดตั้งใหม่) IDE หรือแทนที่ IDE คุณจะพบสิ่งที่ไม่ดี นอกจากนี้หาก IDE ของคุณทำงานภายใต้บัญชีผู้ใช้แทนรูทอย่าวาง SDK ในไดเรกทอรีระดับระบบมิฉะนั้นจะต้องได้รับอนุญาตจาก Sudo เมื่อใช้งาน
สร้างระบบ
ตัวเลือกเริ่มต้นคือ Gradle มดมีข้อ จำกัด มากมายและมีขนาดใหญ่เกินไป ด้วย Gradle คุณสามารถทำได้อย่างง่ายดาย:
- รวบรวมรสชาติหรือตัวแปรที่แตกต่างกัน
-สร้างคลาสง่าย ๆ -งานสคริปต์
-จัดการและดาวน์โหลดการพึ่งพา
-Custom Keystores
-ETC
ปลั๊กอิน Gradle สำหรับ Android นั้นถูกกำหนดโดย Google เป็นระบบการรวบรวมมาตรฐานใหม่และ Google ยังคงอัพเกรดต่อไป
โครงสร้างโครงการ
มีสองตัวเลือกยอดนิยม: โครงสร้างโครงการ ANT & ECLIPSE ADT เก่า; โครงสร้างโครงการ Gradle & Android Studio ใหม่ คุณควรเลือกหลัง หากโครงการของคุณใช้โครงสร้างเก่าให้แทนที่
โครงสร้างเก่า
โครงสร้างเก่า├─สินทรัพย์libs├─res├─src│└ com/futurice/project ├─Androidmanifest.xml├─build.gradle├─โครงการproperties└─ proguard-rules.pro
โครงสร้างใหม่
โครงสร้างใหม่├─ Library-Foobar├─App│├─libs│─src│─Androidtest││─java│└─ com/futurice/project │└└├├ └─AndroidManifest.xml│─build.gradle│─ proguard-rules.pro├─build.gradle└─การตั้งค่า gradle
ความแตกต่างที่สำคัญระหว่างโครงสร้างใหม่คือการแยกของ 'ชุดซอร์สโค้ด' (หลัก, Androidtest) ซึ่งเป็นแนวคิดจาก Gradle
การใช้ "แอพ" ระดับสูงสุดมีประโยชน์ในการแยกแอพของคุณออกจากโครงการห้องสมุดอื่น ๆ ที่อ้างอิงโดยแอปของคุณ (เช่น Library-Foobar) จากนั้น settings.gradle จะเก็บดัชนีของแอปพลิเคชันไปยังไลบรารีเหล่านี้และแอพ/build.gradle สามารถชี้ไปที่ไลบรารีเหล่านี้
การกำหนดค่า Gradle
สถาปัตยกรรมทั่วไปโปรดทำตามคำแนะนำของ Google บน Gradle สำหรับ Android;
งานเล็ก ๆ (สคริปต์) คุณสามารถใช้ Gradle เพื่อสร้างงานเล็ก ๆ แทนเชลล์, Python หรือ Perl ฯลฯ สำหรับรายละเอียดโปรดดูเอกสารของ Gradle;
รหัสผ่าน. ในแอปพลิเคชัน build.gradle คุณต้องกำหนด SigningConfigs สำหรับการรวบรวมการรวบรวม รายละเอียดมีดังนี้:
อย่าเขียนเหมือนสิ่งต่อไปนี้มันจะปรากฏในระบบควบคุมเวอร์ชันของคุณ:
SigningConfigs {release {ไฟล์ storefile ("myapp.keystore") StorePassword "password123" keyalias "Thekey" Keypassword "Password789"}}}}แต่คุณควรสร้างไฟล์ gradle.properties ที่จะไม่ถูกเพิ่มลงในระบบควบคุมเวอร์ชัน
keystore_password = password123key_password = password789
ไฟล์นี้จะถูกนำเข้าโดยอัตโนมัติโดย Gradle เพื่อให้คุณสามารถใช้ใน build.gradle เช่นนี้:
SigningConfigs {release {ลอง {ไฟล์ storefile ("myapp.keystore") StorePasswordKeystore_Password keyalias "Thekey" KeypasswordKey_Password} catch (ex) {thrownewinvaliduserDataException ("คุณควรกำหนด keystore_password(หากใช้ Maven โปรดดูเอกสารต้นฉบับ)
ห้องสมุด
แจ็คสันเป็นไลบรารี Java ที่สามารถแปลงวัตถุและข้อมูล JSON ให้กันและกัน GSON ยังเป็นตัวเลือกที่ดีในทำนองเดียวกัน อย่างไรก็ตามเราคิดว่า Jsckson นั้นดีกว่าเพราะรองรับหลายวิธีในการจัดการ JSON: สตรีมมิ่ง, โมเดลต้นไม้หน่วยความจำและไดรฟ์ข้อมูล Json-Pojo ที่มีผลผูกพัน แต่จำไว้ว่าแจ็คสันใหญ่กว่า GSON ดังนั้นคุณควรพิจารณาตามที่คุณต้องการหากคุณต้องการหลีกเลี่ยงการ จำกัด วิธีการ 65K มันเป็นการดีที่สุดที่จะใช้ GSON ตัวเลือกอื่น ๆ : JSON-SMART และ BOON JSON
เครือข่ายแคชและรูปภาพ ใช้วอลเลย์หรือติดตั้งเพิ่มเติม วอลเลย์ยังสามารถใช้ในการโหลดและแคช หากคุณเลือกติดตั้งเพิ่มเติมคุณสามารถใช้ Picasso เพื่อโหลดและแคชอิมเมจ จากนั้นใช้ OKHTTP เพื่อดำเนินการตามคำขอ HTTP ที่ถูกต้อง ทั้งสามประเภท: ติดตั้งเพิ่มเติม Picasso และ Okhttp ทั้งหมดมาจาก บริษัท เดียวกันดังนั้นพวกเขาจึงเติมเต็มซึ่งกันและกัน Okhttp สามารถใช้เพื่อเชื่อมต่อกับวอลเลย์
RXJAVA เป็นไลบรารีการเขียนโปรแกรมที่ตอบสนองได้กล่าวอีกนัยหนึ่งจัดการกับเหตุการณ์แบบอะซิงโครนัส (สำหรับรายละเอียดโปรดดูเอกสารต้นฉบับ)
Retrolambda เป็นไลบรารี Java ที่ช่วยให้คุณใช้ Lambda Expressions บน Android หรือแพลตฟอร์มอื่น ๆ ก่อน JDK8 (สำหรับรายละเอียดโปรดดูเอกสารต้นฉบับ)
ในที่สุดจำไว้ว่าข้อ จำกัด ของวิธีการ DEX และอย่าใช้ห้องสมุดมากเกินไป (แอปพลิเคชัน Android เมื่อบรรจุลงในไฟล์ DEX มีขีด จำกัด สูงสุด: 65535 วิธีการอ้างอิง [1] [2] [3] ถ้าคุณเกินขีด จำกัด ข้อผิดพลาดที่ร้ายแรงจะเกิดขึ้นดังนั้นอย่าใช้ห้องสมุดมากเกินไปให้ใช้เครื่องมือ DEX-method
กิจกรรมและชิ้นส่วน
แฟรกเมนต์ควรเป็นตัวเลือกเริ่มต้นสำหรับอินเทอร์เฟซ UI การปรับใช้ Android ของคุณ ชิ้นส่วนสามารถนำกลับมาใช้ใหม่ในแอปพลิเคชันของคุณ เราขอแนะนำให้ใช้ชิ้นส่วนแทนกิจกรรมเพื่อวาดอินเทอร์เฟซตามจุดต่อไปนี้:
โครงสร้างแพ็คเกจ Java
โครงสร้าง Java ในแอปพลิเคชัน Android อยู่ใกล้กับโครงสร้าง MVC (Model-View-Controller) ใน Android ชิ้นส่วนและกิจกรรมเป็นคลาสคอนโทรลเลอร์จริง จากมุมมองอื่นพวกเขาเป็นส่วนหนึ่งของการโต้ตอบของผู้ใช้นั่นคือพวกเขาอยู่ในคลาสมุมมองมุมมอง
ดังนั้นจึงเป็นเรื่องยากสำหรับเราที่จะแยกแยะความแตกต่างอย่างเคร่งครัดว่าชิ้นส่วน (หรือกิจกรรม) เป็นคอนโทรลเลอร์หรือมุมมอง ดังนั้นจากมุมมองของแพ็คเกจ Java เราควรใส่ชิ้นส่วนในแพ็คเกจชิ้นส่วนของตัวเองดีกว่าจากนั้นกิจกรรมจะอยู่ในแพ็คเกจที่ทันสมัยที่สุด (ทำตามคำแนะนำที่กล่าวไว้ข้างต้น) แน่นอนถ้าคุณต้องการมี 2 กิจกรรมขึ้นไปคุณจะสร้างแพ็คเกจกิจกรรม
ด้วยวิธีนี้โครงสร้างทั้งหมดดูเหมือนโครงสร้าง MVC ทั่วไป แพ็คเกจโมเดลประกอบด้วย POJOS ซึ่งใช้ในการแปลงข้อมูล JSON ที่ได้จากอินเตอร์เฟส API และแพ็คเกจ Views มีมุมมองการแจ้งเตือนมุมมองบาร์แอ็คชั่นวิดเจ็ต ฯลฯ อะแดปเตอร์เป็นชั้นกลางที่อยู่ระหว่างข้อมูลและมุมมอง อย่างไรก็ตามพวกเขามักจะต้องส่งออกมุมมองดูผ่าน getView () ดังนั้นคุณสามารถวางอะแดปเตอร์ในตำแหน่งแพคเกจย่อยของแพ็คเกจ Views
บางคลาสคอนโทรลเลอร์ระดับแอปพลิเคชันที่เป็นของระบบ Android เท่านั้นควรวางไว้ในแพ็คเกจผู้จัดการ คลาสการประมวลผลข้อมูลต่าง ๆ เช่น DateUtils สามารถวางไว้ในแพ็คเกจ UTILS คลาสที่โต้ตอบกับเซิร์ฟเวอร์พื้นหลังควรวางไว้ในแพ็คเกจเครือข่าย
กล่าวโดยย่อสถาปัตยกรรมโดยรวมจากการโต้ตอบกับเซิร์ฟเวอร์ไปจนถึงการโต้ตอบกับผู้ใช้สามารถออกแบบได้ดังนี้:
com.futurice.project ├─เครือข่าย├─รุ่น├─ผู้จัดการ├─ Utils ├─ชิ้นส่วน├─ Views ├─อะแดปเตอร์├─ ActionBar ├─วิดเจ็ต├─การแจ้งเตือน
การตั้งชื่อไฟล์ทรัพยากร
ทำตามอนุสัญญานำหน้าคล้ายกับ type_foo_bar.xml เช่น: fragment_contact_details.xml, view_primary_button.xml, activity_main.xml
จัดระเบียบไฟล์เลย์เอาต์
หากคุณไม่ทราบวิธีการทำให้ไฟล์ XML เลย์เอาต์เป็นปกติคุณสามารถอ้างถึงอนุสัญญาต่อไปนี้:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <linearlayout xmlns: Android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.andrs.andrs.android.com/tools Android: layout_height = "match_parent" Android: layout_height = "match_parent" Android: การปฐมนิเทศ = "แนวตั้ง"> <textView Android: id = "@+id/name" Android: layout_width = "Match_parent" Android Android: text = "@string/name" style = "@style/fancytext"/> <รวม layout = "@layout/reuseable_part"/> </linearlayout>