โปรเจ็กต์แอปทุกโปรเจ็กต์ต้องมีไฟล์ AndroidManifest.xml
ที่มีชื่อตรงกัน
ทุกประการ
ที่รูทของชุดแหล่งที่มาของโปรเจ็กต์
ไฟล์ Manifest จะอธิบายข้อมูลสำคัญ
เกี่ยวกับแอปของคุณให้เครื่องมือบิลด์ของ Android, ระบบปฏิบัติการ Android และ
Google Play
ไฟล์ Manifest ต้องประกาศสิ่งต่อไปนี้
- คอมโพเนนต์ของแอป ซึ่งรวมถึงกิจกรรม บริการ ตัวรับสัญญาณออกอากาศ และผู้ให้บริการเนื้อหาทั้งหมด คอมโพเนนต์แต่ละรายการต้องกำหนดพร็อพเพอร์ตี้พื้นฐาน เช่น ชื่อของคลาส Kotlin หรือ Java นอกจากนี้ยังประกาศความสามารถ เช่น การกำหนดค่าอุปกรณ์ที่จัดการได้ และตัวกรอง Intent ที่อธิบายวิธีเริ่มคอมโพเนนต์ได้ด้วย อ่านเพิ่มเติมเกี่ยวกับคอมโพเนนต์ของแอปในส่วนต่อไปนี้
- สิทธิ์ที่แอปต้องใช้เพื่อ เข้าถึงส่วนที่ได้รับการป้องกันของระบบหรือแอปอื่นๆ นอกจากนี้ ยังประกาศ สิทธิ์ใดๆ ที่แอปอื่นๆ ต้องมีหากต้องการเข้าถึงเนื้อหาจากแอปนี้ อ่านเพิ่มเติมเกี่ยวกับสิทธิ์ในส่วนถัดไป
- ฟีเจอร์ฮาร์ดแวร์และซอฟต์แวร์ที่แอปต้องการ ซึ่งจะส่งผลต่ออุปกรณ์ที่ติดตั้งแอปจาก Google Play ได้ อ่านเพิ่มเติมเกี่ยวกับความเข้ากันได้ของอุปกรณ์ในส่วนถัดไป
หากคุณใช้ Android Studio เพื่อสร้างแอป ระบบจะสร้างไฟล์ Manifest ให้คุณ และจะเพิ่มองค์ประกอบ Manifest ที่จำเป็นส่วนใหญ่เมื่อคุณสร้างแอป โดยเฉพาะเมื่อใช้เทมเพลตโค้ด
ฟีเจอร์ไฟล์
ส่วนต่อไปนี้อธิบายวิธีที่ลักษณะสำคัญบางอย่างของแอป แสดงอยู่ในไฟล์ Manifest
คอมโพเนนต์ของแอป
สำหรับคอมโพเนนต์ แอปแต่ละรายการที่คุณสร้างในแอป ให้ประกาศองค์ประกอบ XML ที่เกี่ยวข้องในไฟล์ Manifest ดังนี้
<activity>
สำหรับแต่ละคลาสย่อยของActivity
<service>
สำหรับแต่ละคลาสย่อยของService
<receiver>
สำหรับแต่ละคลาสย่อยของBroadcastReceiver
<provider>
สำหรับแต่ละคลาสย่อยของContentProvider
หากคุณสร้างคลาสย่อยของคอมโพเนนต์เหล่านี้โดยไม่ได้ประกาศในไฟล์ Manifest ระบบจะเริ่มคอมโพเนนต์ไม่ได้
ระบุชื่อของคลาสย่อยด้วยแอตทริบิวต์ name
โดยใช้การกำหนดแพ็กเกจแบบเต็ม เช่น ประกาศคลาสย่อย Activity
ดังนี้
<manifest ... > <application ... > <activity android:name="com.example.myapp.MainActivity" ... > </activity> </application> </manifest>
อย่างไรก็ตาม หากอักขระแรกในค่า name
เป็นจุด
ระบบจะนำเนมสเปซของแอปจากไฟล์ build.gradle
ระดับโมดูล
พร็อพเพอร์ตี้ namespace
มาใส่ไว้หน้าชื่อ เช่น หากเนมสเปซคือ
"com.example.myapp"
ชื่อกิจกรรมต่อไปนี้จะเปลี่ยนเป็น
com.example.myapp.MainActivity
<manifest ... > <application ... > <activity android:name=".MainActivity" ... > ... </activity> </application> </manifest>
ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าชื่อแพ็กเกจหรือเนมสเปซได้ที่ตั้งค่าเนมสเปซ
หากคุณมีคอมโพเนนต์ของแอปที่อยู่ในแพ็กเกจย่อย เช่น ใน
com.example.myapp.purchases
ค่า name
ต้องเพิ่มชื่อแพ็กเกจย่อยที่ขาดหายไป เช่น ".purchases.PayActivity"
หรือใช้ชื่อแพ็กเกจที่สมบูรณ์
ตัวกรอง Intent
Intent จะเปิดใช้งานกิจกรรม บริการ และเครื่องรับการออกอากาศของแอป Intent คือข้อความที่กำหนดโดย
Intent
ออบเจ็กต์ที่อธิบาย
การดำเนินการที่จะทำ รวมถึงข้อมูลที่จะดำเนินการ หมวดหมู่ของ
คอมโพเนนต์ที่คาดว่าจะดำเนินการ และคำสั่งอื่นๆ
เมื่อแอปออก Intent ไปยังระบบ ระบบจะค้นหาคอมโพเนนต์ของแอปที่สามารถจัดการ Intent ได้โดยอิงตามการประกาศตัวกรอง Intent ในไฟล์ Manifest ของแต่ละแอป ระบบจะเปิดใช้
อินสแตนซ์ของคอมโพเนนต์ที่ตรงกันและส่งออบเจ็กต์ Intent
ไปยังคอมโพเนนต์นั้น หากมีแอปมากกว่า 1 แอปที่
จัดการ Intent ได้ ผู้ใช้จะเลือกแอปที่จะใช้ได้
คอมโพเนนต์แอปมีตัวกรอง Intent ได้ไม่จำกัดจำนวน (กำหนดด้วยองค์ประกอบ
<intent-filter>
) โดยแต่ละตัวจะอธิบายความสามารถที่แตกต่างกันของคอมโพเนนต์นั้น
ดูข้อมูลเพิ่มเติมได้ที่เอกสารIntent และ Intent Filter
ไอคอนและป้ายกำกับ
องค์ประกอบ Manifest จำนวนหนึ่งมีแอตทริบิวต์ icon
และ label
สำหรับแสดงไอคอนขนาดเล็กและป้ายกำกับข้อความตามลำดับ
ต่อผู้ใช้สำหรับคอมโพเนนต์แอปที่เกี่ยวข้อง
ในทุกกรณี ไอคอนและป้ายกำกับที่ตั้งค่าไว้ในองค์ประกอบระดับบนสุดจะกลายเป็นค่าเริ่มต้นของ icon
และ label
สำหรับองค์ประกอบย่อยทั้งหมด
เช่น ไอคอนและป้ายกำกับที่ตั้งค่าไว้ในองค์ประกอบ
<application>
จะเป็นไอคอนและป้ายกำกับเริ่มต้นสำหรับคอมโพเนนต์แต่ละรายการของแอป เช่น กิจกรรมทั้งหมด
ระบบจะแสดงไอคอนและป้ายกำกับที่ตั้งค่าไว้ใน<intent-filter>
ของคอมโพเนนต์ต่อผู้ใช้ทุกครั้งที่คอมโพเนนต์นั้นแสดงเป็นตัวเลือกเพื่อ
ตอบสนองความตั้งใจ โดยค่าเริ่มต้น ไอคอนนี้จะสืบทอดมาจากไอคอนที่ประกาศไว้สำหรับคอมโพเนนต์หลัก ไม่ว่าจะเป็นองค์ประกอบ <activity>
หรือ <application>
คุณอาจต้องการเปลี่ยนไอคอน สำหรับตัวกรอง Intent หากตัวกรองนั้นมีการดำเนินการที่ไม่ซ้ำกันซึ่งคุณต้องการระบุให้ดียิ่งขึ้นใน กล่องโต้ตอบตัวเลือก ดูข้อมูลเพิ่มเติมได้ที่อนุญาตให้แอปอื่นๆ เริ่มกิจกรรมของคุณ
สิทธิ์
แอป Android ต้องขอสิทธิ์เข้าถึงข้อมูลผู้ใช้ที่มีความละเอียดอ่อน เช่น รายชื่อติดต่อและ SMS หรือฟีเจอร์บางอย่างของระบบ เช่น กล้องและการเข้าถึงอินเทอร์เน็ต สิทธิ์แต่ละรายการจะระบุด้วยป้ายกำกับที่ไม่ซ้ำกัน ตัวอย่างเช่น แอปที่ต้องส่งข้อความ SMS จะต้องมีบรรทัดต่อไปนี้ในไฟล์ Manifest
<manifest ... > <uses-permission android:name="android.permission.SEND_SMS"/> ... </manifest>
เริ่มตั้งแต่ Android 6.0 (API ระดับ 23) เป็นต้นไป ผู้ใช้สามารถอนุมัติหรือปฏิเสธสิทธิ์บางอย่างของแอปได้ในขณะรันไทม์ แต่ไม่ว่าแอปของคุณจะรองรับ Android เวอร์ชันใด คุณต้องประกาศคำขอสิทธิ์ทั้งหมดด้วยองค์ประกอบ <uses-permission>
ในไฟล์ Manifest หากได้รับสิทธิ์ แอปจะใช้ฟีเจอร์ที่ได้รับการปกป้องได้
หากไม่เป็นเช่นนั้น การพยายามเข้าถึงฟีเจอร์เหล่านั้นจะล้มเหลว
แอปยังปกป้องคอมโพเนนต์ของตัวเองด้วยสิทธิ์ได้ด้วย โดยสามารถใช้สิทธิ์ใดก็ได้ที่ Android กำหนดไว้ตามที่ระบุไว้ในandroid.Manifest.permission
หรือสิทธิ์ที่ประกาศไว้ในแอปอื่น นอกจากนี้ แอปของคุณยังกำหนดสิทธิ์ของตัวเองได้ด้วย
ประกาศสิทธิ์ใหม่ด้วยองค์ประกอบ
<permission>
ดูข้อมูลเพิ่มเติมได้ที่สิทธิ์ ใน Android
ความเข้ากันได้ของอุปกรณ์
ไฟล์ Manifest ยังเป็นที่ที่คุณสามารถประกาศประเภทฮาร์ดแวร์หรือ ฟีเจอร์ซอฟต์แวร์ที่แอปของคุณต้องการ และด้วยเหตุนี้จึงเป็นประเภทอุปกรณ์ที่แอปของคุณ เข้ากันได้ Google Play Store ไม่อนุญาตให้ผู้ใช้ติดตั้งแอปของคุณ ในอุปกรณ์ที่ไม่มีฟีเจอร์หรือเวอร์ชันระบบที่แอปของคุณ ต้องการ
มีแท็ก Manifest หลายแท็กที่กำหนดอุปกรณ์ที่แอปของคุณ ใช้งานร่วมกันได้ ซึ่งอาจเกิดจากสาเหตุที่พบบ่อยต่อไปนี้
<uses-feature>
องค์ประกอบ
<uses-feature>
ช่วยให้คุณประกาศฟีเจอร์ฮาร์ดแวร์และ
ซอฟต์แวร์ที่แอปต้องการได้ ตัวอย่างเช่น หากแอปไม่สามารถทำงานพื้นฐาน
ในอุปกรณ์ที่ไม่มีเซ็นเซอร์เข็มทิศ คุณสามารถประกาศว่าต้องใช้เซ็นเซอร์เข็มทิศ
ด้วยแท็ก Manifest ต่อไปนี้
<manifest ... > <uses-feature android:name="android.hardware.sensor.compass" android:required="true" /> ... </manifest>
หมายเหตุ: หากต้องการทำให้แอปพร้อมใช้งานใน Chromebook คุณควรพิจารณา ข้อจำกัดที่สำคัญบางอย่างของฟีเจอร์ฮาร์ดแวร์และซอฟต์แวร์ ดูข้อมูลเพิ่มเติมได้ที่ความเข้ากันได้ของไฟล์ Manifest ของแอปสำหรับ Chromebook
<uses-sdk>
แพลตฟอร์มเวอร์ชันใหม่แต่ละเวอร์ชันมักจะมี API ใหม่ๆ ที่ไม่มีในเวอร์ชันก่อนหน้า หากต้องการระบุเวอร์ชันขั้นต่ำที่แอปของคุณ
ใช้งานร่วมกันได้ ไฟล์ Manifest ต้องมีแท็ก <uses-sdk>
และแอตทริบิวต์ minSdkVersion
อย่างไรก็ตาม โปรดทราบว่าแอตทริบิวต์ในองค์ประกอบ <uses-sdk>
จะถูกลบล้างโดยพร็อพเพอร์ตี้ที่เกี่ยวข้อง
ในไฟล์ build.gradle
ดังนั้น หากคุณใช้ Android Studio ให้ระบุค่า minSdkVersion
และ
targetSdkVersion
ในนั้นแทน
Groovy
android { defaultConfig { applicationId 'com.example.myapp' // Defines the minimum API level required to run the app. minSdkVersion 21 // Specifies the API level used to test the app. targetSdkVersion 33 ... } }
Kotlin
android { defaultConfig { applicationId = "com.example.myapp" // Defines the minimum API level required to run the app. minSdkVersion(21) // Specifies the API level used to test the app. targetSdkVersion(33) ... } }
ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ build.gradle
ได้ที่หัวข้อวิธีกำหนดค่าบิลด์
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีประกาศการรองรับอุปกรณ์ต่างๆ ของแอปได้ที่ภาพรวมความเข้ากันได้ของอุปกรณ์
การตั้งชื่อไฟล์
ส่วนนี้อธิบายถึงแบบแผนและกฎที่โดยทั่วไปแล้วใช้กับองค์ประกอบและแอตทริบิวต์ทั้งหมดในไฟล์ Manifest
- องค์ประกอบ
- ต้องระบุเฉพาะองค์ประกอบ
<manifest>
และ<application>
โดยแต่ละรายการต้องปรากฏเพียงครั้งเดียว ส่วนองค์ประกอบอื่นๆ ส่วนใหญ่จะเกิดขึ้น 0 ครั้งขึ้นไป อย่างไรก็ตาม บางรายการ ต้องมีอยู่เพื่อให้ไฟล์ Manifest มีประโยชน์ค่าทั้งหมดจะตั้งค่าผ่านแอตทริบิวต์ ไม่ใช่เป็นข้อมูลอักขระภายใน องค์ประกอบ
โดยทั่วไปแล้ว องค์ประกอบในระดับเดียวกันจะไม่มีการจัดเรียง เช่น องค์ประกอบ
<activity>
<provider>
และ<service>
สามารถวางในลำดับใดก็ได้ กฎนี้มีข้อยกเว้นที่สำคัญ 2 ประการ-
องค์ประกอบ
<activity-alias>
ต้องอยู่หลัง<activity>
ซึ่งเป็นชื่อแทน -
องค์ประกอบ
<application>
ต้องเป็นองค์ประกอบสุดท้ายภายในองค์ประกอบ<manifest>
-
องค์ประกอบ
- แอตทริบิวต์
- ในทางเทคนิคแล้ว แอตทริบิวต์ทั้งหมดเป็นค่าที่ไม่บังคับ อย่างไรก็ตาม คุณต้องระบุแอตทริบิวต์หลายรายการ
เพื่อให้องค์ประกอบบรรลุวัตถุประสงค์
สำหรับแอตทริบิวต์ที่ไม่บังคับอย่างแท้จริง เอกสารประกอบอ้างอิง
จะระบุค่าเริ่มต้น
ชื่อแอตทริบิวต์ทั้งหมดจะขึ้นต้นด้วยคำนำหน้า
android:
เช่นandroid:alwaysRetainTaskState
ยกเว้นแอตทริบิวต์บางรายการขององค์ประกอบรูท<manifest>
เนื่องจากคำนำหน้าเป็นแบบ สากล เอกสารจึงมักจะละเว้นคำนำหน้าเมื่ออ้างอิงถึงแอตทริบิวต์ ตามชื่อ - มีหลายค่า
- หากระบุค่าได้มากกว่า 1 ค่า องค์ประกอบจะซ้ำกันเกือบทุกครั้ง แทนที่จะแสดงค่าหลายค่าภายในองค์ประกอบเดียว
ตัวอย่างเช่น ตัวกรอง Intent สามารถแสดงการดำเนินการหลายอย่างได้ ดังนี้
<intent-filter ... > <action android:name="android.intent.action.EDIT" /> <action android:name="android.intent.action.INSERT" /> <action android:name="android.intent.action.DELETE" /> ... </intent-filter>
- ค่าทรัพยากร
- แอตทริบิวต์บางอย่างมีค่าที่แสดงต่อผู้ใช้ เช่น
ชื่อของกิจกรรมหรือไอคอนแอป ค่าของแอตทริบิวต์เหล่านี้อาจแตกต่างกันไปตามภาษาของผู้ใช้หรือการกำหนดค่าอุปกรณ์อื่นๆ (เช่น เพื่อระบุขนาดไอคอนที่แตกต่างกันตามความหนาแน่นของพิกเซลของอุปกรณ์) ดังนั้นจึงควรกำหนดค่าจากทรัพยากรหรือธีมแทนที่จะฮาร์ดโค้ดลงในไฟล์ Manifest จากนั้นมูลค่าจริงจะเปลี่ยนแปลงตามแหล่งข้อมูล
อื่นที่คุณระบุสำหรับการกำหนดค่าอุปกรณ์ต่างๆ
ทรัพยากรจะแสดงเป็นค่าในรูปแบบต่อไปนี้
"@[package:]type/name"
คุณละเว้นpackageชื่อได้หากแอปของคุณเป็นผู้จัดหาทรัพยากร (รวมถึงหากทรัพยากรนั้นมาจากทรัพยากร Dependency ของไลบรารี เนื่องจากทรัพยากรของไลบรารีจะผสานรวมกับทรัพยากรของคุณ) ชื่อแพ็กเกจที่ถูกต้องอื่นๆ มีเพียง
android
เมื่อคุณต้องการใช้ทรัพยากรจากเฟรมเวิร์ก Androidtype คือประเภทของทรัพยากร เช่น
string
หรือdrawable
และ name คือชื่อที่ระบุทรัพยากรที่เฉพาะเจาะจง มีตัวอย่างดังต่อไปนี้<activity android:icon="@drawable/smallPic" ... >
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเพิ่มทรัพยากรลงในโปรเจ็กต์ได้ที่ภาพรวมของทรัพยากรแอป
หากต้องการใช้ค่าที่กำหนดไว้ในธีมแทน อักขระแรก ต้องเป็น
?
แทน@
"?[package:]type/name"
- ค่าสตริง
- หากค่าแอตทริบิวต์เป็นสตริง ให้ใช้แบ็กสแลชคู่
(
\\
) เพื่อหลีกอักขระ เช่น\\n
สำหรับ บรรทัดใหม่ หรือ\\uxxxx
สำหรับอักขระ Unicode
ข้อมูลอ้างอิงขององค์ประกอบไฟล์ Manifest
ตารางต่อไปนี้มีลิงก์ไปยังเอกสารอ้างอิงสำหรับองค์ประกอบที่ถูกต้องทั้งหมดในไฟล์ AndroidManifest.xml
<action> |
เพิ่มการดำเนินการลงในตัวกรอง Intent |
<activity> |
ประกาศคอมโพเนนต์กิจกรรม |
<activity-alias> |
ประกาศชื่อแทนสำหรับกิจกรรม |
<application> |
ประกาศแอปพลิเคชัน |
<category> |
เพิ่มชื่อหมวดหมู่ลงในตัวกรอง Intent |
<compatible-screens> |
ระบุการกำหนดค่าหน้าจอแต่ละรายการที่แอปพลิเคชันรองรับ |
<data> |
เพิ่มข้อกำหนดข้อมูลลงในตัวกรอง Intent |
<grant-uri-permission> |
ระบุชุดข้อมูลย่อยของแอปที่ผู้ให้บริการเนื้อหาหลักมีสิทธิ์เข้าถึง |
<instrumentation> |
ประกาศInstrumentation คลาสที่ช่วยให้คุณตรวจสอบการโต้ตอบของแอปพลิเคชันกับระบบได้ |
<intent-filter> |
ระบุประเภทของ Intent ที่กิจกรรม บริการ หรือ Broadcast Receiver ตอบสนองได้ |
<manifest> |
องค์ประกอบรูทของไฟล์ AndroidManifest.xml |
<meta-data> |
คู่ชื่อ-ค่าสำหรับรายการข้อมูลเพิ่มเติมแบบกำหนดเองที่ส่งไปยังคอมโพเนนต์หลักได้ |
<path-permission> |
กำหนดเส้นทางและสิทธิ์ที่จำเป็นสำหรับชุดข้อมูลย่อยที่เฉพาะเจาะจงภายในผู้ให้บริการเนื้อหา |
<permission> |
ประกาศสิทธิ์ด้านความปลอดภัยที่ใช้จำกัดการเข้าถึงคอมโพเนนต์หรือฟีเจอร์ที่เฉพาะเจาะจงของแอปพลิเคชันนี้หรือแอปพลิเคชันอื่นๆ ได้ |
<permission-group> |
ประกาศชื่อสำหรับการจัดกลุ่มเชิงตรรกะของสิทธิ์ที่เกี่ยวข้อง |
<permission-tree> |
ประกาศชื่อฐานสำหรับโครงสร้างสิทธิ์ |
<provider> |
ประกาศคอมโพเนนต์ผู้ให้บริการเนื้อหา |
<queries> |
ประกาศชุดแอปอื่นๆ ที่แอปของคุณต้องการเข้าถึง ดูข้อมูลเพิ่มเติม ในคำแนะนำเกี่ยวกับการกรอง ระดับการมองเห็นแพ็กเกจ |
<receiver> |
ประกาศคอมโพเนนต์ Broadcast Receiver |
<service> |
ประกาศคอมโพเนนต์บริการ |
<supports-gl-texture>
| ประกาศรูปแบบการบีบอัดพื้นผิว GL รูปแบบเดียวที่แอปรองรับ |
<supports-screens> |
ประกาศขนาดหน้าจอที่แอปของคุณรองรับและเปิดใช้โหมดความเข้ากันได้ของหน้าจอสำหรับหน้าจอที่มีขนาดใหญ่กว่าที่แอปของคุณรองรับ |
<uses-configuration> |
ระบุฟีเจอร์อินพุตเฉพาะที่แอปพลิเคชันต้องการ |
<uses-feature> |
ประกาศฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์รายการเดียวที่แอปพลิเคชันใช้ |
<uses-library> |
ระบุไลบรารีที่ใช้ร่วมกันซึ่งต้องลิงก์กับแอปพลิเคชัน |
<uses-native-library> |
ระบุไลบรารีที่ใช้ร่วมกันแบบเนทีฟที่ผู้ให้บริการระบุซึ่งแอปต้องลิงก์ด้วย |
<uses-permission> |
ระบุสิทธิ์ของระบบที่ผู้ใช้ต้องให้เพื่อให้แอปทำงานได้อย่างถูกต้อง |
<uses-permission-sdk-23> |
ระบุว่าแอปต้องการสิทธิ์ใดสิทธิ์หนึ่ง แต่จะขอสิทธิ์ดังกล่าวก็ต่อเมื่อมีการติดตั้งแอปในอุปกรณ์ที่ใช้ Android 6.0 (API ระดับ 23) ขึ้นไปเท่านั้น |
<uses-sdk> |
ช่วยให้คุณแสดงความเข้ากันได้ของแอปพลิเคชันกับแพลตฟอร์ม Android อย่างน้อย 1 เวอร์ชันได้โดยใช้จำนวนเต็มระดับ API |
ข้อจำกัด
แท็กต่อไปนี้มีขีดจำกัดจำนวนครั้งที่ปรากฏในไฟล์ Manifest
ชื่อแท็ก | ขีดจำกัด |
---|---|
<package> |
1000 |
<meta-data> |
1000 |
<uses-library> |
1000 |
แอตทริบิวต์ต่อไปนี้มีขีดจำกัดความยาวสูงสุด
แอตทริบิวต์ | ขีดจำกัด |
---|---|
name |
1024 |
versionName |
1024 |
host |
255 |
mimeType |
255 |
ตัวอย่างไฟล์ Manifest
XML ด้านล่างเป็นตัวอย่าง AndroidManifest.xml
อย่างง่ายที่ประกาศ
กิจกรรม 2 รายการสำหรับแอป
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0">
<!-- Beware that these values are overridden by the build.gradle file -->
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- This name is resolved to com.example.myapp.MainActivity
based on the namespace property in the build.gradle file -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity" />
</application>
</manifest>