অ্যান্ড্রয়েড ডেভেলপমেন্ট চেষ্টা করুন

এই টিউটোরিয়ালটি আপনাকে প্রথমবারের মতো অ্যান্ড্রয়েড অপারেটিং সিস্টেম ডেভেলপমেন্টের চেষ্টা করার সুযোগ দেবে।

অ্যান্ড্রয়েড ডেভেলপমেন্টের জন্য সেট আপ করুন

অ্যান্ড্রয়েড সোর্সের android-latest-release ম্যানিফেস্ট ব্রাঞ্চটি ডাউনলোড ও বিল্ড করার আগে, নিশ্চিত করুন যে আপনার হার্ডওয়্যার প্রয়োজনীয় শর্ত পূরণ করে এবং প্রয়োজনীয় সফটওয়্যার সঠিকভাবে ইনস্টল করা আছে। এছাড়াও, নিম্নলিখিত পরিভাষাগুলোর সাথে আপনার পরিচিত থাকা উচিত:

গিট
গিট একটি ফ্রি এবং ওপেন সোর্স ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম। অ্যান্ড্রয়েড ব্রাঞ্চিং, কমিট, ডিফস এবং এডিটের মতো লোকাল অপারেশনের জন্য গিট ব্যবহার করে। গিট শেখার জন্য সাহায্যের প্রয়োজন হলে, গিট ডকুমেন্টেশন দেখুন।
রিপো
রেপো হলো গিট-এর একটি পাইথন র‍্যাপার যা একাধিক গিট রিপোজিটরির মধ্যে জটিল অপারেশন সম্পাদনকে সহজ করে তোলে। রেপো সমস্ত ভার্সন কন্ট্রোল অপারেশনের জন্য গিট-কে প্রতিস্থাপন করে না, এটি কেবল জটিল গিট অপারেশনগুলোকে আরও সহজে সম্পন্ন করতে সাহায্য করে। রেপো গিট প্রজেক্টগুলোকে একত্রিত করে অ্যান্ড্রয়েড সুপারপ্রজেক্টে পরিণত করার জন্য ম্যানিফেস্ট ফাইল ব্যবহার করে।
ম্যানিফেস্ট ফাইল
ম্যানিফেস্ট ফাইল হলো একটি XML ফাইল যা একটি AOSP সোর্স ট্রির মধ্যে অ্যান্ড্রয়েড সোর্সের বিভিন্ন গিট প্রজেক্টগুলো কোথায় অবস্থিত তা নির্দিষ্ট করে দেয়।

হার্ডওয়্যারের প্রয়োজনীয়তা পূরণ করুন

আপনার ডেভেলপমেন্ট ওয়ার্কস্টেশনটির হার্ডওয়্যার প্রয়োজনীয়তাগুলো অবশ্যই পূরণ করতে হবে বা তার চেয়েও উন্নত হতে হবে:

  • একটি ৬৪-বিট x86 সিস্টেম।

  • কোড চেক আউট এবং বিল্ড করার জন্য কমপক্ষে ৪০০ জিবি খালি ডিস্ক স্পেস প্রয়োজন (চেক আউটের জন্য ২৫০ জিবি + বিল্ডের জন্য ১৫০ জিবি)।

  • ন্যূনতম ৬৪ জিবি র‍্যাম। গুগল অ্যান্ড্রয়েড বিল্ড করার জন্য ৬৪ জিবি র‍্যামসহ ৭২-কোর মেশিন ব্যবহার করে। এই হার্ডওয়্যার কনফিগারেশনে অ্যান্ড্রয়েডের একটি সম্পূর্ণ বিল্ড হতে প্রায় ৪০ মিনিট এবং ইনক্রিমেন্টাল বিল্ড হতে মাত্র কয়েক মিনিট সময় লাগে। এর বিপরীতে, ৬৪ জিবি র‍্যামসহ একটি ৬-কোর মেশিনে সম্পূর্ণ বিল্ড হতে প্রায় ৬ ঘন্টা সময় লাগে।

অপারেটিং সিস্টেমের প্রয়োজনীয়তা পূরণ করুন

আপনার ডেভেলপমেন্ট ওয়ার্কস্টেশনে অবশ্যই জিএনইউ সি লাইব্রেরি (glibc) ২.১৭ বা তার পরবর্তী সংস্করণসহ যেকোনো ৬৪-বিট লিনাক্স ডিস্ট্রিবিউশন চলতে হবে।

প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন

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 ইনস্টল করা থাকতে হবে। অ্যান্ড্রয়েডের সর্বশেষ রিলিজ ব্রাঞ্চে OpenJDK, Make এবং Python 3-এর প্রি-বিল্ট ভার্সন থাকে, তাই অতিরিক্ত কোনো ইনস্টলেশনের প্রয়োজন হয় না। নিচের অংশে Repo কীভাবে ইনস্টল করতে হয় তা ব্যাখ্যা করা হয়েছে।

রিপো ইনস্টল করুন

