উৎস ডাউনলোড করা হচ্ছে

অ্যান্ড্রয়েড সোর্স ট্রিটি Google দ্বারা হোস্ট করা একটি গিট রিপোজিটরিতে অবস্থিত। গিট রিপোজিটরিতে অ্যান্ড্রয়েড সোর্সের জন্য মেটাডেটা অন্তর্ভুক্ত থাকে, যার মধ্যে সোর্সের পরিবর্তন এবং কখন পরিবর্তন করা হয়েছিল। একটি নির্দিষ্ট অ্যান্ড্রয়েড কোড লাইনের জন্য সোর্স ট্রি কীভাবে ডাউনলোড করবেন তা এই পৃষ্ঠায় বর্ণনা করা হয়েছে।

উত্সটি ডাউনলোড করার পরিবর্তে একটি নির্দিষ্ট ডিভাইসের জন্য একটি কারখানার চিত্র দিয়ে শুরু করতে, একটি ডিভাইস বিল্ড নির্বাচন করা দেখুন।

একটি রেপো ক্লায়েন্ট শুরু করা হচ্ছে

রেপো লঞ্চার ইনস্টল করার পরে, অ্যান্ড্রয়েড সোর্স রিপোজিটরি অ্যাক্সেস করতে আপনার ক্লায়েন্ট সেট আপ করুন:

  1. আপনার কাজের ফাইলগুলি ধরে রাখতে একটি খালি ডিরেক্টরি তৈরি করুন। আপনার পছন্দ মতো যেকোনো নাম দিন:

    mkdir WORKING_DIRECTORY
    cd WORKING_DIRECTORY
    
  2. আপনার আসল নাম এবং ইমেল ঠিকানা দিয়ে গিট কনফিগার করুন। Gerrit কোড-রিভিউ টুল ব্যবহার করতে, আপনার একটি ইমেল ঠিকানা প্রয়োজন যা একটি নিবন্ধিত Google অ্যাকাউন্টের সাথে সংযুক্ত। নিশ্চিত করুন যে এটি একটি লাইভ ঠিকানা যেখানে আপনি বার্তা পেতে পারেন। আপনি এখানে যে নামটি প্রদান করেন তা আপনার কোড জমা দেওয়ার জন্য বৈশিষ্ট্যগুলিতে প্রদর্শিত হয়৷

    git config --global user.name Your Name
    git config --global user.email you@example.com
    
  3. রেপোর সাম্প্রতিকতম বাগ ফিক্স সহ এর সর্বশেষ সংস্করণ পেতে repo init চালান। ম্যানিফেস্টের জন্য আপনাকে অবশ্যই একটি URL নির্দিষ্ট করতে হবে, যা নির্দিষ্ট করে যে Android উত্সে অন্তর্ভুক্ত বিভিন্ন সংগ্রহস্থলগুলি আপনার কার্যকারী ডিরেক্টরির মধ্যে কোথায় রাখা হয়েছে৷

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

    মাস্টার শাখা পরীক্ষা করতে:

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

    মাস্টার ব্যতীত অন্য একটি শাখা পরীক্ষা করতে, এটি -b দিয়ে নির্দিষ্ট করুন। শাখার তালিকার জন্য, সোর্স কোড ট্যাগ এবং বিল্ড দেখুন।

    পাইথন 2 এর জন্য

    পাইথন 3 এর জন্য

    আপনি যদি একটি " /usr/bin/env 'python' no such file or directory " ত্রুটি বার্তা পান, তাহলে নিম্নলিখিত সমাধানগুলির মধ্যে একটি ব্যবহার করুন:

    যদি আপনার উবুন্টু 20.04.2 LTS একটি নতুন ইনস্টল করা হয় (বনাম আপগ্রেড করা) Linux সংস্করণ:

    sudo ln -s /usr/bin/python3 /usr/bin/python

    Git সংস্করণ 2.19 বা তার বেশি ব্যবহার করলে, repo init সম্পাদন করার সময় আপনি --partial-clone নির্দিষ্ট করতে পারেন। এটি সবকিছু ডাউনলোড করার পরিবর্তে শুধুমাত্র প্রয়োজনে গিট অবজেক্ট ডাউনলোড করতে গিট এর আংশিক ক্লোন ক্ষমতা ব্যবহার করে। যেহেতু আংশিক ক্লোন ব্যবহার করার মানে হল যে অনেক অপারেশন সার্ভারের সাথে যোগাযোগ করতে হবে, আপনি যদি একজন বিকাশকারী হন এবং আপনি কম লেটেন্সি সহ একটি নেটওয়ার্ক ব্যবহার করছেন তাহলে নিম্নলিখিতগুলি ব্যবহার করুন:

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

    শুধুমাত্র Windows OS-এর জন্য: যদি আপনি একটি ত্রুটির বার্তা পান যে উল্লেখ করে যে সিম্বলিক লিঙ্কগুলি তৈরি করা যায়নি, যার ফলে repo init ব্যর্থ হয়, এইগুলি তৈরি করতে বা তাদের সমর্থন সক্ষম করতে GitHub সিম্বলিক লিঙ্ক ডকুমেন্টেশন উল্লেখ করুন। অ-প্রশাসকদের জন্য, অ-প্রশাসকদের প্রতীকী লিঙ্ক তৈরি করতে অনুমতি দেওয়া বিভাগটি দেখুন।

