অ্যান্ড্রয়েড তৈরি করুন

অ্যান্ড্রয়েড বিল্ড করতে এই পৃষ্ঠার নির্দেশাবলী অনুসরণ করুন।

আপনার বিল্ড পরিবেশ সেট আপ করুন

আপনার ওয়ার্কিং ডিরেক্টরির ভেতর থেকে, আপনার বিল্ড এনভায়রনমেন্ট সেট আপ করার জন্য envsetup.sh স্ক্রিপ্টটি সোর্স করুন:

source build/envsetup.sh

এই স্ক্রিপ্টটি এমন কয়েকটি কমান্ড ইম্পোর্ট করে যা আপনাকে অ্যান্ড্রয়েড সোর্স কোড নিয়ে কাজ করতে দেয়, যার মধ্যে এই পৃষ্ঠায় ব্যবহৃত কমান্ডগুলোও অন্তর্ভুক্ত। স্ক্রিপ্টটির সোর্স দেখতে, platform/build/envsetup.sh দেখুন। বিল্ট-ইন হেল্প দেখতে, hmm টাইপ করুন।

একটি লক্ষ্য বেছে নিন

অ্যান্ড্রয়েড বিল্ড করার আগে, আপনাকে বিল্ড করার জন্য একটি টার্গেট শনাক্ত করতে হবে। একটি টার্গেট সেই প্ল্যাটফর্মকে নির্দেশ করে যার জন্য আপনি বিল্ড করছেন। আপনার বিল্ড করার টার্গেট শনাক্ত করতে, ` 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
============================================

লক্ষ্যবস্তুকে প্রতিনিধিত্বকারী স্ট্রিংটির বিন্যাস নিম্নরূপ:

lunch product_name-release_config-build_variant

এই স্ট্রিংটির উপাদানগুলো হলো:

  • ` product_name হলো সেই প্রোডাক্টের নাম যা আপনি তৈরি করতে চান, যেমন aosp_cf_x86_64_only_phone বা aosp_husky । আপনার নির্দিষ্ট product_name আপনার ডিভাইসের জন্য আপনার নিজস্ব ফরম্যাট অনুসরণ করতে পারে, কিন্তু গুগল তার ডিভাইসগুলোর জন্য যে ফরম্যাট ব্যবহার করে তাতে এই উপাদানগুলো থাকে:

    • aosp বলতে অ্যান্ড্রয়েড ওপেন সোর্স প্ল্যাটফর্মকে বোঝায়।
    • (ঐচ্ছিক) যখন টার্গেটটি কাটলফিশ এমুলেটরের মধ্যে চালানোর উদ্দেশ্যে তৈরি করা হয়, তখন cf অন্তর্ভুক্ত করা হয়।
    • আর্কিটেকচার এবং হার্ডওয়্যার (কোডনেম), যেমন x86_64_only_phone বা husky , যা পিক্সেল ৮ প্রো-এর কোডনেম। গুগল ডিভাইসগুলোর কোডনেমের তালিকার জন্য, ডিভাইস কোডনেম দেখুন।
  • release_config একটি রিলিজ কনফিগারেশনে সেট করা থাকে, যেমন aosp_current নামক ডেভেলপমেন্ট রিলিজ কনফিগারেশন। একটি রিলিজ কনফিগারেশন নির্দিষ্ট কিছু ফিচার এবং কোডকে শনাক্ত করে, যেগুলো ফিচার লঞ্চ ফ্ল্যাগের অধীনে থাকে এবং একটি বিল্ডের জন্য হয় সক্রিয় (enabled) অথবা নিষ্ক্রিয় (disabled) করা হয়। রিলিজ কনফিগারেশন সম্পর্কে আরও জানতে, `Set feature flag launch values` দেখুন।

  • স্ট্রিংটির build_variant অংশটি নিচের সারণিতে দেওয়া তিনটি মানের যেকোনো একটি হতে পারে:

    build_variant বর্ণনা
    user এই বিল্ড ভ্যারিয়েন্টটি সীমিত নিরাপত্তা অ্যাক্সেস প্রদান করে এবং এর জন্য উপযুক্ত।
    উৎপাদন। userdebug এই বিল্ড ভ্যারিয়েন্টটি ডিভাইস ডেভেলপারদের সাহায্য করে

    উন্নয়নাধীন রিলিজগুলোর পারফরম্যান্স এবং ক্ষমতা সম্পর্কে জানুন। userdebug বিল্ড ব্যবহার করে ডেভেলপ করার সময়, userdebug-এর জন্য নির্দেশিকা অনুসরণ করুন। eng | এই বিল্ড ভ্যারিয়েন্টটির বিল্ড টাইম কম এবং আপনি যদি পারফরম্যান্স ও ক্ষমতা নিয়ে চিন্তিত না হন, তবে এটি দৈনন্দিন ডেভেলপমেন্টের জন্য সবচেয়ে উপযুক্ত।

আপনি যদি কোনো আর্গুমেন্ট ছাড়া lunch চালান, তাহলে সাধারণ টার্গেটগুলোর একটি তালিকা দেওয়া হয়। এছাড়াও, আপনি এই পৃষ্ঠার তথ্য এবং `Device codenames` অংশে থাকা নির্দিষ্ট গুগল হার্ডওয়্যারের কোডনেমগুলো ব্যবহার করে টার্গেট স্ট্রিং-এর উপাদানগুলো একত্রিত করে আপনার নিজস্ব টার্গেট স্ট্রিং তৈরি করতে পারেন।

বর্তমান লক্ষ্য দেখুন

বর্তমান লাঞ্চ সেটিংস দেখতে, চালান:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

