इस ट्यूटोरियल की मदद से, पहली बार Android ऑपरेटिंग सिस्टम को डेवलप किया जा सकता है.
Android डेवलपमेंट के लिए सेट अप करना
Android सोर्स की android-latest-release
मेनिफ़ेस्ट ब्रांच को डाउनलोड और बिल्ड करने से पहले, पक्का करें कि आपका हार्डवेयर ज़रूरी शर्तों को पूरा करता हो. साथ ही, यह भी पक्का करें कि ज़रूरी सॉफ़्टवेयर सही तरीके से इंस्टॉल किया गया हो. आपको इन शब्दों के बारे में भी जानकारी होनी चाहिए:
- Git
- Git, मुफ़्त में उपलब्ध एक ओपन सोर्स डिस्ट्रिब्यूटेड वर्शन कंट्रोल सिस्टम है. Android, स्थानीय कार्रवाइयों के लिए Git का इस्तेमाल करता है. जैसे, ब्रांचिंग, कमिट, अंतर, और बदलाव. Git के बारे में जानने के लिए, Git का दस्तावेज़ पढ़ें.
- Repo
- Repo, Git के चारों ओर Python रैपर है. यह कई Git रिपॉज़िटरी में जटिल कार्रवाइयों को आसान बनाता है. Repo, वर्शन कंट्रोल से जुड़ी सभी कार्रवाइयों के लिए Git की जगह नहीं लेता. यह सिर्फ़ Git की मुश्किल कार्रवाइयों को पूरा करना आसान बनाता है. Repo, मेनिफ़ेस्ट फ़ाइलों का इस्तेमाल करके Git प्रोजेक्ट को Android सुपरप्रोजेक्ट में इकट्ठा करता है.
- मेनिफ़ेस्ट फ़ाइल
- मेनिफ़ेस्ट फ़ाइल एक XML फ़ाइल होती है. इसमें यह जानकारी होती है कि Android सोर्स में मौजूद अलग-अलग Git प्रोजेक्ट, AOSP सोर्स ट्री में कहां रखे गए हैं.
Meet हार्डवेयर की ज़रूरी शर्तें
आपके डेवलपमेंट वर्कस्टेशन में, यहां दी गई हार्डवेयर की ज़रूरी शर्तें पूरी होनी चाहिए या इससे बेहतर हार्डवेयर होना चाहिए:
64-बिट x86 सिस्टम.
कोड को चेक आउट और बनाने के लिए, डिस्क में कम से कम 400 जीबी खाली जगह होनी चाहिए (चेक आउट करने के लिए 250 जीबी + बनाने के लिए 150 जीबी).
कम से कम 64 जीबी रैम. Google, Android बनाने के लिए 72-कोर मशीनों का इस्तेमाल करता है. इनमें 64 जीबी रैम होती है. इस हार्डवेयर कॉन्फ़िगरेशन के साथ, Android के पूरे बिल्ड में करीब 40 मिनट लगते हैं. वहीं, Android के इंक्रीमेंटल बिल्ड में सिर्फ़ कुछ मिनट लगते हैं. इसके उलट, 64 जीबी रैम और छह कोर वाली मशीन पर पूरा बिल्ड बनाने में करीब छह घंटे लगते हैं.
ऑपरेटिंग सिस्टम से जुड़ी ज़रूरी शर्तें पूरी करना
आपके डेवलपमेंट वर्कस्टेशन में, 64-बिट वाला कोई भी Linux डिस्ट्रिब्यूशन होना चाहिए. साथ ही, उसमें GNU C Library (glibc) 2.17 या इसके बाद का वर्शन होना चाहिए.
ज़रूरी पैकेज इंस्टॉल करना
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 की नई रिलीज़ ब्रांच में, 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 को फ़ाइल में डाउनलोड करती हैं. इसके अलावा, यह भी पुष्टि करती हैं कि दी गई कुंजी, ज़रूरी कुंजी से मेल खाती है. अगर ये कमांड पूरी हो जाती हैं, तो आखिरी कमांड Repo लॉन्चर को इंस्टॉल कर देती है.
Repo लॉन्चर के वर्शन की पुष्टि करें:
repo version
आउटपुट में 2.4 या इसके बाद का वर्शन दिखना चाहिए. उदाहरण के लिए:
repo launcher version 2.45
Android सोर्स डाउनलोड करना
Android का सोर्स कोड, Google की ओर से होस्ट की गई Git रिपॉज़िटरी के कलेक्शन में मौजूद होता है. हर Git रिपॉज़िटरी में, Android के सोर्स कोड का पूरा इतिहास शामिल होता है. इसमें सोर्स कोड में किए गए बदलाव और बदलाव किए जाने की तारीख शामिल होती है. Android का सोर्स कोड डाउनलोड करने के लिए:
अपनी होम डायरेक्ट्री पर जाएं:
cd ~
इसके अंदर एक लोकल वर्किंग सबडायरेक्ट्री बनाएं:
mkdir aosp
डायरेक्ट्री में जाएं:
cd aosp
AOSP रिपॉज़िटरी के सोर्स कोड की नई रिलीज़ ब्रांच शुरू करें (
android-latest-release
):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifest
अपने Git क्रेडेंशियल (नाम, ईमेल पता) डालें या स्वीकार करें.
सोर्स कोड सिंक करें:
repo sync -c -j8
अगर आपको डाउनलोड करने में कोई समस्या आ रही है, तो सिंक करने से जुड़ी समस्याओं को हल करना लेख पढ़ें.
कोड बनाना
कोड बनाने के लिए:
अपनी वर्किंग डायरेक्ट्री में जाकर,
envsetup.sh
स्क्रिप्ट को सोर्स करें, ताकि आपका बिल्ड एनवायरमेंट सेट अप हो सके:source build/envsetup.sh
lunch
कमांड का इस्तेमाल करके बनाने के लिए, टारगेट डिवाइस टाइप तय करें. टारगेट, डिवाइस का क्रमपरिवर्तन होता है. जैसे, कोई खास मॉडल या फ़ॉर्म फ़ैक्टर. यह टारगेट तय करें:lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug
आपको टारगेट और बिल्ड एनवायरमेंट की खास जानकारी दिखेगी:
============================================ PLATFORM_VERSION_CODENAME=Baklava PLATFORM_VERSION=Baklava TARGET_PRODUCT=aosp_cf_x86_64_only_phone TARGET_BUILD_VARIANT=userdebug TARGET_ARCH=x86_64 TARGET_ARCH_VARIANT=silvermont HOST_OS=linux HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete HOST_CROSS_OS=windows BUILD_ID=BP1A.250305.020 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 वर्शन वाला वर्चुअल डिवाइस दिखेगा.
बदलाव करें
इस उदाहरण बदलाव की सूची के मुताबिक, सोर्स कोड को अपडेट करें.
अपने चेकआउट (
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 का इस्तेमाल करना आसान बनाता है. इसके लिए, यह git clone
जैसी कमांड को बंडल करता है, ताकि एक साथ कई 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 android16-release: 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/android16-release
Gerrit में किए गए बदलाव देखें
Gerrit में किए गए बदलाव देखने के लिए, टर्मिनल में लिंक आउटपुट पर जाएं. लिंक इस तरह का होता है:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
बदलाव को पहले जैसा करें
आम तौर पर, टेस्टिंग के बाद और समीक्षा करके मंज़ूरी मिलने पर, Gerrit में बदलाव सबमिट किया जाता है. इसके बाद, इसे रिपॉज़िटरी में मर्ज कर दिया जाता है. हालांकि, इस कोडलैब के लिए, अपने काम को पहले जैसा करें:
Gerrit में, Abandon पर क्लिक करें.
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 ग्रुप को सवाल भेजें.
ps -A | grep crosvm
टाइप करके देखें कि crosvm
पहले से चल रहा है या नहीं. अगर crossvm
चल रहा है, तो प्रोसेस पीआईडी के साथ stop_cvd || true
या kill crosvm
प्रोसेस टाइप करें.