इस ट्यूटोरियल की मदद से, पहली बार Android ऑपरेटिंग सिस्टम डेवलप करने की कोशिश की जा सकती है.
Android डेवलपमेंट के लिए सेट अप करें
Android सोर्स की main
ब्रांच को डाउनलोड और बनाने से पहले, पक्का करें कि आपका हार्डवेयर ज़रूरी शर्तें पूरी करता हो. साथ ही, यह भी पक्का करें कि ज़रूरी सॉफ़्टवेयर सही तरीके से इंस्टॉल किया गया हो. आपको इन शब्दों के बारे में भी जानकारी होनी चाहिए:
- Git
- Git, मुफ़्त और ओपन सोर्स डिस्ट्रिब्यूटेड वर्शन कंट्रोल सिस्टम है. Android, लोकल ऑपरेशन के लिए Git का इस्तेमाल करता है. जैसे, ब्रैंचिंग, कमिट, बदलाव, और बदलाव करना. Git सीखने में मदद पाने के लिए, Git का दस्तावेज़ देखें.
- रिपो
- Repo, Git के चारों ओर एक Python रैपर है जो कई Git डेटा स्टोर करने की जगहों में मुश्किल काम करने को आसान बनाता है. Repo, वर्शन कंट्रोल के सभी ऑपरेशन के लिए Git की जगह नहीं लेता. यह सिर्फ़ Git के मुश्किल ऑपरेशन को आसान बनाता है. Repo, मेनिफ़ेस्ट फ़ाइलों का इस्तेमाल करके, Git प्रोजेक्ट को Android सुपर प्रोजेक्ट में इकट्ठा करता है.
- मेनिफ़ेस्ट फ़ाइल
- मेनिफ़ेस्ट फ़ाइल एक एक्सएमएल फ़ाइल होती है. इससे पता चलता है कि Android सोर्स में मौजूद कई Git प्रोजेक्ट, एओएसपी सोर्स ट्री में कहां डाले जाते हैं.
हार्डवेयर की ज़रूरी शर्तें पूरी करना
आपके डेवलपमेंट वर्कस्टेशन को हार्डवेयर की इन ज़रूरी शर्तों को पूरा करना चाहिए या उससे ज़्यादा काम करना चाहिए:
64-बिट x86 सिस्टम.
कोड को चेक आउट और बिल्ड करने के लिए, डिस्क में कम से कम 400 जीबी खाली जगह होनी चाहिए (चेक आउट करने के लिए 250 जीबी और बिल्ड करने के लिए 150 जीबी).
कम से कम 64 जीबी रैम. Google, Android बनाने के लिए 64 जीबी रैम वाली 72-कोर मशीनों का इस्तेमाल करता है. इस हार्डवेयर कॉन्फ़िगरेशन के साथ, Android का पूरा बिल्ड बनाने में करीब 40 मिनट लगते हैं. वहीं, Android का इंक्रीमेंटल बिल्ड बनाने में सिर्फ़ कुछ मिनट लगते हैं. इसके उलट, 64 जीबी रैम वाली 6-कोर मशीन पर, पूरे ऐप्लिकेशन को बिल्ड करने में करीब छह घंटे लगते हैं.
ऑपरेटिंग सिस्टम से जुड़ी ज़रूरी शर्तें पूरी करें
आपके डेवलपमेंट वर्कस्टेशन में, GNU C Library (glibc) 2.17 या उसके बाद के वर्शन के साथ 64-बिट Linux डिस्ट्रिब्यूशन होना ज़रूरी है.
ज़रूरी पैकेज इंस्टॉल करना
Ubuntu 18.04 या बाद के वर्शन के लिए ज़रूरी पैकेज इंस्टॉल करने के लिए, नीचे दिया गया कमांड चलाएं:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
ज़रूरी सॉफ़्टवेयर इंस्टॉल करना
AOSP के साथ काम करने से पहले, आपके पास OpenJDK, Make, Python 3, और Repo इंस्टॉल होने चाहिए. Android की AOSP मुख्य शाखा में, पहले से बने OpenJDK, Make, और Python 3 वर्शन मौजूद होते हैं. इसलिए, इंस्टॉल करने के लिए अतिरिक्त चरणों की ज़रूरत नहीं होती. इस सेक्शन में, Repo इंस्टॉल करने का तरीका बताया गया है.
Repo इंस्टॉल करना
Repo इंस्टॉल करने के लिए, यह तरीका अपनाएं:
पैकेज की मौजूदा जानकारी डाउनलोड करें:
sudo apt-get update
Repo लॉन्चर इंस्टॉल करने के लिए, यह कमांड चलाएं:
sudo apt-get install repo
Repo लॉन्चर, एक Python स्क्रिप्ट उपलब्ध कराता है. यह स्क्रिप्ट, चेकआउट की प्रोसेस शुरू करती है और Repo टूल को पूरी तरह से डाउनलोड करती है.
अगर ऐसा हो जाता है, तो सीधे चौथे चरण पर जाएं.
(ज़रूरी नहीं) नीचे दिए गए निर्देशों का इस्तेमाल करके, Repo को मैन्युअल तरीके से इंस्टॉल करें:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX) curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
पहले तीन निर्देशों से एक अस्थायी फ़ाइल सेट अप की जाती है, रेपो को फ़ाइल में डाउनलोड किया जाता है, और इस बात की पुष्टि की जाती है कि दी गई कुंजी, ज़रूरी कुंजी से मेल खाती है या नहीं. अगर ये निर्देश पूरे होते हैं, तो आखिरी निर्देश रेपो लॉन्चर को इंस्टॉल करता है.
रेपो लॉन्चर वर्शन की पुष्टि करें:
repo version
आउटपुट में 2.4 या उसके बाद का वर्शन दिखना चाहिए. उदाहरण के लिए:
repo launcher version 2.45
Android सोर्स डाउनलोड करना
Android का सोर्स, Google के होस्ट किए गए Git रिपॉज़िटरी के कलेक्शन में मौजूद होता है. हर Git रिपॉज़िटरी में, Android सोर्स का पूरा इतिहास शामिल होता है. इसमें सोर्स में किए गए बदलाव और बदलाव किए जाने की तारीख की जानकारी भी शामिल होती है. Android सोर्स डाउनलोड करने के लिए:
अपनी होम डायरेक्ट्री पर जाएं:
cd ~
इसके अंदर एक लोकल वर्किंग सबडायरेक्ट्री बनाएं:
mkdir aosp
डायरेक्ट्री में नेविगेट करने के लिए:
cd aosp
AOSP रिपॉज़िटरी के सोर्स कोड की मुख्य शाखा (डिफ़ॉल्ट) को शुरू करना:
repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
Git के क्रेडेंशियल (नाम, ईमेल पता) डालें या स्वीकार करें.
सोर्स कोड सिंक करें:
repo sync -c -j8
अगर डाउनलोड करने के दौरान कोई समस्या आती है, तो सिंक करने से जुड़ी समस्याओं को हल करना लेख पढ़ें.
कोड बनाएं
कोड बनाने के लिए:
अपनी वर्किंग डायरेक्ट्री में,
envsetup.sh
स्क्रिप्ट को सोर्स करें, ताकि आप अपना बिल्ड एनवायरमेंट सेट अप कर सकें:source build/envsetup.sh
lunch
कमांड का इस्तेमाल करके, बनाने के लिए target डिवाइस का टाइप तय करें. टारगेट, डिवाइस का कोई वैरिएशन होता है. जैसे, कोई खास मॉडल या फ़ॉर्म फ़ैक्टर. यह टारगेट तय करें:lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
आपको अपने टारगेट और बिल्ड एनवायरमेंट की खास जानकारी दिखेगी:
============================================ PLATFORM_VERSION_CODENAME=VanillaIceCream PLATFORM_VERSION=VanillaIceCream PRODUCT_INCLUDE_TAGS=com.android.mainline TARGET_PRODUCT=aosp_arm TARGET_BUILD_VARIANT=eng TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a-neon TARGET_CPU_VARIANT=generic HOST_OS=linux HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete HOST_CROSS_OS=windows BUILD_ID=AOSP.MAIN OUT_DIR=out ============================================
टारगेट बनाएं:
m
पहले बिल्ड के लिए कई घंटे लग सकते हैं. इसके बाद के बिल्ड में काफ़ी कम समय लगता है. आपके बिल्ड का आउटपुट
$OUT_DIR
में दिखता है.
Cuttlefish लॉन्च करना
Cuttlefish एक Android एमुलेटर है. इसका इस्तेमाल, आपके बिल्ड की जांच करने के लिए किया जाता है.
होस्ट Debian पैकेज डाउनलोड करने, बनाने, और इंस्टॉल करने के लिए, नीचे दिए गए निर्देशों का पालन करें:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot
रीबूट करने पर, अतिरिक्त कर्नेल मॉड्यूल इंस्टॉल होने लगते हैं और
udev
नियम लागू होते हैं.Cuttlefish लॉन्च करें:
launch_cvd --daemon
अपने वेब ब्राउज़र में
https://localhost:8443
पर जाकर, Cuttlefish डिवाइस से कनेक्ट करें. आपका वर्चुअल Android डिवाइस दिखेगा.
बदलाव करें
changelist के इस उदाहरण का पालन करके, सोर्स कोड अपडेट करें.
अपने चेकआउट (
aosp/
डायरेक्ट्री) के रूट से,frameworks/native
Git प्रोजेक्ट पर जाएं:cd frameworks/native
इस निर्देश की मदद से, कुछ समय के लिए प्रोजेक्ट शुरू करें:
repo start <some-name> .
निम्न स्थान पर
SurfaceFlinger.cpp
में बदलाव करने के लिए अपने संपादक का उपयोग करें:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
यह लाइन ढूंढें:
void SurfaceFlinger::updateColorMatrixLocked() {
updateColorMatrixLocked()
की शुरुआत में यह लाइन जोड़ें:mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
कोड बनाएं:
m
डिवाइस पर मौजूद बिल्ड को अपडेट करें:
adb root
adb remount -R
adb root
adb sync
adb reboot
पुष्टि करें कि आपने जिस डिवाइस को चुना है उस पर रंग में बदलाव हुआ है. यह बदलाव, पहली इमेज में दिखाए गए रंग में बदलाव जैसा ही होना चाहिए.
पहली इमेज. रंग बदलने के बाद स्क्रीन का दिखना
टेस्ट ठीक करना
कोडलैब के इस हिस्से में, सोर्स ट्री में मौजूद उदाहरण के तौर पर दिए गए टेस्ट का इस्तेमाल किया गया है, जो काम नहीं कर रहा है.
जांच को चलाने, डीबग करने, और ठीक करने के लिए, इन निर्देशों का पालन करें:
चलाएं:
atest DevCodelabTest
जांच पूरी नहीं हो पाती.
काम न करने वाले टेस्ट के स्टैक ट्रेस की जांच करें:
STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)
स्टैक ट्रेस की आखिरी लाइन में, वह टेस्ट दिखता है जो काम नहीं कर रहा है (
testHelloWorld
). यह टेस्टDevCodelabTest.java
नाम की फ़ाइल में है.ठीक किए जाने वाले टेस्ट की जगह का पता लगाने के लिए, स्टैक ट्रेस की आखिरी लाइन में
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/
को जोड़ें. साथ ही, टेस्ट फ़ाइल के नाम तक जोड़ें. इसलिए,android.test.example.devcodelab.DevCodelabTest
,WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
हो जाता है.platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
में बदलाव करें औरAssert.assertTrue(false)
कोAssert.assertTrue(true)
से बदलेंसमस्या ठीक हो गई है या नहीं, इसकी पुष्टि करने के लिए टेस्ट को फिर से चलाएं:
atest DevCodelabTest
समीक्षा के लिए अपना कोड अपलोड करना
Repo, git clone
जैसे कमांड को एक साथ बंडल करके, Git का इस्तेमाल आसान बनाता है. इससे एक साथ कई Git रिपॉज़िटरी (या प्रोजेक्ट) पर काम किया जा सकता है.
Git में अपने प्रोजेक्ट के कोड की समीक्षा करने के लिए, Gerrit के वेब-आधारित कोड की समीक्षा करने वाले सिस्टम का इस्तेमाल करें.
यह मान लें कि आपने
frameworks/native
प्रोजेक्ट में बदलाव किए हैं. ऐसे बदलावों को अपलोड करने के लिए, इन कमांड को चलाएं:cd frameworks/native
repo start codelab .
git add .
git commit
तय किए गए मैसेज के लिए, यह जानकारी डालें:
Android codelab change Test: manual atest
बदलाव अपलोड करना:
repo upload
सफल होने पर, आपको इसके जैसा कोई मैसेज दिखेगा:
Upload project frameworks/native/ to remote branch main: branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab change to https://android-review.googlesource.com/ (y/N)? y remote: Processing changes: refs: 1, new: 1, done remote: remote: SUCCESS remote: remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] codelab -> refs/for/main
Gerrit में अपना बदलाव देखना
Gerrit में अपने बदलाव को देखने के लिए, टर्मिनल में लिंक आउटपुट पर जाएं. लिंक इस तरह का होता है:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
बदलाव को पहले जैसा करना
आम तौर पर, जांच के बाद और समीक्षा और मंज़ूरी मिलने के बाद, आपको बदलाव करने के लिए Gerrit में बदलाव करना होता है. साथ ही, उसे डेटा स्टोर करने की जगह में मर्ज कर दिया जाता है. इसके बजाय, इस कोडलैब के लिए, अपने काम को पहले जैसा करें:
Gerrit में, अबॉर्न करें पर क्लिक करें.
frameworks/native
प्रोजेक्ट डायरेक्ट्री (या उसकी सबडायरेक्ट्री) में, उससे जुड़ी अस्थायी शाखा को छोड़ दें:repo abandon codelab .
टेस्ट फ़ाइल में किए गए बदलावों को पहले जैसा करें. आपने बदलाव की जांच करने के लिए,
repo start
,git commit
, औरrepo upload
को नहीं चलाया है. इसलिए, फ़ाइल को खुद रीसेट किया जा सकता है. यह मानते हुए कि आपaosp/platform_testing directory
में हैं, फ़ाइल रीसेट करने के लिए नीचे दिए गए निर्देश का इस्तेमाल करें:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
इससे, Android प्लैटफ़ॉर्म डेवलपमेंट के लिए कोडलैब पूरा हो जाता है.
सहायता पाएं
अगर आपको इस कोडलैब के दौरान गड़बड़ियां आती हैं, तो किसी भी पेज पर सबसे नीचे दिए गए समस्या ट्रैकर लिंक का इस्तेमाल करके उनकी शिकायत करें. android-building ग्रुप को सवाल भेजें.
यह देखने के लिए कि crosvm
पहले से चल रहा है या नहीं, ps -A | grep crosvm
लिखें. अगर crossvm
चल रहा है, तो पीआईडी प्रोसेस के साथ stop_cvd || true
या kill crosvm
प्रोसेस टाइप करें.