Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

สิทธิ์รันไทม์

ใน Android 6.0 ขึ้นไปโมเดลสิทธิ์ของแอปพลิเคชัน Android ได้รับการออกแบบมาเพื่อให้ผู้ใช้เข้าใจสิทธิ์ได้ง่ายขึ้นมีประโยชน์และปลอดภัยมากขึ้น โมเดลได้ย้ายแอปพลิเคชัน Android ที่ต้องการการอนุญาตที่เป็นอันตราย (ดูการ อนุญาตที่ได้รับผลกระทบ ) จากโมเดลการอนุญาต เวลาติดตั้ง ไปยังโมเดลสิทธิ์ รันไทม์ :

  • สิทธิ์ในการติดตั้งเวลา

    ( Android 5.1 และต่ำกว่า ) ผู้ใช้ให้สิทธิ์ที่ เป็นอันตราย แก่แอปเมื่อติดตั้งหรืออัปเดตแอป ผู้ผลิตอุปกรณ์และผู้ให้บริการสามารถติดตั้งแอปล่วงหน้าโดยได้รับอนุญาตล่วงหน้าโดยไม่ต้องแจ้งให้ผู้ใช้ทราบ

  • สิทธิ์รันไทม์

    ( Android 6.0 - 9 ) ผู้ใช้ให้สิทธิ์ที่เป็นอันตรายแก่แอปเมื่อแอปกำลังทำงาน เมื่อมีการร้องขอสิทธิ์ (เช่นเมื่อแอปเปิดตัวหรือเมื่อผู้ใช้เข้าถึงคุณลักษณะเฉพาะ) ขึ้นอยู่กับแอปพลิเคชัน แต่ผู้ใช้ให้ / ปฏิเสธการเข้าถึงแอปพลิเคชันไปยังกลุ่มสิทธิ์เฉพาะ OEM / ผู้ให้บริการสามารถติดตั้งแอปล่วงหน้าได้ แต่ไม่สามารถให้สิทธิ์ล่วงหน้าได้เว้นแต่จะผ่านขั้นตอนการยกเว้น (ดู การสร้างข้อยกเว้น )

    ( Android 10 ) ผู้ใช้จะเห็นความโปร่งใสที่เพิ่มขึ้นและสามารถควบคุมได้ว่าแอปใดมีสิทธิ์รันไทม์การจดจำกิจกรรม (AR) ผู้ใช้จะได้รับแจ้งจาก กล่องโต้ตอบสิทธิ์รันไทม์ เพื่ออนุญาตเสมออนุญาตขณะใช้งานหรือปฏิเสธสิทธิ์ ในระบบปฏิบัติการที่อัปเกรดเป็น Android 10 สิทธิ์ที่มอบให้กับแอปจะยังคงอยู่ แต่ผู้ใช้สามารถเข้าไปที่ การตั้งค่า และเปลี่ยนแปลงได้

สิทธิ์รันไทม์ป้องกันไม่ให้แอปเข้าถึงข้อมูลส่วนตัวโดยไม่ได้รับความยินยอมจากผู้ใช้และให้บริบทเพิ่มเติมและการมองเห็นประเภทของสิทธิ์ที่แอปพลิเคชันกำลังมองหาหรือได้รับอนุญาต โมเดลรันไทม์สนับสนุนให้นักพัฒนาช่วยให้ผู้ใช้เข้าใจว่าเหตุใดแอปพลิเคชันจึงต้องการสิทธิ์ที่ร้องขอและให้ความโปร่งใสมากขึ้นเพื่อให้ผู้ใช้สามารถตัดสินใจได้ดีขึ้นเกี่ยวกับการอนุญาตหรือปฏิเสธ

สิทธิ์ที่ได้รับผลกระทบ

Android 6.0 ขึ้นไปต้องการการอนุญาตที่เป็นอันตรายในการใช้โมเดลสิทธิ์รันไทม์ การอนุญาตที่เป็นอันตรายคือการอนุญาตที่มีความเสี่ยงสูงกว่า (เช่น READ_CALENDAR ) ที่อนุญาตให้แอปพลิเคชันเข้าถึงข้อมูลส่วนตัวของผู้ใช้หรือควบคุมอุปกรณ์ซึ่งอาจส่งผลเสียต่อผู้ใช้ หากต้องการดูรายการสิทธิ์ที่เป็นอันตรายให้เรียกใช้คำสั่ง:

adb shell pm list permissions -g -d

