ดาวน์โหลดแหล่ง Android

แหล่งที่มาของ Android ตั้งอยู่ในคอลเลกชันของที่เก็บ Git ที่โฮสต์โดย Google พื้นที่เก็บข้อมูล Git ประกอบด้วยประวัติทั้งหมดของแหล่งที่มาของ Android รวมถึงการเปลี่ยนแปลงแหล่งที่มาและเวลาที่มีการเปลี่ยนแปลง หน้านี้อธิบายวิธีการดาวน์โหลดซอร์ส

เริ่มต้นไคลเอนต์ Repo

ตั้งค่าไคลเอนต์ของคุณเพื่อเข้าถึงแหล่งเก็บข้อมูล Android:

  1. สร้างและนำทางไปยังไดเร็กทอรีการทำงาน:

    $ mkdir WORKING_DIRECTORY
    $ cd WORKING_DIRECTORY
    
  2. เตรียมใช้งานไดเร็กทอรีการทำงานของคุณสำหรับการควบคุมแหล่งที่มา:

    $ repo init -b main -u https://android.googlesource.com/platform/manifest
    

    ตัวเลือก -b ใช้เพื่อระบุสาขาที่คุณกำลังเตรียมใช้งาน หากไม่มีการระบุ -b repo init จะมีค่าเริ่มต้นเป็นสาขาหลัก สำหรับรายการสาขาและชื่อแท็ก โปรดดู แท็กและบิลด์ซอร์สโค้ด

    จำเป็นต้องใช้ตัวเลือก -u และใช้เพื่อระบุไฟล์ รายการ ซึ่งเป็นไฟล์ XML ที่ระบุตำแหน่งที่โปรเจ็กต์ Git ต่างๆ ในซอร์ส Android ถูกวางไว้ภายในไดเร็กทอรีการทำงานของคุณ ในตัวอย่างนี้ ไม่ได้ระบุชื่อของไฟล์ Manifest ดังนั้นคำสั่งจึงใช้ไฟล์ Manifest เริ่มต้น ( default.xml )

    ผลลัพธ์ควรมีข้อความ:

    $ repo has been initialized in path_to_working_directory
    

สำหรับข้อมูลเกี่ยวกับรูปแบบไฟล์ Manifest โปรดดูที่ Repo Manifest Format

สำหรับรายการคำสั่ง Repo ทั้งหมด โปรดดู การอ้างอิงคำสั่ง Repo

ดาวน์โหลดแหล่ง Android

รันคำสั่งต่อไปนี้เพื่อดาวน์โหลดซอร์สทรี Android ไปยังไดเร็กทอรีการทำงานของคุณ:

$ repo sync -c -j8

อาร์กิวเมนต์ -c สั่งให้ Repo ดึงสาขารายการปัจจุบันจากเซิร์ฟเวอร์ คำสั่ง -j8 แยกการซิงค์ข้ามเธรดเพื่อให้ดำเนินการเสร็จเร็วขึ้น

การดำเนินการนี้ควรใช้เวลาประมาณหนึ่งชั่วโมงกว่าเล็กน้อย

หากคุณประสบปัญหาใดๆ ในระหว่างการดาวน์โหลด โปรดดูที่ แก้ไขปัญหาเครือข่าย

แก้ไขปัญหาเครือข่าย

ส่วนนี้ให้คำแนะนำหลายประการสำหรับการแก้ไขปัญหาเครือข่ายที่อาจทำให้การซิงค์ไม่สำเร็จ

ใช้การตรวจสอบสิทธิ์เพื่อหลีกเลี่ยงอุปสรรคด้านโควต้า

เพื่อป้องกันเซิร์ฟเวอร์จากการใช้งานมากเกินไป ที่อยู่ IP แต่ละรายการที่ใช้ในการเข้าถึงแหล่งที่มาจะเชื่อมโยงกับโควต้า

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

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

เพื่อเปิดใช้งานการเข้าถึงการรับรองความถูกต้อง:

  1. สร้างรหัสผ่านด้วย ตัวสร้างรหัสผ่าน

  2. รันคำสั่งต่อไปนี้เพื่อแปลงไคลเอนต์ของคุณให้ใช้การรับรองความถูกต้องอัตโนมัติ (โดยไม่ต้องเปลี่ยนสาขา):

    $ repo init -u https://android.googlesource.com/a/platform/manifest
    

    โปรดทราบว่าคำนำหน้าไดเร็กทอรี /a/ จะทริกเกอร์การตรวจสอบสิทธิ์อัตโนมัติ

กำหนดค่าสำหรับการใช้พร็อกซี

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

$ export HTTP_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
$ export HTTPS_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port

ปรับการตั้งค่า TCP/IP เพื่อหลีกเลี่ยงปัญหาการเชื่อมต่อ

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

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

