Android डेवलपर के लिए कोडलैब

आप Earth के इतिहास में, सबसे ज़्यादा इंस्टॉल किए गए ऑपरेटिंग सिस्टम को डेवलप करने में मदद कर सकते हैं. हां, आपको एक Android प्लैटफ़ॉर्म इंजीनियर बनने वाला है.

वैसे तो यह रास्ता चुनौती भरा है, लेकिन Android टीम आपके सफ़र को हर तरह से आसान बनाने की कोशिश करती है. और टीम Android ओपन सोर्स प्रोजेक्ट (AOSP) में सीधे तौर पर काम करके हर दिन सुधार करती है.

बस आराम से बैठें, कोई टर्मिनल फ़ायर करें, और इतिहास रचें.

लक्ष्य

इस कोडलैब का मिशन दो इवेंट हैं:

  1. प्लैटफ़ॉर्म (ऑपरेटिंग सिस्टम) पर काम करने वाले Android इंजीनियरों के लिए, डेवलपर वर्कफ़्लो कैसा है, इस बारे में आपको एक छोटी सी झलक देने के लिए.
  2. आपको Android के टूल, दस्तावेज़, और डेवलपर वर्कफ़्लो के बारे में सुझाव देने के लिए कहा जाता है.

ज़रूरी शर्तें

इस कोडलैब के लिए ज़रूरी शर्तों की सूची, सामान्य प्लैटफ़ॉर्म (AOSP) डेवलपमेंट से जुड़ी शर्तों से ली गई है. यह कोडलैब पाने के लिए, ये कोड सेट अप करें:

एनवायरमेंट

आम तौर पर, उपयोगकर्ता सीधे वर्कस्टेशन पर ऐप्लिकेशन बनाते हैं और उसे डेवलप करते हैं. ऐसा हो सकता है कि आप अलग-अलग टर्मिनल में काम कर रहे हों और इस्तेमाल किए गए कई निर्देश, टर्मिनल से जुड़े हों. इसलिए, आपको उन्हें हर टर्मिनल सेशन में फिर से चलाना होगा. खास तौर पर, इनमें source build/envsetup.sh और lunch निर्देश शामिल हैं.

वर्कस्टेशन सेट अप करें

  1. अपने वर्कस्टेशन पर ज़रूरी पैकेज इंस्टॉल करें.
  2. टर्मिनल में रहते हुए, सभी Git डेटा स्टोर करने की जगहों के लिए Repo इंस्टॉल करें और क्रेडेंशियल पाएं.

कोड को शुरू और सिंक करें

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

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

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

    cd aosp
    
  4. एओएसपी रिपॉज़िटरी सोर्स कोड की मुख्य ब्रांच को शुरू करें (डिफ़ॉल्ट):

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

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

    repo sync -j8
    

शुरुआती सिंक में एक घंटा या उससे ज़्यादा समय लग सकता है.

हर रेपो चेकआउट को मेनिफ़ेस्ट फ़ाइल से दिखाया जाता है. एक बार में एक से ज़्यादा रेपो चेकआउट की अनुमति दी जा सकती है, बशर्ते वे अलग-अलग डायरेक्ट्री में मौजूद हों. ध्यान रखें कि हर चेकआउट और बिल्ड की मात्रा करीब 300 जीबी इस्तेमाल होती है (और यह बढ़ती जा रही है), इसलिए या तो खुद को दो रीपो चेकआउट तक सीमित करें या सेकंडरी ड्राइव की मदद से अपने सिस्टम को बेहतर बनाएं.

कोड बनाएं

Android बनाने के लिए, आपको lunch कमांड के साथ बनाने के लिए target डिवाइस का टाइप चुनना होगा. टारगेट, एक डिवाइस के क्रम में होने वाला बदलाव है, जैसे कि कोई खास मॉडल या डिवाइस का नाप या आकार.

टारगेट aosp_cf_x86_64_phone-userdebug की मदद से, किसी फ़िज़िकल डिवाइस के बिना भी कटलफ़िश वाला वर्चुअल Android डिवाइस बनाया जा सकता है.

इसके बजाय, फ़िज़िकल डिवाइस बनाने और अपडेट करने के लिए, कोई दूसरा टारगेट चुनें और फ़्लैश करने वाले डिवाइस के निर्देशों का पालन करें.

  1. अपने सोर्स कोड चेकआउट के रूट से, नीचे दिया गया कमांड चलाकर, Android डिवाइस बनाने के लिए अपना एनवायरमेंट सेट अप करें:

    source build/envsetup.sh
    
  2. इस तरह से बिल्ड टारगेट को लंच कमांड पर पास करें:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
    
  3. इसकी मदद से, अपने चेकआउट में कहीं से भी कोड बनाएं:

    m
    