Android 6.0 ขึ้นไปจะไม่เปลี่ยนการทำงานของ สิทธิ์ปกติ ทั้งหมดนี้เป็นสิทธิ์ที่ไม่เป็นอันตรายรวมถึงสิทธิ์ปกติระบบและลายเซ็น สิทธิ์ปกติคือสิทธิ์ที่มีความเสี่ยงต่ำกว่า (เช่น SET_WALLPAPER ) ที่อนุญาตให้แอปพลิเคชันที่ร้องขอเข้าถึงคุณสมบัติระดับแอปพลิเคชันที่แยกได้โดยมีความเสี่ยงน้อยที่สุดต่อแอปพลิเคชันอื่น ๆ ระบบหรือผู้ใช้ เช่นเดียวกับใน Android 5.1 และรุ่นที่ต่ำกว่าระบบจะให้สิทธิ์ตามปกติแก่แอปพลิเคชันที่ร้องขอโดยอัตโนมัติเมื่อติดตั้งและไม่แจ้งให้ผู้ใช้อนุมัติ สำหรับรายละเอียดเกี่ยวกับสิทธิ์โปรดดูเอกสาร องค์ประกอบ <permission>

ข้อ จำกัด ที่ยากและอ่อนใน Android 10

นอกจากจะเป็นอันตรายแล้วการอนุญาตอาจเป็นแบบ จำกัด ยากหรือแบบอ่อนก็ได้ ไม่ว่าในกรณีใดการอนุญาตที่ถูก จำกัด จะต้องอยู่ในรายการที่อนุญาตพิเศษ ข้อ จำกัด ฮาร์ดที่ไม่อยู่ในรายการที่อนุญาตพิเศษจะทำงานแตกต่างจากข้อ จำกัด แบบซอฟต์ที่ไม่อยู่ในรายการที่อนุญาตพิเศษ:

  • ( ข้อ จำกัด ยาก ) ไม่สามารถให้สิทธิ์แอปที่ไม่อยู่ในรายการที่อนุญาตพิเศษได้
  • ( ข้อ จำกัด แบบซอฟต์ ) แอปที่ไม่มีการอนุญาตพิเศษจะทำงานตามการอนุญาตเฉพาะที่พวกเขาร้องขอ ลักษณะการทำงานได้อธิบายไว้ในเอกสารสาธารณะสำหรับการอนุญาตที่ร้องขอ

เมื่อติดตั้งแอพตัวติดตั้ง (เช่น Google Play Store) อาจเลือกที่จะไม่อนุญาตพิเศษสำหรับการอนุญาตที่ จำกัด สำหรับแอพ การอนุญาตถูก จำกัด โดยแพลตฟอร์มและจะให้ได้ก็ต่อเมื่อแอปตรงตามเกณฑ์พิเศษตามนโยบายแพลตฟอร์ม ตัวอย่างประเภทการอนุญาตที่ จำกัด ยาก ได้แก่ สิทธิ์ SMS และบันทึกการโทร

รายการที่อนุญาตจะเกิดขึ้นระหว่างการติดตั้งและเมื่อใด

  • มีการติดตั้งแอปแล้วในระหว่างการอัปเกรด Android 9 ถึง 10
  • มีการอนุญาตล่วงหน้าหรือมีการติดตั้งแอปไว้ล่วงหน้า
  • จำเป็นต้องมีสิทธิ์สำหรับบทบาทที่กำหนดไว้แล้วเพื่ออนุญาตพิเศษ
  • โปรแกรมติดตั้ง (เช่น Google Play Store) จะทำเครื่องหมายการอนุญาตเป็นรายการสีขาว

ผู้ใช้ไม่สามารถอนุญาตพิเศษด้วยตนเองได้

ข้อกำหนด

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

  • รูปแบบสิทธิ์รันไทม์ต้องสอดคล้องกันในทุกอุปกรณ์ที่ใช้ Android 6.0 ขึ้นไป สิ่งนี้บังคับใช้โดยการทดสอบชุดทดสอบความเข้ากันได้ของ Android (CTS)
  • แอปต้องแจ้งให้ผู้ใช้ให้สิทธิ์แอปพลิเคชันขณะรันไทม์ สำหรับรายละเอียดโปรดดูการ อัปเดตแอปพลิเคชัน อาจมีข้อยกเว้นที่ จำกัด สำหรับแอปพลิเคชันและตัวจัดการเริ่มต้นที่ให้ฟังก์ชันการทำงานพื้นฐานของอุปกรณ์เป็นพื้นฐานสำหรับการทำงานที่คาดไว้ของอุปกรณ์ (ตัวอย่างเช่นแอป Dialer เริ่มต้นของอุปกรณ์สำหรับจัดการ ACTION_CALL อาจมีสิทธิ์เข้าถึงโทรศัพท์) สำหรับรายละเอียดโปรดดู การสร้างข้อยกเว้น
  • แอปที่โหลดไว้ล่วงหน้าซึ่งมีสิทธิ์อันตรายต้องกำหนดเป้าหมาย API ระดับ 23 และคงรูปแบบสิทธิ์รันไทม์ไว้ นั่นคือขั้นตอน UI ระหว่างการติดตั้งแอปจะต้องไม่เบี่ยงเบนไปจากการใช้งาน AOSP ของ PermissionController ผู้ใช้สามารถเพิกถอนการอนุญาตที่เป็นอันตรายของแอปที่ติดตั้งไว้ล่วงหน้าและอื่น ๆ
  • แอปพลิเคชัน Headless ต้องใช้กิจกรรมเพื่อขอสิทธิ์หรือแชร์ UID กับแอปพลิเคชันอื่นที่มีสิทธิ์ที่จำเป็น สำหรับรายละเอียดโปรดดู แอปพลิเคชัน Headless