একটি সফল সূচনা একটি বার্তা দিয়ে শেষ হয় যে রেপো আপনার কাজের ডিরেক্টরিতে আরম্ভ করা হয়েছে। আপনার ক্লায়েন্ট ডিরেক্টরিতে এখন একটি .repo ডিরেক্টরি রয়েছে যেখানে ম্যানিফেস্টের মতো ফাইল রাখা হয়।

অ্যান্ড্রয়েড সোর্স ট্রি ডাউনলোড করা হচ্ছে

ডিফল্ট ম্যানিফেস্টে উল্লিখিত রিপোজিটরিগুলি থেকে আপনার কার্যকারী ডিরেক্টরিতে অ্যান্ড্রয়েড সোর্স ট্রি ডাউনলোড করতে, চালান:

repo sync

দ্রুত সিঙ্ক করতে, -c (বর্তমান শাখা) এবং -j threadcount পতাকা পাস করুন:

repo sync -c -j8

অ্যান্ড্রয়েড সোর্স ফাইলগুলি তাদের প্রকল্পের নামে আপনার কাজের ডিরেক্টরিতে ডাউনলোড করা হয়।

আউটপুট দমন করতে, -q (শান্ত) পতাকা পাস করুন। সমস্ত বিকল্পের জন্য রেপো কমান্ড রেফারেন্স দেখুন।

প্রমাণীকরণ ব্যবহার করে

ডিফল্টরূপে, Android সোর্স কোডে অ্যাক্সেস বেনামী। সার্ভারগুলিকে অত্যধিক ব্যবহারের বিরুদ্ধে রক্ষা করতে, প্রতিটি আইপি ঠিকানা একটি কোটার সাথে যুক্ত।

অন্যান্য ব্যবহারকারীদের সাথে একটি আইপি ঠিকানা ভাগ করার সময় (উদাহরণস্বরূপ, যখন একটি NAT ফায়ারওয়ালের বাইরে থেকে উত্স সংগ্রহস্থলগুলি অ্যাক্সেস করা হয়), কোটাগুলি এমনকি নিয়মিত ব্যবহারের নিদর্শনগুলির জন্যও ট্রিগার করতে পারে (উদাহরণস্বরূপ, যদি অনেক ব্যবহারকারী একই IP ঠিকানা থেকে নতুন ক্লায়েন্ট সিঙ্ক করে অল্প সময়ের).

