इस ट्यूटोरियल की मदद से, Android ऑपरेटिंग सिस्टम के डेवलपमेंट को पहली बार आज़माया जा सकता है.
Android डेवलपमेंट के लिए सेट अप करना
Android सोर्स के android-latest-release मेनिफ़ेस्ट ब्रांच को डाउनलोड और बिल्ड करने से पहले, पक्का करें कि आपका हार्डवेयर
ज़रूरी शर्तें पूरी करता हो और
ज़रूरी सॉफ़्टवेयर सही तरीके से इंस्टॉल किया गया हो. आपको इन शब्दों के बारे में भी पता होना चाहिए:
- Git
- Git, वर्शन कंट्रोल करने का एक डिस्ट्रिब्यूटेड सिस्टम है. यह मुफ़्त में उपलब्ध है और इसका सोर्स कोड भी उपलब्ध है. Android, Git का इस्तेमाल स्थानीय कार्रवाइयों के लिए करता है. जैसे, ब्रांचिंग, कमिट, डिफ़, और बदलाव. Git के बारे में ज़्यादा जानने के लिए, Git का दस्तावेज़ देखें.
- Repo
- Repo, Git के लिए Python रैपर है. इसकी मदद से, कई Git रिपॉज़िटरी में जटिल कार्रवाइयां आसानी से की जा सकती हैं. Repo, वर्शन कंट्रोल से जुड़ी सभी कार्रवाइयों के लिए Git की जगह नहीं लेता. यह सिर्फ़ Git की जटिल कार्रवाइयों को आसान बनाता है. Repo, मेनिफ़ेस्ट फ़ाइलों का इस्तेमाल करके, Git प्रोजेक्ट को Android सुपरप्रोजेक्ट में इकट्ठा करता है.
- मेनिफ़ेस्ट फ़ाइल
- मेनिफ़ेस्ट फ़ाइल, एक एक्सएमएल फ़ाइल होती है. इसमें यह जानकारी होती है कि Android सोर्स में मौजूद अलग-अलग Git प्रोजेक्ट, AOSP सोर्स ट्री में कहां रखे गए हैं.
हार्डवेयर की ज़रूरी शर्तें पूरी करना
आपके डेवलपमेंट वर्कस्टेशन को हार्डवेयर की इन ज़रूरी शर्तों को पूरा करना चाहिए या इनसे बेहतर होना चाहिए:
64-बिट x86 सिस्टम.
कोड को चेक आउट और बिल्ड करने के लिए, डिस्क में कम से कम 400 जीबी जगह खाली होनी चाहिए. इसमें, कोड को चेक आउट करने के लिए 250 जीबी और बिल्ड करने के लिए 150 जीबी जगह शामिल है.
कम से कम 64 जीबी रैम. Google, Android को बिल्ड करने के लिए, 72 कोर वाली मशीनों का इस्तेमाल करता है. इनमें 64 जीबी रैम होती है. हार्डवेयर के इस कॉन्फ़िगरेशन के साथ, Android को पूरी तरह बिल्ड करने में करीब 40 मिनट लगते हैं. वहीं, Android को इंक्रीमेंटल तरीके से बिल्ड करने में कुछ ही मिनट लगते हैं. इसके उलट, 6 कोर वाली मशीन में 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 updateRepo लॉन्चर इंस्टॉल करने के लिए, यह कमांड चलाएं:
sudo apt-get install repoRepo लॉन्चर, एक 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 सोर्स, Git रिपॉज़िटरी के कलेक्शन में मौजूद होता है. इसे Google होस्ट करता है. हर Git रिपॉज़िटरी में, Android सोर्स का पूरा इतिहास शामिल होता है. इसमें सोर्स में किए गए बदलाव और वे बदलाव कब किए गए, इसकी जानकारी भी शामिल होती है. Android सोर्स डाउनलोड करने के लिए:
अपनी होम डायरेक्ट्री में जाएं:
cd ~इसमें, स्थानीय वर्किंग सबडायरेक्ट्री बनाएं:
mkdir aospडायरेक्ट्री में जाएं:
cd aospAOSP रिपॉज़िटरी सोर्स कोड के सबसे नए रिलीज़ ब्रांच (
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.shlunchकमांड का इस्तेमाल करके, बिल्ड करने के लिए टारगेट डिवाइस का टाइप तय करें. टारगेट, डिवाइस का कोई मॉडल या फ़ॉर्म फ़ैक्टर हो सकता है. यह टारगेट तय करें: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 curlgit clone https://github.com/google/android-cuttlefishcd android-cuttlefishfor dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd donesudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -fsudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -fsudo usermod -aG kvm,cvdnetwork,render $USERsudo rebootरीबूट करने पर, कर्नल के अतिरिक्त मॉड्यूल इंस्टॉल होते हैं और
udevके नियम लागू होते हैं.Cuttlefish लॉन्च करें:
launch_cvd --daemonअपने वेब ब्राउज़र में
https://localhost:8443पर जाकर, Cuttlefish डिवाइस से कनेक्ट करें. आपको Android पर चलने वाला वर्चुअल डिवाइस दिखेगा.
बदलाव करना
बदलावों की इस सूची के उदाहरण के मुताबिक, सोर्स कोड अपडेट करें.
अपने चेकआउट (
aosp/डायरेक्ट्री) के रूट से,frameworks/nativeGit प्रोजेक्ट पर जाएं:cd frameworks/nativeअस्थायी प्रोजेक्ट शुरू करने के लिए, यह कमांड चलाएं:
repo start PROJECT_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 rootadb remount -Radb rootadb syncadb 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/nativerepo start PROJECT_NAME.git add .git commitअपने कमिट मैसेज के लिए, यह डालें:
Android PROJECT_NAME. change Test: manual atestअपना बदलाव अपलोड करें:
repo uploadअगर यह प्रोसेस पूरी हो जाती है, तो आपको इस तरह का मैसेज दिखेगा:
Upload project frameworks/native/ to remote branch android17-release: branch PROJECT_NAME. ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android PROJECT_NAME. 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 PROJECT_NAME. change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] PROJECT_NAME. -> refs/for/android17-release
Gerrit में अपना बदलाव देखना
Gerrit में अपना बदलाव देखने के लिए, टर्मिनल में लिंक के आउटपुट पर जाएं. लिंक, इस तरह का होता है:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
अपने बदलाव को वापस लाएं
आम तौर पर, टेस्ट करने के बाद और समीक्षा और मंज़ूरी मिलने पर, Gerrit में अपना बदलाव सबमिट करें और उसे रिपॉज़िटरी में मर्ज करें. हालांकि, इस कोडलैब के लिए, अपने काम को पहले जैसा करें:
Gerrit में, रद्द करें पर क्लिक करें.
frameworks/nativeप्रोजेक्ट डायरेक्ट्री (या इसकी सबडायरेक्ट्री) में, इससे जुड़ी अस्थायी ब्रांच को रद्द करें:repo abandon PROJECT_NAME.टेस्ट फ़ाइल में किए गए बदलावों को पहले जैसा करें. टेस्ट में किए गए बदलाव पर
repo start,git commit, औरrepo uploadरन नहीं किया गया है. इसलिए, फ़ाइल को रीसेट किया जा सकता है. मान लें कि आपaosp/platform_testing directoryमें हैं. फ़ाइल को रीसेट करने के लिए, यह कमांड इस्तेमाल करें:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javagit checkout .
Android प्लैटफ़ॉर्म डेवलपमेंट के लिए कोडलैब पूरा हो गया है.
सहायता पाएं
अगर इस कोडलैब के दौरान आपको कोई गड़बड़ी मिलती है, तो किसी भी पेज पर सबसे नीचे मौजूद, समस्या ट्रैक करने वाले टूल के लिंक का इस्तेमाल करके, उसकी शिकायत करें. android-building ग्रुप को सवाल भेजें.
crosvm पहले से चल रहा है या नहीं, यह देखने के लिए ps -A | grep crosvm टाइप करें. अगर crossvm चल रहा है, तो stop_cvd || true या प्रोसेस पीआईडी के साथ kill crosvm प्रोसेस टाइप करें.