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

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

हालांकि, यह प्रोसेस चुनौतीपूर्ण है, लेकिन Android टीम हर रिलीज़ के साथ, इसे आसान बनाने की कोशिश करती है. साथ ही, टीम सीधे तौर पर जानकारी देते हुए हर दिन सुधार करती है में काम करती हैं.

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

लक्ष्य

इस कोडलैब का मकसद दो तरह का है:

  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 कमांड की मदद से, डिवाइस का टारगेट टाइप चुनना होगा. टारगेट, एक डिवाइस के क्रम में होने वाला बदलाव है. जैसे कि कोई ख़ास मॉडल या डिवाइस का नाप या आकार.

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

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

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

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

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

    m

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

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 पर जाकर, कटलफ़िश डिवाइस से कनेक्ट करें आपका वेब ब्राउज़र. आपको उस Android डिवाइस की वीडियो स्ट्रीम दिखेगी जिसे आपने अभी बनाया है.

बदलाव करें

changelist के इस उदाहरण का पालन करके, सोर्स कोड अपडेट करें.

  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

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

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

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

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

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

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

  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)
  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 सोर्स कोड के साथ काम करने से जुड़े सभी दस्तावेज़ के लिंक. AOSP डेटा स्टोर करने की जगह देखें Git प्रोजेक्ट की पूरी सूची और इसके लिए अलग-अलग प्रोजेक्ट (पाथ) देखें डाल सकते हैं.

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-building ग्रुप को सवाल भेजें.