ทุกโปรเจ็กต์ของแอปต้องมีไฟล์ AndroidManifest.xml
โดยที่
ชื่อ
ที่รูทของชุดแหล่งที่มาของโปรเจ็กต์
ไฟล์ Manifest อธิบายข้อมูลสำคัญ
เกี่ยวกับแอปของคุณไปยังเครื่องมือสร้างของ Android, ระบบปฏิบัติการ Android และ
Google Play
ไฟล์ Manifest ต้องประกาศข้อมูลต่อไปนี้ด้วย
- องค์ประกอบของแอป รวมถึงกิจกรรม บริการ Broadcast Receiver และผู้ให้บริการเนื้อหา คอมโพเนนต์แต่ละรายการต้องกำหนดพร็อพเพอร์ตี้พื้นฐาน เช่น ชื่อคลาส 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 ในไฟล์ Manifest ของแต่ละแอป ระบบจะเปิดใช้งาน
อินสแตนซ์ของคอมโพเนนต์ที่ตรงกัน และส่งออบเจ็กต์ Intent
ไปยังคอมโพเนนต์นั้น หากมีแอปมากกว่า 1 แอปที่จัดการ Intent ได้ ผู้ใช้จะเลือกแอปที่จะใช้ได้
คอมโพเนนต์แอปอาจมีตัวกรอง Intent กี่รายการก็ได้ (กำหนดด้วยองค์ประกอบ <intent-filter>
) โดยแต่ละรายการจะอธิบายความสามารถที่แตกต่างกันของคอมโพเนนต์นั้น
ดูข้อมูลเพิ่มเติมได้ที่เอกสารIntent และตัวกรอง Intent
ไอคอนและป้ายกำกับ
องค์ประกอบไฟล์ Manifest จำนวนหนึ่งมี icon
และ label
สำหรับการแสดงไอคอนขนาดเล็กและป้ายกำกับข้อความตามลำดับ
ให้แก่ผู้ใช้สำหรับคอมโพเนนต์ของแอปที่เกี่ยวข้อง
ในทุกกรณี ไอคอนและป้ายกำกับที่ตั้งค่าไว้ในองค์ประกอบหลักจะเป็นค่าเริ่มต้นสำหรับ icon
และ label
ขององค์ประกอบย่อยทั้งหมด
เช่น ไอคอนและป้ายกำกับที่ตั้งค่าไว้ในองค์ประกอบ <application>
จะเป็นไอคอนและป้ายกำกับเริ่มต้นสำหรับคอมโพเนนต์แต่ละรายการของแอป เช่น กิจกรรมทั้งหมด
ไอคอนและป้ายกำกับที่ตั้งค่าไว้ใน <intent-filter>
ของคอมโพเนนต์จะแสดงต่อผู้ใช้ทุกครั้งที่คอมโพเนนต์นั้นแสดงเป็นตัวเลือกเพื่อดำเนินการตาม Intent โดยค่าเริ่มต้น ไอคอนนี้จะรับค่ามาจากไอคอนที่ประกาศสำหรับคอมโพเนนต์หลัก ไม่ว่าจะเป็นองค์ประกอบ <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:
ยกเว้นแอตทริบิวต์บางรายการขององค์ประกอบรูท<manifest>
เช่นandroid:alwaysRetainTaskState
เนื่องจากคำนำหน้านี้ใช้ได้กับทุกที่ เอกสารประกอบจึงมักจะไม่ใส่คำนำหน้านี้เมื่อกล่าวถึงแอตทริบิวต์ตามชื่อ - มีหลายค่า
- หากระบุค่าได้มากกว่า 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 ที่กิจกรรม บริการ หรือตัวรับการออกอากาศสามารถตอบสนองได้ |
<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>