Android เป็นระบบปฏิบัติการ 32 บิตหรือ 64 บิต


46

ชื่อนั้นค่อนข้างอธิบายตนเอง: Android เป็น 32- หรือ 64- บิตระบบปฏิบัติการ? ฉันคิดว่ามันเป็นหนึ่งหรือทั้งสองและไม่ใช่ทั้งสองอย่างเนื่องจากจะบังคับให้ไบนารีทั้ง 32- และ 64- บิตถูกโฮสต์บน Google Play ฉันรู้ว่านี่เป็นคำถามง่าย ๆ และคนอื่น ๆ ถามมาแล้ว แต่สำหรับชีวิตของฉันฉันไม่สามารถหาคำตอบได้จากเว็บและแน่นอนว่าไม่มีใครใน SE นี้

คำตอบ:


48

ในขอบเขตของชิปเซ็ต ARM ซึ่งเป็นปัจจัยร่วมกันทั้งสแต็ค Android ทั้งหมดจากเคอร์เนลใกล้เคียงเหมือนกันที่ใช้ Linux เป็นจริง 32 บิตคอมไพล์ข้ามจากปกติทั้งสภาพแวดล้อมโฮสต์ 32 บิต / 64 บิตสภาพแวดล้อมโฮสต์ มักจะเป็นหนึ่งในการกระจายของ Linux การกระจายที่แนะนำโดย Google สำหรับการสร้างและข้ามรวบรวม Android เป็นอูบุนตู

ไลบรารีรันไทม์ของ Android (สื่อ, กราฟิก, ระบบไฟล์, เป็นต้น) แต่ก็มีขนาด 32 บิต แต่เมื่อเราไปถึงเลเยอร์ของ dalvikvm จากนั้นจำนวนบิตจะไม่เกี่ยวข้องอย่างที่เป็นอยู่ ณ จุดนี้ จาก Google Play Store เป็น native bytecode ("ผลพลอยได้" ของโค้ด Java ที่สร้างขึ้นรวบรวมเป็น bytecode แบบพกพา) ซึ่งกำหนดเป้าหมาย DalvikVM (Virtual Machine) ซึ่งจะตีความและแปล bytecode ที่ตั้งค่าชุดคำสั่ง ARM ดิบ

Froyo เป็น Android ตัวสุดท้ายที่เปิดใช้งานการคอมไพล์ภายใต้สภาพแวดล้อมโฮสต์แบบ 32 บิตซึ่งเป็นการรวบรวมข้ามการกำหนดเป้าหมายชิปเซ็ต ARM

Gingerbread เป็น Android รุ่นแรกในอนาคตย้อนกลับไปเมื่อสามปีที่แล้วซึ่งมีข้อกำหนดว่าจะต้องใช้สภาพแวดล้อมการโฮสต์ 64 บิตที่สร้างขึ้นมา มีแฮ็กมากมายที่จะทำให้ Gingerbread ถูกสร้างขึ้นภายใต้สภาพแวดล้อมโฮสต์แบบ 32 บิต

ICS และ JB และขึ้นไปตอนนี้ต้องใช้สภาพแวดล้อมแบบ 64 บิตเพื่อเพิ่มความเร็วในการคอมไพล์และลดระยะเวลาในการสร้าง

ดังนั้นโดยสรุปสิ่งที่คุณเห็นบน Play Store ไม่มีผลต่อการใช้งาน 32 บิตหรือ 64 บิตและไม่เกี่ยวข้อง

หมายเหตุด้านข้าง: การกระจาย Linux RAM / Quad core / 64 บิตโดยทั่วไปเวลาที่ใช้ในการสร้าง ICS ตั้งแต่เริ่มต้นใช้เวลาสูงสุด 30 นาทีมีการกระจาย Linux แบบ 32 บิตซึ่งอาจใช้เวลานานกว่าในความเป็นจริงอาจทำให้ CPU ล่มสลาย เนื่องจากมีเพียงพลังการประมวลผลที่ไม่เพียงพอในการปั่นและหมุนรหัสที่คอมไพล์ซึ่งเป็นกระบวนการที่เรียกร้องและเรียกเก็บภาษีมาก!

พิสูจน์เรื่องนี้

ดึงไบนารีดั้งเดิมของ ARM ที่พบใน/system/binหรือ/system/xbinตัวอย่าง/system/bin/dalvikvmนี้เป็นไบนารี Dalvik VM ที่รับผิดชอบเลเยอร์บนของ Java และ APK

ตอนนี้ตรวจสอบไบนารีโดยการออกคำสั่งนี้: file dalvikvmซึ่งให้สรุปประเภทของไฟล์มันเป็นผลลัพธ์ที่คาดว่าจะเป็น:

dalvikvm: ปฏิบัติการได้ของ ELF 32 บิต, ARM, รุ่น 1 (SYSV), เชื่อมโยงแบบไดนามิก (ใช้ libs ที่ใช้ร่วมกัน), ถูกปล้น

สังเกตการอ้างอิงถึง 32- บิต ELF และถูกคอมไพล์ข้ามไปที่ ARM และเป็นไบนารีที่ปฏิบัติการได้