সেই ক্ষেত্রে, আপনি প্রমাণীকৃত অ্যাক্সেস ব্যবহার করতে পারেন, যা প্রতিটি ব্যবহারকারীর জন্য আলাদা কোটা ব্যবহার করে, IP ঠিকানা নির্বিশেষে।

প্রথমে, পাসওয়ার্ড জেনারেটর দিয়ে একটি পাসওয়ার্ড তৈরি করুন এবং পাসওয়ার্ড জেনারেটর পৃষ্ঠায় নির্দেশাবলী অনুসরণ করুন।

এরপরে, ম্যানিফেস্ট URI https://android.googlesource.com/a/platform/manifest ব্যবহার করে প্রমাণীকৃত অ্যাক্সেস জোর করে। লক্ষ্য করুন কিভাবে /a/ ডিরেক্টরি প্রিফিক্স বাধ্যতামূলক প্রমাণীকরণ ট্রিগার করে। আপনি নিম্নলিখিত কমান্ডের সাথে বাধ্যতামূলক প্রমাণীকরণ ব্যবহার করতে একটি বিদ্যমান ক্লায়েন্টকে রূপান্তর করতে পারেন:

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

নেটওয়ার্ক সমস্যা সমাধান করা

প্রক্সির পিছনে থেকে ডাউনলোড করার সময় (যা কিছু কর্পোরেট পরিবেশে সাধারণ), আপনাকে রেপো ব্যবহারের জন্য স্পষ্টভাবে প্রক্সি নির্দিষ্ট করতে হতে পারে:

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 স্ট্যাকের সেটিংস সামঞ্জস্য করা এবং অ-সমান্তরাল কমান্ড ব্যবহার করা পরিস্থিতির উন্নতি করতে পারে। TCP সেটিং পরিবর্তন করতে আপনার অবশ্যই রুট অ্যাক্সেস থাকতে হবে:

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

একটি স্থানীয় আয়না ব্যবহার করে

বেশ কয়েকটি ক্লায়েন্ট ব্যবহার করার সময়, বিশেষ করে এমন পরিস্থিতিতে যেখানে ব্যান্ডউইথের অভাব হয়, সমগ্র সার্ভার সামগ্রীর একটি স্থানীয় আয়না তৈরি করা এবং সেই আয়না থেকে ক্লায়েন্টকে সিঙ্ক করা ভাল (যার জন্য কোনও নেটওয়ার্ক অ্যাক্সেসের প্রয়োজন নেই)৷ একটি সম্পূর্ণ আয়নার ডাউনলোড দুটি ক্লায়েন্টের ডাউনলোডের চেয়ে ছোট এবং এতে আরও তথ্য রয়েছে।

এই নির্দেশাবলী অনুমান করে যে মিররটি /usr/local/aosp/mirror এ তৈরি করা হয়েছে। প্রথমত, আয়না নিজেই তৈরি করুন এবং সিঙ্ক করুন। লক্ষ্য করুন --mirror পতাকা, যা আপনি শুধুমাত্র একটি নতুন ক্লায়েন্ট তৈরি করার সময় নির্দিষ্ট করতে পারেন:

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

যখন মিরর সিঙ্ক করা হয়, আপনি এটি থেকে নতুন ক্লায়েন্ট তৈরি করতে পারেন। মনে রাখবেন যে আপনাকে অবশ্যই একটি পরম পথ নির্দিষ্ট করতে হবে:

mkdir -p /usr/local/aosp/master
cd /usr/local/aosp/master
repo init -u /usr/local/aosp/mirror/platform/manifest.git
repo sync

অবশেষে, সার্ভারের বিরুদ্ধে একটি ক্লায়েন্ট সিঙ্ক করতে, সার্ভারের বিরুদ্ধে মিরর সিঙ্ক করুন, তারপর ক্লায়েন্টকে আয়নার বিরুদ্ধে:

cd /usr/local/aosp/mirror
repo sync
cd /usr/local/aosp/master
repo sync

