Android डेवलपमेंट आज़माना

इस ट्यूटोरियल की मदद से, 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 इंस्टॉल करने के लिए, यह तरीका अपनाएं:

  1. मौजूदा पैकेज की जानकारी डाउनलोड करें:

    sudo apt-get update
  2. Repo लॉन्चर इंस्टॉल करने के लिए, यह कमांड चलाएं:

    sudo apt-get install repo

    Repo लॉन्चर, एक Python स्क्रिप्ट उपलब्ध कराता है. यह स्क्रिप्ट, चेकआउट को शुरू करती है और Repo टूल को पूरी तरह डाउनलोड करती है.

    अगर यह प्रोसेस पूरी हो जाती है, तो सीधे चौथे चरण पर जाएं.

  3. (ज़रूरी नहीं) 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 लॉन्चर को इंस्टॉल करती है.

  4. Repo लॉन्चर का वर्शन देखें:

    repo version

    आउटपुट में, 2.4 या इसके बाद का वर्शन दिखना चाहिए. उदाहरण के लिए:

    repo launcher version 2.45

Android सोर्स डाउनलोड करना

Android सोर्स, Git रिपॉज़िटरी के कलेक्शन में मौजूद होता है. इसे Google होस्ट करता है. हर Git रिपॉज़िटरी में, Android सोर्स का पूरा इतिहास शामिल होता है. इसमें सोर्स में किए गए बदलाव और वे बदलाव कब किए गए, इसकी जानकारी भी शामिल होती है. Android सोर्स डाउनलोड करने के लिए:

  1. अपनी होम डायरेक्ट्री में जाएं:

    cd ~
  2. इसमें, स्थानीय वर्किंग सबडायरेक्ट्री बनाएं:

    mkdir aosp
  3. डायरेक्ट्री में जाएं:

    cd aosp
  4. AOSP रिपॉज़िटरी सोर्स कोड के सबसे नए रिलीज़ ब्रांच (android-latest-release) को शुरू करें:

    repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifest
  5. अपने Git क्रेडेंशियल (नाम, ईमेल पता) डालें या स्वीकार करें.

  6. सोर्स कोड सिंक करें:

    repo sync -c -j8

    अगर डाउनलोड के दौरान कोई समस्या आती है, तो सिंक की समस्याओं को हल करना और ठीक करना लेख देखें.

कोड बिल्ड करना

कोड बिल्ड करने के लिए:

  1. अपने वर्किंग डायरेक्ट्री में जाकर, envsetup.sh स्क्रिप्ट को सोर्स करें, ताकि आपका बिल्ड एनवायरमेंट सेट अप हो जाए:

    source build/envsetup.sh
  2. 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
    ============================================
    
  3. टारगेट बिल्ड करें:

    m

पहले बिल्ड में कई घंटे लग सकते हैं. इसके बाद के बिल्ड में काफ़ी कम समय लगता है. आपके बिल्ड का आउटपुट, $OUT_DIR में दिखता है.

Cuttlefish लॉन्च करना

Cuttlefish, Android एम्युलेटर है. इसका इस्तेमाल, अपने बिल्ड की जांच करने के लिए किया जाता है.

  1. होस्ट 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 के नियम लागू होते हैं.

  2. Cuttlefish लॉन्च करें:

    launch_cvd --daemon
    
  3. अपने वेब ब्राउज़र में https://localhost:8443 पर जाकर, Cuttlefish डिवाइस से कनेक्ट करें. आपको Android पर चलने वाला वर्चुअल डिवाइस दिखेगा.

बदलाव करना

बदलावों की इस सूची के उदाहरण के मुताबिक, सोर्स कोड अपडेट करें.

  1. अपने चेकआउट (aosp/ डायरेक्ट्री) के रूट से, frameworks/native Git प्रोजेक्ट पर जाएं:

    cd frameworks/native
  2. अस्थायी प्रोजेक्ट शुरू करने के लिए, यह कमांड चलाएं:

    repo start PROJECT_NAME.
  3. अपने एडिटर का इस्तेमाल करके, इस जगह पर मौजूद SurfaceFlinger.cpp में बदलाव करें:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. यह लाइन ढूंढें:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. 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});
    
  6. कोड बिल्ड करें:

    m
  7. डिवाइस पर बिल्ड अपडेट करें:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. पुष्टि करें कि चुने गए डिवाइस पर, रंग में बदलाव दिख रहा है. यह बदलाव, पहली इमेज में दिखाए गए बदलाव जैसा होना चाहिए.

    रंग बदलने की सुविधा के काम करने का उदाहरण

    पहली इमेज. रंग में बदलाव होने के बाद, स्क्रीन का दिखने का तरीका

किसी टेस्ट को ठीक करना

इस कोडलैब के इस हिस्से में, सोर्स ट्री में मौजूद एक उदाहरण टेस्ट का इस्तेमाल किया गया है. यह टेस्ट फ़ेल हो रहा है.

टेस्ट को चलाने, डीबग करने, और ठीक करने के लिए, इन निर्देशों का पालन करें:

  1. रन सेगमेंट:

    atest DevCodelabTest

    टेस्ट फ़ेल हो जाता है.

  2. फ़ेल होने वाले टेस्ट के स्टैक ट्रेस की जांच करें:

    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 नाम की फ़ाइल में मौजूद है.

  3. ठीक करने के लिए, टेस्ट की जगह की जानकारी पाने के लिए, स्टैक ट्रेस की आखिरी लाइन में, टेस्ट फ़ाइल के नाम तक और उसे शामिल करते हुए, 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.

  4. platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java में बदलाव करें और Assert.assertTrue(false) को Assert.assertTrue(true) से बदलें

  5. समस्या ठीक हुई है या नहीं, यह देखने के लिए टेस्ट को फिर से रन करें:

    atest DevCodelabTest

समीक्षा के लिए अपना कोड अपलोड करना

Repo, Git के इस्तेमाल को आसान बनाता है. इसके लिए, यह git clone जैसे कमांड को बंडल करता है, ताकि एक साथ कई Git रिपॉज़िटरी (या प्रोजेक्ट) पर काम किया जा सके.

Git में अपने प्रोजेक्ट के कोड रिव्यू के लिए, Gerrit के वेब-आधारित कोड रिव्यू सिस्टम का इस्तेमाल करें.

  1. मान लें कि आपने frameworks/native प्रोजेक्ट में बदलाव किए हैं. अपने बदलाव अपलोड करने के लिए, ये कमांड चलाएं:

    cd frameworks/native
    repo start PROJECT_NAME.
    git add .
    git commit
  2. अपने कमिट मैसेज के लिए, यह डालें:

    Android PROJECT_NAME. change
    Test: manual atest
    
  3. अपना बदलाव अपलोड करें:

    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 में अपना बदलाव सबमिट करें और उसे रिपॉज़िटरी में मर्ज करें. हालांकि, इस कोडलैब के लिए, अपने काम को पहले जैसा करें:

  1. Gerrit में, रद्द करें पर क्लिक करें.

  2. frameworks/native प्रोजेक्ट डायरेक्ट्री (या इसकी सबडायरेक्ट्री) में, इससे जुड़ी अस्थायी ब्रांच को रद्द करें:

    repo abandon PROJECT_NAME.
  3. टेस्ट फ़ाइल में किए गए बदलावों को पहले जैसा करें. टेस्ट में किए गए बदलाव पर 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 प्रोसेस टाइप करें.