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

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

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

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

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

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

ข้อ จำกัด แบบแข็งและแบบอ่อนใน Android 10

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

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

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

ไวท์ลิสต์เกิดขึ้นระหว่างการติดตั้ง และเมื่อ

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

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

ความต้องการ

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

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

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

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

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

บูรณาการ

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

อัพเดทแอพพลิเคชั่น

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

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

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

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

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

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

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

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

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

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

ที่จะรวมสายสำหรับภาษาอื่นมีส่วนร่วมสตริงเพื่อ AOSP

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

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

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

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

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

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

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

ทดสอบสิทธิ์

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