Android 15 (เวอร์ชันทดลอง AOSP) ขึ้นไปรองรับการสร้าง Android ที่มีขนาดหน้า 16 KB ตัวเลือกนี้จะใช้หน่วยความจำเพิ่มเติม แต่จะช่วยปรับปรุงประสิทธิภาพของระบบ
หน้าขนาด 16 KB ใช้ได้กับเป้าหมาย arm64
ที่มีเคอร์เนล 16 KB เท่านั้น
อย่างไรก็ตาม ยังมีตัวเลือกในการจำลองพื้นที่ผู้ใช้ขนาด 16 KB บน x86_64
สำหรับ Cuttlefish ด้วย
หากต้องการเปิดใช้หน้าขนาด 16 KB ให้ตั้งค่าตัวเลือกเวอร์ชันต่อไปนี้ในอุปกรณ์
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
จะนำการกำหนดPAGE_SIZE
ออกและกำหนดให้คอมโพเนนต์กำหนดขนาดของหน้าขณะรันไทม์PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
ซึ่งช่วยให้มั่นใจได้ว่าไฟล์ ELF ของแพลตฟอร์ม สร้างขึ้นด้วยการวางแนว 16 KB ขนาดที่ใหญ่กว่าที่ต้องการนี้มีไว้สำหรับความเข้ากันได้ในอนาคต การปรับแนว ELF 16 KB ทำให้เคอร์เนลรองรับหน้าขนาด 4 KB/16 KB ได้
ยืนยัน Flag ของบิลด์
หลังจากเลือกเป้าหมาย lunch
แล้ว ให้ตรวจสอบว่ามีการตั้งค่าแฟล็กบิลด์ในสภาพแวดล้อมที่ถูกต้อง
$ source build/envsetup.sh
$ lunch target
$ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED
16384
$ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO
true
หาก 2 คำสั่งก่อนหน้าแสดงผล 16384
และ true
ตามลำดับ แสดงว่าตั้งค่าแฟล็กบิลด์ถูกต้องแล้ว
สร้างคลังภาพที่แชร์โดยมีการวางแนว ELF ขนาด 16 KB
หากต้องการสร้างไลบรารีที่ใช้ร่วมกันซึ่งเป็นส่วนหนึ่งของโปรเจ็กต์ Android คุณจะต้องตั้งค่าแฟล็กบิลด์เหล่านี้ในเป้าหมายเท่านั้น
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
หากต้องการสร้างไลบรารีที่แชร์ร่วมกันที่ไม่ได้เป็นส่วนหนึ่งของโปรเจ็กต์ Android คุณต้องส่ง Flag Linker นี้
-Wl,-z,max-page-size=16384
ตรวจสอบไบนารีและไฟล์ที่สร้างไว้ล่วงหน้าเพื่อการตรวจสอบความสอดคล้อง ELF ขนาด 16 KB
วิธีที่ดีที่สุดในการตรวจสอบการตรวจสอบความสอดคล้องและลักษณะรันไทม์คือการทดสอบและเรียกใช้บนเคอร์เนลที่คอมไพล์แล้วขนาด 16 KB อย่างไรก็ตาม เพื่อตรวจหาปัญหาบางอย่างก่อนหน้านี้:
เริ่มตั้งแต่ Android W (เวอร์ชันทดลอง AOSP) คุณจะตั้งค่า
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
ในเวลาบิลด์ได้ ใช้ignore_max_page_size: true
ในAndroid.bp
และLOCAL_IGNORE_MAX_PAGE_SIZE := true
ในAndroid.mk
เพื่อละเว้นชั่วคราว การตั้งค่าเหล่านี้จะยืนยันรายการที่สร้างไว้ล่วงหน้าทั้งหมดและช่วยให้คุณตรวจจับเมื่อมีการอัปเดต แต่ไม่สอดคล้องกับขนาด 16 KBคุณสามารถเรียกใช้
atest elf_alignment_test
ซึ่งจะยืนยันความสอดคล้องของไฟล์ ELF ในอุปกรณ์ในอุปกรณ์ที่เปิดตัวด้วย Android 15 (เวอร์ชันทดลอง AOSP) ขึ้นไป