ถูกต้องไปต่อมาตรวจสอบไลบรารี่ที่แชร์กันที่พบใน/system/libตัวอย่าง/system/lib/libandroid_runtime.soตอนนี้ออกfile libandroid_runtime.soเอาท์พุตที่คาดว่าจะเป็น:

libandroid_runtime.so: ELF 32- บิต LSB แชร์อ็อบเจ็กต์, ARM, เวอร์ชัน 1 (SYSV), เชื่อมโยงแบบไดนามิก, ปล้น

สังเกตอีกครั้งว่าเอลฟ์ 32 บิตของมันถูกคอมไพล์ข้ามไปยัง ARM และเป็นไลบรารีที่แชร์

กุญแจสำคัญในการรวบรวมข้ามโฮสต์สามารถพบได้ในแหล่ง AOSP เช่น Gingerbread build เดิมมีความต้องการที่จะสร้างบนระบบโฮสต์ 64 บิตนี่คือลิงค์กลุ่มข่าวสารที่อ้างอิงถึงวิธีการแก้ไขสคริปต์เพื่อสร้างมันขึ้นมาบน โฮสต์ 32 บิตซึ่งมีสองแพตช์พบได้ที่นี่สำหรับbuild/core.mkและbuild/main.mk( รวมกัน ) ในการตรวจสอบ Gerrit ของ AOSP

ผลที่ตามมาแพทช์นี้ได้มาถึงสคริปต์สร้างของ ICS ซึ่งฉันได้รับสิทธิ์ในการรวบรวม ICS บนแพลตฟอร์ม 32 บิตซึ่งใช้เวลาสร้าง 3 วัน ( เป็นพอร์ตของ ICS สำหรับ Zte Blade ) ตอนนี้ต้องการจะเมาขึ้นคุณจะต้องแน่นอนโฮสต์ 64bit เพื่อเปิดใช้งานข้ามสะสมของอาคาร AOSP จาก ICS ขึ้น :)


2
สิ่งที่น่าสนใจ แต่มันก็ดีที่มีแหล่งข้อมูลในคำตอบ
ถั่วลิสง

2
+1 เพราะถึงแม้ว่าไม่มีแหล่งที่มาอย่างน้อยครึ่งหนึ่งของงานที่ทำเพื่อการวิจัยได้ทำเพื่อช่วยค้นหาสิ่งที่จะมองหา อย่า -1 คนสำหรับการทำความพยายามที่ดีในการช่วยเหลือและการตอบคำถาม ...
haylem

1
ขณะนี้มีอุปกรณ์ ARM 64 บิตที่ใช้ Android 64 บิต
Matthew อ่าน

1
ฉันกำลัง downvoting เพราะคำตอบส่วนใหญ่เกี่ยวกับสภาพแวดล้อมที่ใช้ในการรวบรวม Android ซึ่งไม่เกี่ยวข้องกับคำถามทั้งหมด
Dan Hulme

1
ใช่มันเป็นเรื่องจริงและฉันจะโพสต์คำตอบใหม่เกี่ยวกับสถานการณ์ในวันนี้ แต่สภาพแวดล้อมในการรวบรวมนั้นเป็นปลาเฮอริ่งแดงเสมอ
Dan Hulme

8

เริ่มแรก Android เขียนขึ้นสำหรับโปรเซสเซอร์ 32 บิตเท่านั้นโดยเฉพาะโปรเซสเซอร์ ARM 32 บิต ต่อมา Intel และ MIPS ได้ลงทุนเป็นจำนวนมากในการทำให้ Android รองรับสถาปัตยกรรมของพวกเขาเช่นกัน แต่ยังมีเพียงโปรเซสเซอร์ 32 บิตเท่านั้น พวกเขาสามารถทำสิ่งนี้ได้โดยไม่มีปัญหาความเข้ากันได้ (มาก) เพราะแอพส่วนใหญ่ไม่ได้จัดส่งเป็นไบนารี เขียนใน Java พวกเขาจะถูกส่งเป็นbytecodeแทนซึ่งเครื่องเสมือนบนโทรศัพท์จะคอมไพล์กับสถาปัตยกรรมของโทรศัพท์เมื่อแอพทำงาน แอพบางตัวรวมถึงNativeส่วนประกอบซึ่งจัดส่งเป็นไบนารี สิ่งนี้ทำเพื่อทำให้แอพบางประเภทเร็วขึ้น (โดยเฉพาะเกม) หรือเพื่อให้แอปเข้าถึงไลบรารี C ที่ไม่มีใน Java แอปเหล่านั้นสามารถมีไบนารีได้มากกว่าหนึ่งรายการสำหรับชิ้นส่วนของรหัสเนทีฟเพื่อให้สามารถทำงานบนสถาปัตยกรรมที่แตกต่างกันได้ ถึงกระนั้นแอพส่วนใหญ่ก็เป็น Java เท่านั้นดังนั้นพวกมันจึงใช้งานได้กับสถาปัตยกรรมทุกประเภท