ใช้มิเรอร์ในเครื่องเพื่อหลีกเลี่ยงเวลาแฝงของเครือข่าย

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

  1. สร้างและซิงค์มิเรอร์:

    $ mkdir -p /usr/local/aosp/mirror
    $ cd /usr/local/aosp/mirror
    $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
    

    คำสั่งเหล่านี้สร้างมิเรอร์โลคัลใน /user/local/aosp/mirror และเตรียมข้อมูลเบื้องต้นให้กับมิเรอร์โดยใช้แฟล็ก --mirror ด้วยคำสั่ง repo init

  2. ในการซิงค์ไคลเอ็นต์จากมิเรอร์:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. สุดท้าย ทำตามคำสั่งเหล่านี้เพื่อซิงค์มิเรอร์กับเซิร์ฟเวอร์ และซิงค์ไคลเอ็นต์กับมิเรอร์:

    $ cd /usr/local/aosp/mirror</code>
    $ repo sync
    $ cd /usr/local/aosp/main
    $ repo sync
    

เป็นไปได้ที่จะจัดเก็บมิเรอร์บนเซิร์ฟเวอร์ LAN และเข้าถึงผ่าน NFS, SSH หรือ Git นอกจากนี้ยังสามารถจัดเก็บไว้ในไดรฟ์แบบถอดได้และส่งต่อไดรฟ์นั้นไปยังผู้ใช้หรือเครื่องต่างๆ

ใช้โคลนบางส่วน

หากคุณใช้ Git เวอร์ชัน 2.19 หรือใหม่กว่า ให้ระบุ --partial-clone เมื่อดำเนินการ repo init เพื่อแก้ไขปัญหาเครือข่ายที่มีเวลาแฝงต่ำ:

  $ repo init -u https://android.googlesource.com/platform/manifest -b main --partial-clone --clone-filter=blob:limit=10M

แทนที่จะเริ่มต้น Repo เพื่อดาวน์โหลดทุกอย่าง คำสั่งนี้จะดาวน์โหลดออบเจ็กต์ Git ตามที่จำเป็น

ดาวน์โหลดไบนารีที่เป็นกรรมสิทธิ์

AOSP สามารถทำงานบนโปรแกรมจำลอง Cuttlefish ได้โดยตรง แต่ไม่สามารถใช้ AOSP บนฮาร์ดแวร์ได้หากไม่มีไลบรารีที่เป็นกรรมสิทธิ์เฉพาะอุปกรณ์เพิ่มเติม ต่อไปนี้เป็นวิธีรับไบนารีของอุปกรณ์เหล่านั้น:

  • หากคุณกำลังดาวน์โหลดสาขา main และอาคารสำหรับอุปกรณ์ Nexus หรือ Pixel ให้ดาวน์โหลดไบนารีล่าสุดจาก ไซต์แสดงตัวอย่างไบนารี
  • หากคุณกำลังดาวน์โหลดและสร้างสาขา main และสร้างสำหรับอุปกรณ์ของคุณเอง คุณต้องจัดเตรียมไบนารีเฉพาะอุปกรณ์ของคุณ
  • หากคุณกำลังดาวน์โหลดและสร้างสาขาและอาคารที่ติดแท็ก ไม่ใช่สาขาหลักสำหรับอุปกรณ์ Nexus หรือ Pixel ให้ดาวน์โหลดไบนารีเฉพาะอุปกรณ์จาก ไบนารีสำหรับอุปกรณ์ Nexus และ Pixel

แยกไบนารีที่เป็นกรรมสิทธิ์

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

  1. แยกไฟล์เก็บถาวร
  2. เรียกใช้เชลล์สคริปต์ที่ขยายในตัวที่รวมอยู่ในรูทของแผนผังต้นทาง AOSP ของคุณ
  3. ยอมรับเงื่อนไขของข้อตกลงใบอนุญาตที่แนบมาด้วย ไบนารีและ makefiles ที่ตรงกันได้รับการติดตั้งใน vendor/ ลำดับชั้นของแผนผังต้นทาง

(ไม่บังคับ) ตรวจสอบความถูกต้องของรหัส

หากคุณกังวลเกี่ยวกับความถูกต้องของซอร์สโค้ด เช่น มาจาก Google หรือไม่ คุณสามารถตรวจสอบแท็ก git สำหรับสาขาได้ วิธีตรวจสอบแท็ก Git:

  1. คัดลอกและวางคีย์บล็อกต่อไปนี้ลงในไฟล์ข้อความ เช่น keyfile.asc

    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v1.4.2.2 (GNU/Linux)
    
    mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
    lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
    8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
    u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
    wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
    /HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
    jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
    MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
    b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
    aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
    cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
    gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
    2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
    QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
    hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
    C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
    LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+
    OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
    pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
    KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
    N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
    vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
    G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
    hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
    EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
    =Wi5D
    -----END PGP PUBLIC KEY BLOCK-----
    
  2. รันคำสั่งต่อไปนี้เพื่อป้อนคีย์สาธารณะลงในฐานข้อมูลคีย์ GnuPG ของคุณ คีย์นี้ใช้เพื่อลงนามแท็กที่มีคำอธิบายประกอบซึ่งแสดงถึงการเผยแพร่

    $ gpg --import keyfile.asc
    
  3. หลังจากนำเข้าคีย์แล้ว คุณสามารถตรวจสอบแท็กใดๆ ได้โดยการรันคำสั่งนี้:

    $ git tag -v TAG_NAME