কোডটি তৈরি করুন

আপনার টার্গেট বিল্ড করার জন্য নিম্নলিখিত কমান্ডটি চালান। আপনার ওয়ার্কস্টেশনের স্পেসিফিকেশনের উপর নির্ভর করে, প্রথম বিল্ডটি সম্পন্ন হতে এক ঘণ্টারও কম থেকে কয়েক ঘণ্টা পর্যন্ত সময় লাগতে পারে। পরবর্তী বিল্ডগুলোতে উল্লেখযোগ্যভাবে কম সময় লাগে।

m

আপনার বিল্ডের আউটপুট $OUT_DIR এ দেখা যায়। আপনি যদি বিভিন্ন টার্গেট বিল্ড করেন, তাহলে প্রতিটি টার্গেটের বিল্ড $OUT_DIR এ দেখা যাবে।

m কমান্ডটি ট্রি-এর শীর্ষ থেকে শুরু করে, তাই আপনি সাবডিরেক্টরির ভেতর থেকেও m চালাতে পারেন। যদি আপনার TOP এনভায়রনমেন্ট ভেরিয়েবল সেট করা থাকে, তাহলে m কমান্ডটি সেটিই ব্যবহার করে। যদি TOP সেট করা না থাকে, তাহলে m কমান্ডটি বর্তমান ডিরেক্টরি থেকে ট্রি-এর শীর্ষ খুঁজে বের করার চেষ্টা করে।

m কমান্ডটি -jN আর্গুমেন্টের মাধ্যমে সমান্তরাল কাজ পরিচালনা করতে পারে। যদি আপনি -j আর্গুমেন্টটি প্রদান না করেন, তাহলে বিল্ড সিস্টেম স্বয়ংক্রিয়ভাবে এমন একটি সমান্তরাল কাজের সংখ্যা নির্বাচন করে যা তার মতে আপনার সিস্টেমের জন্য সর্বোত্তম।

আপনার m কমান্ড লাইনে মডিউলের নাম উল্লেখ করে আপনি সম্পূর্ণ ডিভাইস ইমেজের পরিবর্তে নির্দিষ্ট মডিউল বিল্ড করতে পারেন। এছাড়াও, m কমান্ড কিছু ছদ্ম-টার্গেট প্রদান করে, যেগুলোকে ‘গোল’ বলা হয়। উদাহরণস্বরূপ, m nothing কোনো কিছুই বিল্ড করে না, কিন্তু বিল্ড কাঠামোটি পার্স এবং যাচাই করে। বৈধ গোলগুলোর তালিকা দেখতে, m help টাইপ করুন।

বিল্ড ত্রুটি সমাধান করুন (অ্যান্ড্রয়েড ১৭ বা উচ্চতর সংস্করণ)

এই বিভাগে AOSP-এর রিড-অনলি কোডবেস বিল্ড করার সময় পরিবর্তন করার চেষ্টার ফলে সৃষ্ট রিড-অনলি ত্রুটিগুলি পরিচালনা করার নির্দেশাবলী রয়েছে।

বিল্ড করার চেষ্টার ফলে রিড-অনলি ফাইল সিস্টেম ত্রুটি দেখা দেয়।

বিল্ড করার সময়, AOSP সোর্স ট্রি রিড-অনলি থাকে। আপনি যে বিল্ডটি চালাচ্ছেন, সেটি যদি প্রোডাক্ট কনফিগারেশন বা বিল্ডের অন্য কোনো অংশে সোর্স ট্রি পরিবর্তন করার চেষ্টা করে, তাহলে বিল্ডটি ব্যর্থ হতে পারে এবং রিড-অনলি ফাইল সিস্টেম এরর দেখাতে পারে। সোর্স ট্রি-কে সাময়িকভাবে রিড-রাইট মোডে পরিবর্তন করতে এই অপশনগুলো ব্যবহার করা যেতে পারে:

  • বিল্ড চলাকালীন সম্পূর্ণ সোর্স ট্রি-কে রিড-রাইট মোডে পরিবর্তন করতে, বিল্ড এনভায়রনমেন্টে BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true যোগ করুন।

  • বিল্ড চলাকালীন ট্রি-এর কোনো অংশের রিড-রাইট পরিবর্তন করতে, BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST=" path1 , path2 , ... " ব্যবহার করুন।

    পাথগুলো হবে ওয়ার্কস্পেসের শীর্ষ থেকে সেইসব ডিরেক্টরির, যেখানে লেখার অনুমতি দেওয়া হবে।

বিল্ড ত্রুটি সমাধান করুন (৮.০ বা পূর্ববর্তী সংস্করণ)

আপনি যদি AOSP 8 বা তার আগের সংস্করণ বিল্ড করেন, তাহলে আপনার জাভা সংস্করণে কোনো সমস্যা পেলে m প্রক্রিয়াটি বন্ধ হয়ে যেতে পারে। উদাহরণস্বরূপ, আপনি এই বার্তাটি পেতে পারেন:

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

এখানে সম্ভাব্য কারণ ও সমাধানগুলো দেওয়া হলো:

  • আপনি AOSP ডেভেলপমেন্টের জন্য সেট আপ (২.৩ - ৮.০) -এর JDK বিভাগে উল্লেখিত সঠিক JDK ইনস্টল করতে ব্যর্থ হয়েছেন।
  • আপনার পাথে আগে থেকে ইনস্টল করা অন্য একটি JDK দেখা যাচ্ছে। আপনার পাথের শুরুতে সঠিক JDK-টি যুক্ত করুন অথবা সমস্যাযুক্ত JDK-টি মুছে ফেলুন।