ข้างต้นเป็นจริงทั้งหมดในขณะที่คำถามนี้ (และคำตอบอื่น ๆ ส่วนใหญ่) เขียน แต่ไม่อีกต่อไป Lollipop แนะนำการรองรับโปรเซสเซอร์ ARM 64 บิตใหม่ ( ARMv8)) เช่นเดียวกับโปรเซสเซอร์ x86_64 ของ Intel และ AMD ซึ่งหมายความว่าตอนนี้ Android รองรับทั้งโปรเซสเซอร์ 32- บิตและ 64- บิต Nexus 9 เป็นอุปกรณ์ Android รุ่น 64 บิตตัวแรก เช่นเดียวกับการให้เข้าถึงส่วนขยายชุดคำสั่งใหม่การสนับสนุน 64 บิตหมายความว่าแอปสามารถใช้ RAM มากกว่า 4 GB แอพส่วนใหญ่ไม่ต้องการมากนัก แต่เกมระดับไฮเอนด์และซอฟต์แวร์สร้างภาพถ่าย / วิดีโอสามารถใช้ประโยชน์ได้อย่างแน่นอน: การผลักดัน Android ให้เป็นแพลตฟอร์มสำหรับเกมคอนโซลคุณภาพ (รวมถึงเกม VR) และการสร้างเนื้อหา แอป Java ไม่จำเป็นต้องได้รับการอัปเดตเพื่อใช้ประโยชน์จากสิ่งนี้เพราะเครื่องเสมือนจะคอมไพล์พวกเขาเข้ากับสถาปัตยกรรมของโทรศัพท์เสมอ แต่แอพที่มีรหัสเนทีฟจะเป็น

เนื่องจาก ARMv8 นั้นใช้งานได้กับรหัส 32 บิต (ในทางเดียวกัน x86_64 ยังสามารถเรียกใช้รหัส x86 ได้) แม้แต่แอพที่มีรหัสเนทีฟสำหรับโปรเซสเซอร์ 32 บิตยังสามารถทำงานบน Android 64 บิตได้ ดังนั้นแอปจะต้องรวบรวมเป็น 64 บิตหากมีรหัสเนทีฟและต้องการใช้ประโยชน์จากขีด จำกัด RAM ที่สูงขึ้นหรือคุณสมบัติใหม่ของสถาปัตยกรรม


5

ชิป ARM ทั้งหมดปัจจุบันเป็นแบบ 32 บิต ด้วยเหตุนี้ในปัจจุบัน Android รันรหัสทั้งหมดในสภาพแวดล้อมแบบ 32 บิต

โปรเซสเซอร์ 64 บิตตั้งค่าเพื่อเปิดในปี 2014


1
นั่นไม่ใช่แหล่งที่เชื่อถือได้อย่างแน่นอนเพราะนี่คือการพูดคุยเกี่ยวกับเซิร์ฟเวอร์เพื่อพูดว่า“ สมาร์ทโฟนนั้นไกลออกไปเล็กน้อย” Forsyth กล่าว เรากำลังพูดถึง ARM ในบริบทของ Android / สมาร์ทโฟน / แท็บเล็ต
t0mm13b

2

Android เป็นระบบ 32- หรือ 64- บิต ฉันคิดว่ามันเป็นหนึ่งหรือทั้งสองและไม่ใช่ทั้งสองอย่างเนื่องจากจะบังคับให้ไบนารีทั้ง 32- และ 64- บิตถูกโฮสต์บน Google Play

ทั้งที่จริงแล้ว Android เป็นระบบปฏิบัติการของ Dalvik VM และ Google Play เป็นโฮสต์ของแอปพลิเคชัน Dalvik Dalvik VM นั้นเองเช่น Java VM นั้นมีขนาด 32 บิตอยู่เสมอโดยไม่คำนึงถึงความเกี่ยวข้องของเครื่องจักรทางกายภาพ

ตามที่คุณสงสัยว่าแอพพลิเคชั่นที่มาพร้อมกับไบนารีเนทีฟและแอพพลิเคชั่น NDK จะต้องจัดส่งพร้อมกับไบนารี่ที่คอมไพล์สำหรับทุกสถาปัตยกรรมที่มันตั้งใจจะทำงาน สถาปัตยกรรมที่ใช้กันมากที่สุดที่ Android รันนั้นคือ ARM 32 บิต อย่างไรก็ตามยังมีอุปกรณ์ที่ทำงานบน x86 และ MIPS


0

ฉันแค่เดา ​​แต่ฉันคิดว่ามันอธิบายได้ง่าย ขึ้นอยู่กับอุปกรณ์ที่คุณใช้มีระบบปฏิบัติการสี่ประเภทคือ ARM, ARM 64, X84 และ X84_64 ARM เป็นแพลตฟอร์ม 32 บิตที่ได้รับความนิยม ARM 64 ยังเป็นแพลตฟอร์มที่ได้รับความนิยม แต่ 64 บิต X84 เป็นแพลตฟอร์มที่ไม่ธรรมดาและใช้กับ Zenfones เช่นเดียวกับ X84_64 ซึ่งเป็นเรื่องแปลกและใช้กับ Android Emulators ฉันได้รับข้อมูลระบบปฏิบัติการนี้ใน Open Gapps

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.