पहले बिल्ड के लिए कई घंटे लग सकते हैं. बाद के बिल्ड में काफ़ी कम समय लगता है.

कटलफ़िश लॉन्च करें

कटलफ़िश एक 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. कटलफ़िश लॉन्च करें:

    launch_cvd --daemon
    
  3. अपने वेब ब्राउज़र में https://localhost:8443 पर जाकर कटलफ़िश डिवाइस से कनेक्ट करें. अभी-अभी बनाए गए Android डिवाइस की वीडियो स्ट्रीम से आपका स्वागत है.

बदलाव करें

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

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

    cd frameworks/native
    
  2. इस निर्देश के साथ एक अस्थायी प्रोजेक्ट शुरू करें:

    repo start <some-name> .
    
  3. नीचे दी गई जगह पर, बदलाव की सूची से अपडेट शामिल करने के लिए, SurfaceFlinger.cpp में बदलाव करें:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. यह पंक्ति खोजें:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. updatedColorMatrixLocked() की शुरुआत में ये दो लाइनें जोड़ें:

    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
    adb sync
    adb reboot
    

पुष्टि करें कि आपको अपने चुने हुए डिवाइस के रंग में वैसा ही बदलाव दिख रहा है जैसा पहली इमेज में दिखाया गया है.

रंग बदलने की प्रोसेस का उदाहरण

पहला डायग्राम. रंग बदलने के बाद स्क्रीन के दिखने का तरीका

अपने कोड की जांच करें

कोडलैब का यह हिस्सा, उदाहरण के तौर पर दिए गए टेस्ट का इस्तेमाल करता है, जो सोर्स ट्री में मौजूद है और यह काम नहीं कर रहा है. यह टेस्ट को स्थानीय तौर पर चलाने और कोड की जांच करने के लिए, Atest का इस्तेमाल करता है.

जांच का इस्तेमाल करने के लिए, इन निर्देशों का पालन करें:

  1. चलाएं:

    atest DevCodelabTest
    
  2. जांच नहीं हो पाएगी. इसे ठीक करने के लिए, सफल न होने वाले टेस्ट का सोर्स कोड ढूंढें:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. फिर यहां देखें

    platform_testing/tests/example/devcodelab
    
  4. फ़ाइल में बदलाव करने के लिए, android.test.example.devcodelab.DevCodelabTest में टेस्ट का नाम लें और . को / से बदलें. ऐसा करने से यह नतीजा मिलेगा:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. इसके बाद, बदलाव करें

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    बदलने के लिए

    Assert.assertTrue(false)
    

    के साथ

    Assert.assertTrue(true)
    
  6. समस्या ठीक हो जाने की पुष्टि करने के लिए, फिर से जांच करें:

    atest DevCodelabTest
    

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

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

Git और Repo के बारे में खास जानकारी पाने के लिए, सोर्स कंट्रोल टूल देखें. इसमें Android सोर्स कोड के साथ काम करने से जुड़े सभी दस्तावेज़ के लिंक दिए गए हैं. Git प्रोजेक्ट की पूरी सूची और हर प्रोजेक्ट से जुड़ी शाखाओं के अलग-अलग प्रोजेक्ट (पाथ) देखने के लिए AOSP डेटा स्टोर करने की जगह देखें.

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

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

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
    
  2. तय किए गए मैसेज के लिए, यह जानकारी डालें:

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

    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 में अपने बदलाव देखें

टर्मिनल में प्रिंट किए गए, इस लिंक से मिलते-जुलते लिंक पर जाएं:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

यह Android प्लैटफ़ॉर्म डेवलपमेंट के लिए, स्टार्टर कोडलैब पूरा करता है. अगले चरणों के लिए पैच सबमिट करना देखें और Android को डेवलप करने के बारे में पूरी जानकारी के लिए, इस साइट का बाकी हिस्सा देखें.

किए गए बदलाव को पहले जैसा करें

आम तौर पर, जांच के बाद और समीक्षा और मंज़ूरी मिलने के बाद, बदलाव को गियरिट में सबमिट किया जाता है और उसे डेटा स्टोर करने की जगह में मर्ज कर दिया जाता है.

इसके बजाय, इस कोडलैब के लिए, 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-बिल्डिंग ग्रुप को सवाल भेजें.