به لطف متن باز بودن سیستمعامل اندروید، همیشه بعد از ارائهی نسخهای از آن توسط گوگل، کد منبع یا سورس کد آن نسخه توسط گوگل در قالب AOSP منتشر میشود. درست در همین زمان است که توسعهدهندگان اقدام به دانلود و شخصیسازی این کدها میکنند. LineageOS که برای آشنایی بیشتر با آن میتوانید به این مطلب مراجعه کنید، نام یکی از رامهایی است که توسط یک تیم نخبه و مجرب توسعه داده میشود و همواره برای اینکه بتوانید آخرین نسخهی اندروید را روی گوشی نسبتا قدیمی خود داشته باشید، میتوانید روی آن حساب کنید. بسیاری از کاربران گوشیهای جدید که اندروید خالص را به پوستههای شرکتهای مختلف ترجیح میدهند نیز فارغ از نسخهی اندروید رام اصلی، سراغ این رام کاستوم میروند تا اندروید خالص و سبک را تجربه کنند. به کمک آموزشی که در این مقاله از سری مقالات آموزشی زومیت تقدیم حضور شما میشود، قادر خواهید بود پس از دانلود و نصب موارد لازم، رام LineageOS را از کد منبع آن برای گوشی خود بسازید و به اصطلاح بیلد یا کامپایل کنید.
نمیتوان گفت که دقیقا برای انجام این کار و استفاده از آموزش پیش رو چقدر مهارت و تجربه لازم است. اگر قصد دارید با استفاده از این آموزش برای گوشی خود رام بیلد کنید، لازم نیست یک توسعهدهندهی باتجربه باشید؛ ولی با مبانی ابتدایی اندروید آشنا باشید. ما در زومیت سعی کردهایم هر آنچه بهعنوان یک کاربر اندروید برای ساخت رام LineageOS لازم دارید، قدم به قدم برای شما فراهم آوریم؛ با این حال، از آنجایی که تجربه، دانش قبلی و هوش و ذکاوت افراد متفاوت است، شاید عدهای بهراحتی به نتیجه برسند و عدهای با مشکلات عدیده روبهرو شوند.
به خاطر داشته باشید، همواره انجام چنین امور تخصصی با درصدی از ریسک همراه است که مسئولیت آن فقط و فقط متوجه خود شما است؛ اگر تمامی مراحل را بهدرستی پشت سر بگذارید، میتوانید از لذت کار با رام دستساز خود بهرهمند شوید. هنگامی که بهتدریج در این کار حرفهای شوید، میتوانید ویژگیهایی به رامهای مختلف اضافه کنید، رفع مشکل کنید، زبان اضافه کنید و حتی با آنچه در خصوص بیلد کردن فرا گرفتهاید، اپلیکیشنهای متن باز را از کد منبع بیلد کنید یا از رامهای مختلف پورت کنید.
سورس کد اندروید چیست؟
اندروید سیستمعامل متن باز محسوب میشود که برای دستگاههای متنوعی در دسترس است. هدف اصلی اندروید ایجاد و ارائهی یک پلتفرم نرمافزاری باز است که اپراتورها، تولیدکنندهها و توسعهدهندهها بتوانند با استفاده از آن، ایدههای خلاقانهی خود را به واقعیت تبدیل کنند و در نتیجه یک محصول موفق را در زمینهی تجربهی کاربری عرضه کنند. نتیجهی متن باز بودن، ارائهی محصولی متناسب با سلیقهی کاربر است که توسعهدهندگان امکان تغییر کدها و شخصیسازی آن را نیز دارند؛ بنابراین، اندروید اساسا این اجازه را به شما میدهد که بدون محدودیت در کدهای آن دخل و تصرف کنید و آنها را به میل خود تغییر دهید و شخصیسازی کنید.
رام اندروید چیست؟
منظور از رام اندروید همان فرمور یا سیستمعامل اندروید است. در واقع نوع رام تعیین میکند که گوشی شما رابط کاربری Sense UI داشته باشد یا MIUI یا EMUI و.... رام، کرنل لینوکس و افزونههای دیگری را نیز در خود جای داده است که به عملکرد دستگاه کمک میکنند.
رام اندروید شامل چه چیزهایی است؟
بهطور کلی یک رام اندروید موارد زیر را شامل میشود:
- کرنل
- بوتلودر
- ریکاوری
- رادیو
- فریمورک
- برنامهها (Apps)
- هسته (Core)
- اندروید رانتایم و...
کرنل چیست؟
کرنل مهمترین بخش اندروید و اساسا هر سیستمعاملی است. میتوانید کرنل را پُلی از اپلیکیشنها به سمت سختافزار دستگاه تصور کنید. دستگاههای اندرویدی از کرنل لینوکس استفاده میکنند؛ اما این دقیقا همان کرنلی نیست که سایر سیستمهای عامل لینوکسی استفاده میکنند. کدهای بسیاری در کرنل اندروید وجود دارند که مختص اندروید هستند. توسعهدهندگان گوگل وقت زیادی صرف این کدها میکنند. سازندگان پردازندهها نیز باید در ساخت کرنل همکاری کنند؛ چرا که باید درایورهای مخصوص تراشهی خود را در کرنل جای دهند. به همین دلیل است که بعد از انتشار نسخهی جدیدی از اندروید، توسعهدهندگان مستقل به کمی زمان برای راهاندازی نسخهی جدید با کرنل موجود نیاز دارند. درایورهایی که مثلا برای کار با کرنل اندروید کیتکت نوشته شدهاند، لزوما روی کرنل اندروید لالیپاپ بهدرستی کار نخواهند کرد. این نکتهی مهمی است؛ زیرا وظیفهی اصلی کرنل، کنترل سختافزار است. تمام کدهایی که هنگام بیلد یک کرنل مشاهده میکنید، در واقع نقش واسط بین نرمافزار و سختافزار گوشی شما را بازی میکنند؛ بنابراین، هر درخواستی که از گوشی خود دارید، ابتدا به کرنل فرستاده و سپس اجرا میشوند.
بوتلودر
بوتلودر در واقع کدی است که قبل از اجرای هر سیستمعاملی عمل میکند. بوتلودرها دستورالعملهای اجرای کرنل سیستمعامل را ارسال میکنند. میتوانید بوتلودر را به منزلهی یک ایست بازرسی برای کلیهی پارتیشنها تصور کنید. بوتلودر معمولا بسته است؛ چرا که اگر باز باشد و شما بتوانید در پارتیشنهای مختلف دخل و تصرف کنید، امکان دارد به گوشی صدمه بزنید. پس، بوتلودر اساسا به کرنل دستگاه شما دستور میدهد که سیستم را بهدرستی بوت کنید و بالا بیاورد.
ریکاوری
به زبان ساده، ریکاوری بهعنوان مرجعی برای پشتیبانگیری یا برگرداندن اوضاع به حالت قبل است. هر زمان فرمور گوشی شما دچار نقص شود، ریکاوری شما را در حل مشکل و بازگردانی آن به حالت قبل یاری خواهد کرد. همچنین، از ریکاوری برای فلش کردن رام، کرنل و... استفاده میشود. معروفترین و رایجترین ریکاوری کاستوم موجود در حال حاضر TWRP است.
رادیو
پایینترین لایهی نرمافزاری در رام، رادیو است. یعنی بهمحض روشن شدن گوشی، اولین چیزی که حتی قبل از بوتلودر اجرا میشود رادیو است. رادیو تمام اتصالات بیسیم، جیاسام و جیپیاس و... را کنترل میکند.
موارد لازم
- یک دستگاه اندرویدی که توسط لاینج پشتیبانی شود.
- یک رایانهای نسبتا جدید ۶۴ بیتی لینوکسی یا ویندوزی که مقدار معقولی رم و حدود ۱۰۰ گیگابایت فضای ذخیرهسازی داشته باشد. لازم است بدانید هر چه رم کمتری در اختیار داشته باشید، زمان بیلد بیشتر خواهد بود؛ بنابراین، بهتر است روی حافظهی رم ۸ گیگابایت به بالا حساب باز کنید. همچنین استفاده از اساسدی در مقایسه با هارددیسک معمولی بهشدت در افزایش سرعت بیلد مؤثر است.
- یک کابل یواسبی سازگار با گوشی شما
- اتصال اینترنت پرسرعت و جریان برق مطمئن
- آشنایی با اندروید و اصطلاحات آن که به تعدادی از آنها در بخش بعد اشاره میکنیم. اینکه شما قبلا رام کاستوم نصب کرده باشید و مثلا با ریکاوری آشنایی داشته باشید میتواند مفید باشد. آشنایی با برخی دستورهای سادهی لینوکسی مثل cd به معنی تغییر دایرکتوری، یا اینکه توالی مسیرها در لینوکس با / نشان داده میشود نیز میتواند مفید باشد. برای آشنایی با تعداد بیشتری از دستورات لینوکس و مقایسهی آنها با نمونهی آنها در ویندوز میتوانید به این مقاله مراجعه کنید.
نصب SDK
در صورتی که قبلا adb و فستبوت را نصب نکردهاید، میتوانید آنها را از وبسایت گوگل دریافت و با استفاده از دستور زیر استخراج کنید.
unzip platform-tools-latest-linux.zip -d ~
حالا باید adb و فستبوت را به مسیر کار خود منتقل کنید. برای این منظور profile./~ را باز و دستور زیر را وارد کنید.
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/platform-tools:$PATH"
fi
سپس برای بهروزرسانی محیط خود source ~/.profile را اجرا کنید.
نصب بستههای مربوط به بیلد
برای بیلد رام لاینج به چند بستهی نرمافزاری نیاز است. میتوانید این بستهها را از طریق قسمت package manager در توزیع لینوکس خود نصب کنید.
نکته: پکج منجر در لینوکس، سیستمی برای نصب و حذف نرمافزار است. نرمافزاری که معمولا از اینترنت گرفته و در رایانهی شما نصب میشود. چنانچه از اوبونتو استفاده میکنید، میتوانید از Ubuntu Software Center استفاده کنید. راه بهتر، استفاده از دستور نصب apt-get install بهصورت مستقیم در خود ترمینال است.
برای لاینج به موارد زیر نیاز دارید:
bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
برای اوبونتوهای قدیمیتر از نسخهی ۱۶.۰۴ جایگزینی زیر را انجام دهید.
libwxgtk3.0-dev → libwxgtk2.8-dev
جاوا
نسخههای مختلف لاینج اواس نیاز به نسخههای مختلف JDK یا کیت برنامهنویسی جاوا دارند.
لاینج اواس | کیت جاوای مورد نیاز | دستور نصب |
---|---|---|
نسخههای ۱۴.۱ تا ۱۵.۱ | OpenJDK 1.8 | openjdk-8-jdk |
نسخههای ۱۱ تا ۱۳ | OpenJDK 1.7 | openjdk-7-jdk |
ساخت دایرکتوری
لازم است در محیط بیلد خود چند مسیر ایجاد کنید. برای ساخت این دایرکتوریها دستورات زیر را وارد کنید:
mkdir -p ~/bin
mkdir -p ~/android/lineage
دایرکتوری bin/~ مخزن یا ریپازیتوری (repo) شما را شامل خواهد شد و دایرکتوری android/lineage/~ سورس کد لاینج را در بر میگیرد.
دستور نصب مخزن
دستور زیر را برای دانلود باینری ریپو و قابل اجرا کردن آن وارد کنید.
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
دایرکتوری bin/~ را در مسیر اجرا قرار دهید.
در نسخههای اخیر اوبونتو bin/~ باید خود به خود در مسیر کار شما قرار داشته باشد. میتوانید این مسئله را باز کردن profile./~ توسط یک ویرایشگر متن بررسی کنید و ببینید که آیا کد زیر در آن وجود دارد یا خیر. در صورت عدم وجود، میتوانید آن را اضافه کنید.
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
سپس دستور source ~/.profile را برای بهروزرسانی محیط اجرا کنید.
راهاندازی مخزن کدهای لاینج اواس
از آنجایی که هنوز رام ۱۵.۱ برای بسیاری از دستگاهها بهصورت رسمی منتشر نشده است، در اینجا نسخهی ۱۴.۱ را مثال میزنیم. پس برنچ یا شاخهی مورد نظر ما cm-14.1 خواهد بود و کدی که باید وارد کنیم به شکل زیر است؛ اما دقت کنید شما نام شاخهی مورد نظر خود را وارد کنید.
cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b cm-14.1
دانلود کد منبع یا سورس کد
برای بارگذاری سورس کد در رایانهی خود از کد زیر استفاده کنید.
repo sync
مانیفست LineageOS بهصورت پیشفرض تنظیماتی منطقی دارد و توصیه میشود آن را تغییر ندهید. مثلا مقادیر 4 j- و c- یکی نشاندهندهی شاخههای اتصال همزمان و دومی برای این است که صرفا شاخهی مورد نظر همگامسازی شود، نه تمام شاخههای موجود در گیتهاب لاینج. تنها در صورتی که در همگامسازی دچار مشکل هستید، میتوانید مقدار 4 j- را به 3 j- و 2 j- کاهش دهید.
کدهای مخصوص دستگاه خود را تهیه کنید
بعد از دانلود سورس کد، مطمئن شوید که در روت یا مسیر اصلی سورس کد هستید. کد cd ~/android/lineage هر جا که باشید شما را به مسیر اصلی خواهد برد. حال دستور زیر را تایپ کنید:
source build/envsetup.sh
breakfast codename
به جای codename باید کدنام مخصوص دستگاه خود را وارد کنید. دستور فوق که به آن برکفست میگویند، تغییرات مختص دستگاه شما و کرنل آن را دانلود خواهد کرد. اگر از کدنام دستگاه اندرویدی خود اطلاع ندارید میتوانید در اینترنت آن را جستجو کنید. در جدول زیر کدنام تعدادی از دستگاههای اندرویدی فهرست شده است. برای مشاهدهی سایر کدنامها میتوانید به این صفحه مراجعه کنید.
نام دستگاه | کدنام | نام دستگاه | کدنام |
---|---|---|---|
نکسوس ۴ | mako | موتورولا موتو Z | griffin |
نکسوس 5 | hammerhead | وان پلاس ۳ و 3T | oneplus3 |
نکسوس 5X | bullhead | وان پلاس ۵ | cheeseburger |
نکسوس 6 | Shamu | وان پلاس 5T | dumpling |
اچتیسی وان M8 | m8 | سامسونگ گلکسی نوت ۳ جهانی | i9300 |
اچتیسی وان m8 dual | m8d | سامسونگ گلکسی اس ۶ | zerofltexx |
آنر 5X | kiwi | سونی اکسپریا V | tsubasa |
الجی جی ۳ نسخهی جهانی | d855 | اکسپریا Z | yuga |
الجی جی ۴ نسخهی جهانی | h815 | شیائومی می 5 | gemini |
الجی جی ۵ نسخهی جهانی |
h850 | ردمی نوت ۳ پرو | kenzo |
موتورولا موتو G | falcon | ردمی نوت ۴ کوالکام | mido |
موتورولا موتو X | ghost | زدتیای اکسون ۷ | axon7 |
استخراج بلابهای اختصاصی
برای استخراج این فایلها دو حالت وجود دارد. حالت اول این که برای اولین بار است که قصد بیلد رام لاینج برای یک گوشی را دارید. در حالت دوم گوشی شما در حال اجرای آخرین نسخه از LineageOS از همان شاخهای است که قصد بیلد آن را دارید.
حالت اول: استخراج بلابها از رام
در صورتی که برای اولین بار برای دستگاهی رام LineageOS میسازیم باید بلابها را از یک رام زیپشده استخراج کنیم.
قبل از شروع لازم است تفاوت بین بستهی OTA از نوع بلوکبنیان و OTA از نوع پوشهبنیان را بدانید. در رام پوشهبنیان، محتوای پارتیشن سیستم در فولدری زیپ با نام system وجود دارد. در رام بلوکبنیان محتوای پارتیشن سیستم در یک فایل به شکل دادهی باینری ذخیره شده است. اگر رام زیپشدهی شما هیچ فولدری به نام system ندارد (یا داخل فولدر سیستم آن خالی است) و فایلی به نام system.transfer.list در روت رام شما وجود دارد، OTA از نوع بلوکبنیان است. از سوی دیگر، چنانچه پوشهی system با تمام محتویات آن را مشاهده میکنید و خبری از system.transfer.list نیست، رام از نوع پوشهبنیان است.
استخراج بلابهای اختصاصی از بستهی بهروزرسانی بلوکبنیان
به کمک دستورهای زیر یک دایرکتوری موقت ایجاد کنید و به مسیر آن بروید.
mkdir ~/android/system_dump/
cd ~/android/system_dump/
با دستور زیر system.transfer.list و system.new.dat را از رام زیپشده استخراج کنید.
unzip path/to/lineage-*.zip system.transfer.list system.new.dat
دقت کنید باید بعد از /path/to نام رام زیپشده را وارد کنید.
حال باید برای تبدیل کردن رام بلوکبنیان به دامپی که بتوان آن را مانت کرد از sdat2img استفاده کنید. این اسکریپت در گیتهاب موجود است. برای کلون کردن آن از دستور زیر استفاده کنید.
git clone https://github.com/xpirt/sdat2img
وقتی sdat2img را به دست آوردید، به کمک دستور زیر از آن برای استخراج ایمج سیستم استفاده کنید.
python sdat2img/sdat2img.py system.transfer.list system.new.dat system.img
حال باید فایلی تحت عنوان system.img داشته باشید. با دستور زیر مسیری برای آن بسازید و محتویات سیستم را در آن مانت کنید.
mkdir system/
sudo mount system.img system/
بعد از این کار به دایرکتوری روت یا اصلی کدهای دستگاه خود بروید و extract-files.sh را اجرا کنید.
./extract-files.sh ~/android/system_dump/
این دستور به extract-files.sh خواهد گفت که فایلها را به جای گوشی از دامپ مانتشدهی سیستم بگیرد.
پس از اینکه تمام فایلهای مخصوص گوشی خود را استخراج کردید، با دستورهای زیر دامپ سیستم را آنمانت کنید و فایلهایی را که دیگر به آنها نیاز ندارید پاک کنید.
sudo umount ~/android/system_dump/system
rm -rf ~/android/system_dump/
استخراج بلابهای اختصاصی از بستهی بهروزرسانی پوشهبنیان
به کمک دستورهای زیر یک دایرکتوری موقت ایجاد کنید و به مسیر آن بروید.
mkdir ~/android/system_dump/
cd ~/android/system_dump/
فولدر system را با دستور زیر از رام استخراج کنید.
unzip path/to/lineage-*.zip system/
دقت کنید باید بعد از /path/to نام رام زیپشده را وارد کنید.
بعد از این کار به دایرکتوری روت یا اصلی کدهای دستگاه خود بروید و extract-files.sh را با دستور زیر اجرا کنید.
./extract-files.sh ~/android/system_dump/
این دستور به extract-files.sh خواهد گفت که فایلها را به جای گوشی از دامپ مانتشدهی سیستم بگیرد.
پس از اینکه تمام فایلهای مخصوص گوشی خود را استخراج کردید، با دستورهای زیر دامپ سیستم را آنمانت کنید و فایلهایی را که دیگر به آنها نیاز ندارید پاک کنید.
rm -rf ~/android/system_dump/
حالت دوم: گوشی شما در حال اجرای آخرین نسخه از شاخهای است که قصد بیلد آن را دارید.
گوشی خود را با کابل یواسبی به رایانه وصل کنید. گوشی باید روت باشد، adb فعال باشد و شما در مسیر فایلهای اختصاصی گوشی خود یعنی /android/lineage/vendor/device/your_device/codename/~ هستید. extract-files.sh را اجرا کنید.
./extract-files.sh
حال بلابها باید در فولدر /android/lineage/vendor/device/your_device/codename/~ بارگیری شده باشند. در خط فوق your_device نام شرکت سازندهی گوشی شما و codename کدنام آن خواهد بود. چنانچه خطاهایی با مضمون command not found مشاهده کردید، ممکن است لازم باشد adb در bin/~ قرار داده شود.
فعال کردن کشگذاری برای بالا بردن سرعت بیلد
با اجرای دستور زیر میتوانید ccach را برای بیلدهای آتی فعال کنید.
export USE_CCACHE=1
دستور فوق را به فایل bashrc. /~ خود وارد کنید و سپس با دستور زیر بیشینهی فضایی را که میخواهید در سیستم خود به کشگذاری اختصاص دهید مشخص کنید.
ccache -M 50G
در خط فوق 50G به معنی پنجاه گیگابایت است. این دستور را فقط برای بار اول اجرا کنید و مقدار را چیزی بین ۲۵ تا ۱۰۰ گیگابایت انتخاب کنید. این کار سرعت بیلد را بهطرز قابل توجهی افزایش میدهد؛ بهطور مثال روند بیلدی که در یک ساعت پایان میپذیرد، در صورت فعالسازی کشگذاری طی ۲۰ دقیقه به اتمام میرسد. اگر فقط برای یک دستگاه رام میسازید، ۲۵ تا ۵۰ گیگابایت فضا مناسب خواهد بود؛ اما در صورتی که برای چند دستگاه که سورس کرنل مشترکی ندارند، رام بیلد میکنید، بهتر است مقداری بین ۷۵ تا ۱۰۰ گیگابایت را تعیین کنید. توجه داشته باشید که این فضا بهطور مستمر روی درایو شما اشغال خواهد شد.
همچنین میتوانید فشردهسازی کش را فعال کنید تا تعداد فایلهای بیشتری در فضای شما جا بگیرند. هرچند این کار کمی سرعت را پایین خواهد آورد. برای فعال کردن فشردهسازی کش از دستور زیر استفاده کنید یا آن را به bashrc. /~ اضافه کنید.
export CCACHE_COMPRESS=1
تنظیمات جک (jack)
جک در حال حاضر ابزار بیلد یا کامپایلر LineageOS نسخهی ۱۴.۱ به بالا است. اگر این ابزار را بهدرستی تنظیم نکنید، خطای کمبود حافظه خواهد داد. حل این مشکل با اضافه کردن خط زیر به فایل bashrc. /~ صورت میگیرد.
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
در خط فوق 4G در انتهای خط به معنی ۴ گیگابایت است و در واقع این دستور به جک میگوید که تنها از ۴ گیگابایت حافظه برای بیلد استفاده کن.
آغاز عملیات بیلد
وقت آن رسیده است که بیلد رام را آغاز کنید. برای این کار دستور زیر را با تغییر codename به کدنام گوشی خود، وارد کنید.
croot
brunch codename
با این کار بیلد رام لاینج برای دستگاه شما آغاز خواهد شد. در صورتی که ساخت رام بدون خطا انجام گیرد و بیلد پایان یابد، میتوانید برای دسترسی به رام و ریکاوری بیلد شده دستور زیر را وارد کنید.
cd $OUT
فایل recovery.img ریکاوری LineageOS و فایل زیپی که نام آن با lineage-14.1 آغاز شده است، رام لاینج او اس شما خواهد بود که میتوانید با ریکاوری TWRP آن را روی دستگاه خود فلش کنید. برای نصب رام لاینج روی گوشی خود، میتوانید از این آموزش استفاده کنید.
امیدواریم از این مقاله استفادهی کافی را برده باشید و بهزودی به جمع توسعهدهندگان اندروید اضافه شوید تا از دنیای نامتناهی اندروید به سلیقهی خود لذت ببرید. به خاطر داشته باشید دنیای اندروید آنقدر وسیع است که هر زمان که با خطایی مواجه شدید، میتوانید با جستجوی آن در گوگل راه حل مشکل خود را پیدا کنید. همچنین برای حرفهایتر شدن و آشنایی با مفاهیمی چون گیت و گیتهاب پیشنهاد میکنیم این مقاله را از دست ندهید.
.: Weblog Themes By Pichak :.