การโยกย้ายสิทธิ์

สิทธิ์ที่มอบให้กับแอปพลิเคชันบน Android 5.x จะยังคงได้รับหลังจากอัปเดตเป็น Android 6.0 ขึ้นไป แต่ผู้ใช้สามารถเพิกถอนสิทธิ์เหล่านั้นได้ทุกเมื่อ

ในการอัปเดต Android 9 ถึง 10 สิทธิ์ที่ จำกัด ยากทั้งหมดจะได้รับอนุญาตพิเศษ สำหรับรายละเอียดเกี่ยวกับการใช้สิทธิ์การแบ่งส่วนหน้า / พื้นหลังโปรดดู การเปลี่ยนแปลงความเป็นส่วนตัวของ Android 10 โดยเริ่มจาก ขอตำแหน่งพื้นหลัง

บูรณาการ

เมื่อรวมโมเดลสิทธิ์รันไทม์ของแอปพลิเคชันสำหรับ Android 6.0 ขึ้นไปคุณต้องอัปเดตแอปพลิเคชันที่ติดตั้งไว้ล่วงหน้าเพื่อให้ทำงานกับโมเดลใหม่ได้ คุณยังสามารถกำหนดข้อยกเว้นสำหรับแอปที่เป็นตัวจัดการ / ผู้ให้บริการเริ่มต้นสำหรับฟังก์ชันหลักกำหนดสิทธิ์แบบกำหนดเองและกำหนดธีมที่ใช้ในแอป PermissionController

กำลังอัปเดตแอปพลิเคชัน

แอปพลิเคชันบนอิมเมจระบบและแอปพลิเคชันที่ติดตั้งไว้ล่วงหน้าจะไม่ได้รับการอนุญาตล่วงหน้าโดยอัตโนมัติ เราขอแนะนำให้คุณทำงานร่วมกับนักพัฒนาแอปที่ติดตั้งไว้ล่วงหน้า (OEM, ผู้ให้บริการและบุคคลที่สาม) เพื่อทำการแก้ไขแอปที่จำเป็นโดยใช้ หลักเกณฑ์สำหรับนักพัฒนา คุณต้องตรวจสอบให้แน่ใจว่าแอปพลิเคชันที่ติดตั้งไว้ล่วงหน้าได้รับการแก้ไขเพื่อหลีกเลี่ยงข้อขัดข้องและปัญหาอื่น ๆ เมื่อผู้ใช้เพิกถอนสิทธิ์

แอปพลิเคชันที่โหลดไว้ล่วงหน้า

ใน Android 9 และต่ำกว่าแอปที่โหลดไว้ล่วงหน้าซึ่งใช้การอนุญาตที่เป็นอันตรายจะต้องกำหนดเป้าหมาย API ระดับ 23 ขึ้นไปและรักษาเวอร์ชันการอนุญาต AOSP ของ Android 6.0 และสูงกว่าไว้ ตัวอย่างเช่นโฟลว์ UI ระหว่างการติดตั้งแอปจะต้องไม่เบี่ยงเบนไปจากการใช้งาน AOSP ของ PermissionController ผู้ใช้ยังสามารถเพิกถอนสิทธิ์อันตรายของแอพที่ติดตั้งไว้ล่วงหน้า

ใน Android 6.0 ถึง 9 จะมีการให้สิทธิ์บางอย่างในระหว่างขั้นตอนการติดตั้ง อย่างไรก็ตามตั้งแต่ 10 เป็นต้นไปขั้นตอนการติดตั้ง (ดำเนินการโดยแอป Package Installer ) เป็นฟังก์ชันแยกจากการให้สิทธิ์ (ในแอป Permission Controller )