একটি LAN সার্ভারে আয়না সংরক্ষণ করা এবং NFS, SSH, বা Git এর মাধ্যমে এটি অ্যাক্সেস করা সম্ভব। এটি একটি অপসারণযোগ্য ড্রাইভে সংরক্ষণ করা এবং ব্যবহারকারী বা মেশিনের মধ্যে সেই ড্রাইভটি পাস করাও সম্ভব।

গিট ট্যাগ যাচাই করা হচ্ছে

আপনার GnuPG কী ডাটাবেসে নিম্নলিখিত সর্বজনীন কী লোড করুন। কীটি টিকাযুক্ত ট্যাগগুলিতে স্বাক্ষর করতে ব্যবহৃত হয় যা রিলিজগুলিকে প্রতিনিধিত্ব করে।

gpg --import

নীচের কীটি অনুলিপি করুন এবং পেস্ট করুন, তারপর ইনপুট শেষ করতে এবং কীগুলি প্রক্রিয়া করতে EOF ( Ctrl-D ) টাইপ করুন।

-----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-----

কীগুলি আমদানি করার পরে, আপনি এর সাথে যে কোনও ট্যাগ যাচাই করতে পারেন:

git tag -v TAG_NAME

মালিকানা বাইনারি প্রাপ্ত

AOSP শুধুমাত্র বিশুদ্ধ উত্স কোড থেকে ব্যবহার করা যাবে না এবং হার্ডওয়্যার গ্রাফিক্স ত্বরণের জন্য অতিরিক্ত হার্ডওয়্যার-সম্পর্কিত মালিকানাধীন লাইব্রেরিগুলি চালানোর প্রয়োজন। অতিরিক্ত সংস্থানগুলির জন্য ডাউনলোড লিঙ্ক এবং ডিভাইস বাইনারিগুলির জন্য নীচের বিভাগগুলি দেখুন।

মালিকানাধীন বাইনারি ডাউনলোড করুন

আপনি Google-এর ড্রাইভার থেকে ট্যাগ করা AOSP রিলিজ শাখায় চলমান সমর্থিত ডিভাইসগুলির জন্য অফিসিয়াল বাইনারি ডাউনলোড করতে পারেন। এই বাইনারিগুলি অ-ওপেন সোর্স কোড সহ অতিরিক্ত হার্ডওয়্যার ক্ষমতাগুলিতে অ্যাক্সেস যোগ করে। AOSP মাস্টার শাখা তৈরি করতে, পরিবর্তে বাইনারি প্রিভিউ ব্যবহার করুন। একটি ডিভাইসের জন্য মাস্টার শাখা তৈরি করার সময়, সবচেয়ে সাম্প্রতিক সংখ্যাযুক্ত প্রকাশের জন্য বা সাম্প্রতিক তারিখের সাথে বাইনারিগুলি ব্যবহার করুন।

মালিকানা বাইনারি নিষ্কাশন

বাইনারিগুলির প্রতিটি সেট একটি সংকুচিত সংরক্ষণাগারে একটি স্ব-নির্মিত স্ক্রিপ্ট হিসাবে আসে। প্রতিটি সংরক্ষণাগার সংকুচিত করুন, উৎস গাছের মূল থেকে অন্তর্ভূক্ত স্ব-নিষ্কাশন স্ক্রিপ্টটি চালান, তারপর নিশ্চিত করুন যে আপনি বদ্ধ লাইসেন্স চুক্তির শর্তাবলীতে সম্মত। বাইনারি এবং তাদের মিলে যাওয়া মেকফাইলগুলি উৎস গাছের vendor/ শ্রেণীবিভাগে ইনস্টল করা আছে।

পরিষ্কার কর

এক্সট্র্যাক্ট করার পরে নতুন ইনস্টল করা বাইনারিগুলি সঠিকভাবে বিবেচনায় নেওয়া হয়েছে তা নিশ্চিত করার জন্য, ব্যবহার করে যেকোন পূর্ববর্তী বিল্ডের বিদ্যমান আউটপুট মুছুন:

make clobber