রেপো ইনস্টল করতে এই ধাপগুলো অনুসরণ করুন:

  1. বর্তমান প্যাকেজের তথ্য ডাউনলোড করুন:

    sudo apt-get update
  2. রিপো লঞ্চার ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

    sudo apt-get install repo

    রিপো লঞ্চারটি একটি পাইথন স্ক্রিপ্ট প্রদান করে, যা একটি চেকআউট শুরু করে এবং সম্পূর্ণ রিপো টুলটি ডাউনলোড করে।

    সফল হলে, সরাসরি ৪ নং ধাপে চলে যান।

  3. (ঐচ্ছিক) নিম্নলিখিত কমান্ডগুলো ব্যবহার করে ম্যানুয়ালি রেপো ইনস্টল করুন:

    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

    প্রথম তিনটি কমান্ড একটি টেম্প ফাইল তৈরি করে, ফাইলটিতে রেপো ডাউনলোড করে এবং প্রদত্ত কী-টি প্রয়োজনীয় কী-এর সাথে মেলে কিনা তা যাচাই করে। এই কমান্ডগুলো সফল হলে, শেষ কমান্ডটি রেপো লঞ্চারটি ইনস্টল করে।

  4. রিপো লঞ্চারের সংস্করণ যাচাই করুন:

    repo version

    আউটপুটে ২.৪ বা তার উচ্চতর সংস্করণ নির্দেশিত হওয়া উচিত, উদাহরণস্বরূপ:

    repo launcher version 2.45

অ্যান্ড্রয়েড সোর্স ডাউনলোড করুন

অ্যান্ড্রয়েড সোর্সটি গুগলের হোস্ট করা গিট রিপোজিটরিগুলোর একটি সংগ্রহে অবস্থিত। প্রতিটি গিট রিপোজিটরিতে অ্যান্ড্রয়েড সোর্সের সম্পূর্ণ ইতিহাস অন্তর্ভুক্ত থাকে, যার মধ্যে সোর্সের পরিবর্তন এবং কখন সেই পরিবর্তনগুলো করা হয়েছিল তার বিবরণও রয়েছে। অ্যান্ড্রয়েড সোর্স ডাউনলোড করতে:

  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. আপনার গিট ক্রেডেনশিয়াল (নাম, ইমেল ঠিকানা) প্রবেশ করান বা গ্রহণ করুন।

  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 এ দেখা যাবে।

লঞ্চ কাটলফিশ

কাটলফিশ হলো একটি অ্যান্ড্রয়েড এমুলেটর যা আপনার বিল্ডগুলো পরীক্ষা করতে ব্যবহৃত হয়।

  1. হোস্ট ডেবিয়ান প্যাকেজগুলি ডাউনলোড, বিল্ড এবং ইনস্টল করতে নিম্নলিখিত কমান্ডগুলি চালান:

    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 এ গিয়ে Cuttlefish ডিভাইসটির সাথে সংযোগ করুন। আপনার ভার্চুয়াল অ্যান্ড্রয়েড-চালিত ডিভাইসটি প্রদর্শিত হবে।

পরিবর্তন আনুন

এই উদাহরণ পরিবর্তন তালিকাটি অনুসরণ করে সোর্স কোডটি আপডেট করুন।

  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. যাচাই করুন যে আপনার নির্বাচিত ডিভাইসে চিত্র ১-এ দেখানো রঙের পরিবর্তনের অনুরূপ একটি পরিবর্তন দেখা যাচ্ছে।

    Example of a successful color
change

    চিত্র ১. সফল রঙ পরিবর্তনের পর স্ক্রিনের অবস্থা

একটি পরীক্ষা ঠিক করুন

কোডল্যাবের এই অংশে সোর্স ট্রিতে থাকা একটি উদাহরণ টেস্ট ব্যবহার করা হয়েছে, যেটি ফেইল করছে।

টেস্টটি চালানো, ডিবাগ করা এবং সংশোধন করার জন্য, এই নির্দেশাবলী অনুসরণ করুন:

  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

পর্যালোচনার জন্য আপনার কোড আপলোড করুন।

রেপো, git clone এর মতো কমান্ডগুলোকে একত্রিত করে একাধিক গিট রিপোজিটরি (বা প্রজেক্ট)-এ একসাথে কাজ করার সুযোগ দিয়ে গিটের ব্যবহারকে সহজ করে তোলে।

গিট-এ আপনার প্রোজেক্টগুলোর কোড পর্যালোচনার জন্য গেরিট (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-এ আপনার পরিবর্তন দেখতে, টার্মিনালে আউটপুট লিঙ্কে যান। লিঙ্কটি নিম্নলিখিতের অনুরূপ:

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

আপনার পরিবর্তনটি পূর্বাবস্থায় ফিরিয়ে আনুন।

সাধারণত, টেস্টিং-এর পরে এবং পর্যালোচনা ও অনুমোদনের পর, আপনি আপনার পরিবর্তনটি Gerrit-এ জমা দেন এবং রিপোজিটরিতে মার্জ করেন। এর পরিবর্তে, এই কোডল্যাবের উদ্দেশ্যে, আপনার কাজটি রিভার্ট করুন:

  1. গেরিটে, 'Abandon'- এ ক্লিক করুন।

  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-building গ্রুপে পাঠান।

crosvm আগে থেকেই চলছে কিনা তা দেখতে ps -A | grep crosvm টাইপ করুন। যদি crossvm চলে, তাহলে stop_cvd || true টাইপ করুন অথবা প্রসেস PID দিয়ে kill crosvm