แอปพลิเคชันหัวขาด

เฉพาะกิจกรรมเท่านั้นที่สามารถขอสิทธิ์ได้ บริการไม่สามารถขอสิทธิ์โดยตรง

  • ใน Android 5.1 และรุ่นก่อนหน้าแอปพลิเคชันแบบไร้หัวสามารถขอสิทธิ์เมื่อติดตั้งหรือหากติดตั้งไว้ล่วงหน้าโดยไม่ต้องใช้กิจกรรม
  • ใน Android 6.0 ขึ้นไปแอปพลิเคชันที่ไม่มีหัวจะต้องใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อขอสิทธิ์:
    • เพิ่มกิจกรรมเพื่อขอสิทธิ์ (นี่เป็นวิธีที่แนะนำ)
    • แชร์ UID กับแอปพลิเคชันอื่นที่มีสิทธิ์ที่จำเป็น ใช้วิธีนี้เฉพาะเมื่อคุณต้องการให้แพลตฟอร์มจัดการ APK หลายรายการเป็นแอปพลิเคชันเดียว

เป้าหมายคือเพื่อหลีกเลี่ยงไม่ให้ผู้ใช้สับสนกับคำขอสิทธิ์ที่ดูเหมือนไม่อยู่ในบริบท

การปรับแต่ง UI PackageInstaller

หากต้องการคุณสามารถปรับแต่ง ธีม UI สิทธิ์ได้โดยการอัปเดตธีมอุปกรณ์เริ่มต้น ( Theme.DeviceDefault.Settings และ Theme.DeviceDefault.Light.Dialog.NoActionBar ) ที่ Theme.DeviceDefault.Light.Dialog.NoActionBar ใช้ อย่างไรก็ตามเนื่องจากความสม่ำเสมอเป็นสิ่งสำคัญสำหรับนักพัฒนาแอปคุณจึงไม่สามารถปรับแต่งตำแหน่งตำแหน่งและกฎเมื่อ UI สิทธิ์ปรากฏขึ้น

หากต้องการรวม สตริง สำหรับภาษาเพิ่มเติมให้ส่งสตริงไปที่ AOSP

การสร้างข้อยกเว้น

คุณสามารถให้สิทธิ์ล่วงหน้าแก่แอ็พพลิเคชันที่เป็นตัวจัดการเริ่มต้นหรือตัวให้บริการสำหรับฟังก์ชันการทำงานของระบบปฏิบัติการหลักโดยใช้คลาส DefaultPermissionGrantPolicy.java ใน PackageManager ตัวอย่าง:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

การกำหนดสิทธิ์ที่กำหนดเอง

คุณสามารถกำหนดสิทธิ์และกลุ่มที่กำหนดเองตาม ปกติ หรือ เป็นอันตราย และเพิ่มสิทธิ์เฉพาะ OEM / ผู้ให้บริการในกลุ่มสิทธิ์ที่มีอยู่ได้เช่นเดียวกับที่คุณทำได้ใน Android 5.x และรุ่นก่อนหน้า

ใน Android 6.0 ขึ้นไปหากคุณเพิ่มการอนุญาตที่เป็นอันตรายใหม่จะต้องได้รับการจัดการในลักษณะเดียวกับการอนุญาตที่เป็นอันตรายอื่น ๆ (ร้องขอระหว่างรันไทม์ของแอปและผู้ใช้สามารถเพิกถอนได้) โดยเฉพาะ:

  • คุณสามารถเพิ่มสิทธิ์ใหม่ให้กับกลุ่มปัจจุบันได้ แต่ไม่สามารถแก้ไขการแมป AOSP ของสิทธิ์อันตรายและกลุ่มสิทธิ์อันตรายได้ (กล่าวคือคุณไม่สามารถลบสิทธิ์ออกจากกลุ่มและมอบหมายให้กับกลุ่มอื่นได้)
  • คุณสามารถเพิ่มกลุ่มสิทธิ์ใหม่ในแอปพลิเคชันที่ติดตั้งบนอุปกรณ์ได้ แต่คุณไม่สามารถเพิ่มกลุ่มสิทธิ์ใหม่ในรายการของแพลตฟอร์มได้

การทดสอบสิทธิ์

Android มีการทดสอบ Compatibility Test Suite (CTS) ที่ตรวจสอบว่าสิทธิ์แต่ละสิทธิ์ถูกจับคู่กับกลุ่มที่ถูกต้อง การผ่านการทดสอบเหล่านี้เป็นข้อกำหนดสำหรับ Android 6.0 และความเข้ากันได้ของ CTS ที่ใหม่กว่า