آموزش کامل ساخت یا پورت رام MIUI

استاندارد

به نام خدا

یکی از بهترین رامهای ساخته شده برای اندروید رام MIUI هست.که رام سریع و سبکی میباشد طی سالیان این رام تغییرات زیادی داشته والان شرکت سازنده این رام یکی از فروشندهای بزرگ گوشی هوشمند شرکت شیاومی میباشد که این رام را در گوشیهای خود این شرکت می توان مشاهده کرد ولی همانند گذشته این رام را می توان برای هر دیوایس اندرویدی دیگری نیز پورت یا ساخت در این مقاله به آموزش ساخت رام MIUI  می پردازیم.

miui-1

در کل دو روش برای ساخت رام miuiوجود دارد.

روش اول :ساخت از منبع رام دستگاهتان از طریق پچ رام(در این روش رام اصلی دستگاهتان را با منبع موجود miui تبدیل میکنید)

روش دوم :ساخت پورت دستی از دستگاه دیگری که miui در آن نصب باشد.

آموزش روش اول پچ رام

موراد مورد نیاز:

1-اوبنتو (بصورت ماشین مجازی هم نصب شود مشکلی نیست) برای راه اندازی میتونید از این آموزش استفاده کنید.راهنمایی توسعه رام های اندروید از توسعه تا پیشرفته

2- رام پایه برای دیوایس مورد نظر(میتونید از رام AOSP استفاده کنید کارتون کمتر میشه در عین حال میشه از سیانوژن هم استفاده کرد)

3- برنامه Apktool میتوانید از این نسخه استفاده کنید کار باهاش آسون Advanced Apktool by BDFreak

4-در آخر هم  مغز راحت و صبر و حوصله

پیش نیازها

اول از همه فایلهای زیر را از رام اصلیتون حالا رام سیانوژن باشه یا حتی رام رسمی جدا میکنید.

framework-res.apk, framework.jar, framework2.jar, services.jar, android.policy.jar ,telephony-common.jar

بعد با استفاده از برنامه Apktool آنها را decompile میکنیم.

وارد سه پوشه خروجی برنامه میشویم و نام آنها را به شکل زیر عوض میکنیم.

[toggle title=”نام پوشه ها” load=”show”]framework-res
framework.jar.out
framework2.jar.out
services.jar.out
android.policy.jar.out
telephony-common.jar.out [/toggle]

به این پوشها برای پچ فریمور miui نیاز پیدا میکنیم.

آماده سازی محیط ساخت

اول از همه اوبنتو رو چه در ماشین مجازی یا بصورت نصب کامل آماده میکنیم.

در قدم بعدی android sdk را آملده میکنیم.

دستور زیر را در ترمینال وارد میکنیم

sudo apt-get update

بعد از فرستادن این دستور متن زیر را باید مشاهده کنید

sudo apt-get install bison build-essential curl flex git git-core gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev unzip lib32readline-gplv2-dev lib32z1-dev make python-networkx zlib1g-dev:i386 phablet-tools

تمام چیزی که نیاز بود الان نصب شده هست.الان میریم برای پیکربندی مخزن

در ترمینال بترتیب کدهای زیر را اجرا کنید.

mkdir -p ~/bin
PATH=~/bin:$PATH
cd ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
mkdir ~/patchrom
cd ~/patchrom
repo init -u git://github.com/MiCode/patchrom.git -b miui-7 -m android-4.4.4.xml

اکنون دستورات زیر را در ترمینال وارد کنید.

git config --global user.email ENTER_YOUR_EMAIL_ID_HERE
git config --global user.name ENTER_YOUR_REAL_NAME_HERE

در اولی به جای ENTER_YOUR_EMAIL_ID_HERE ایمیل خود را وارد کنید و در دستور دومی بجای ENTER_YOUR_REAL_NAME_HERE نام واقعی خود را وارد کنید.

الان زمان دانلود منبع کدهای miui هست. آنها را در این سایت پیدا میکنید. کد زیر را هم وارد ترمینال کنید بعد از دانلود فایلها

repo sync

بعد از اتمام دانلود یک پوشه در مسیر home درست کنید نام آن را به دلخواه انتخاب کنید( مثلا نام کد گوشی خودتان در اینجا ما از اسم سایت استفاده میکنیم)

cd /home/stryder/
mkdir gsm-developers
cd taoshan

 

اکنون یک makefile برای دستگاهتان درست میکنید. یه نمونه زیر براتون میزارم که میتونید رد آن تغییراتی ایجاد کنید نسبت به دستگاه خودتان.

gedit makefile

 

نمونه makefile در زیر را میتوانید استفاده کنید ولی حتما تغییرات را نسبت به دستگاه خودتان اعمال کنید.

# Makefile for gsm-developers
#

# The original zip file, MUST be specified by each product
local-zip-file := stockrom.zip

# The output zip file of MIUI rom, the default is porting_miui.zip if not specified
local-out-zip-file := MIUI8_gsm-developers.zip

# All apps from original ZIP, but has smali files chanded
local-modified-apps :=

local-modified-priv-apps :=

local-modified-jars :=

# All apks from MIUI
local-miui-removed-apps :=

local-miui-removed-priv-apps :=

local-miui-modified-apps :=

# All apps need to be removed from original ZIP file
local-remove-apps := Gallery2 Exchange2

# Config density for co-developers to use the aaps with HDPI or XHDPI resource,
# Default configrations are HDPI for ics branch and XHDPI for marshmallow branch
local-density := XHDPI

PORT_PRODUCT := gsm-developers

# To include the local targets before and after zip the final ZIP file,
# and the local-targets should:
# (1) be defined after including porting.mk if using any global variable(see porting.mk)
# (2) the name should be leaded with local- to prevent any conflict with global targets
#local-pre-zip := local-pre-zip-misc
#local-after-zip:= local-put-to-phone

# The local targets after the zip file is generated, could include 'zip2sd' to
# deliver the zip file to phone, or to customize other actions

#include phoneapps.mk

include $(PORT_BUILD)/porting.mk

local-pre-zip-misc:
@echo Update boot.img
cp other/boot.img $(ZIP_DIR)/boot.img

@echo Update build.prop
cp other/build.prop $(ZIP_DIR)/system/build.prop

@echo Delete some unneeded files
rm -rf $(ZIP_DIR)/system/etc/.has_su_daemon

rm -rf $(ZIP_DIR)/system/priv-app/Dialer.apk

rm -rf $(ZIP_DIR)/system/priv-app/Keyguard.apk

rm -rf $(ZIP_DIR)/system/priv-app/SystemUI.apk

rm -rf $(ZIP_DIR)/system/priv-app/VoiceDialer.apk

rm -rf $(ZIP_DIR)/system/priv-app/Launcher3.apk

rm -rf $(ZIP_DIR)/system/priv-app/ParanoidOTA.apk

rm -rf $(ZIP_DIR)/system/priv-app/ThemeChooser.apk

rm -rf $(ZIP_DIR)/system/priv-app/ThemesProvider.apk

 

توضیحات لازم:

 

  • ‘local-zip-file’ = نام رام بیس خودتان را اینجا بنویسید .
  • ‘local-out-zip-file’ =نام رام miui که دارید روی آن کار میکنید.
  • ‘local-modified-apps’ = برنامه های که نیاز به ویرایش دارند تا با فریمورک دستگاهتان ست شوند،نیاز به این کار دارند چون با سیستم گوشی سر و کار دارند.
  • ‘local-remove-apps’ = برنامه های که میخواهید از رام اصلی حذف کنید.
  • ‘local-pre-zip’ = اشاره به کدهای دارد که قبل از کامل شدن رام زیپ شده دارد.
  • ‘local-after-zip’ = اشاره به کدهای دارد که بعد از کامل شدن رام زیپ شده دارد.
  • ‘local-zip-misc’ = این کد فقط شرح میده که در ‘local-pre-zip’. مقداری برنامه های گوگل و کد هایbuild.prop
  • ‘local-test’ = یک کد دیگر فقط برای تست.

اکنون پوشه اولی فریمور که decompile کردیم را درون پوشه دستگاهتان کپی میکنید.

  • framework-res
    framework.jar.out
    framework2.jar.out
    services.jar.out
    android.policy.jar.out
    telephony-common.jar.out
     

و بعد فایل زیپ رام اصلیتون را کپی میکنید.

اکنون وارد پوشه پچ رام میشوید. کدهای زیر را وارد کنید

cd ~/patchrom
source build/envsetup.sh

دوباره وارد پوشه دیوایس خود شود و پچ کردن فریمورک miui خود را آغاز کنید

cd /home/stryder/gsm-developers
make firstpatch

 

 

اکنون یک پوشه جدید به اسم temp ایجاد میشود ممکن هست به مشکل بخورید که در این صورت یک پوشه به اسم reject ایجاد میشود که فعلا میتوانید از این لینک برای رفع مشکل استفاده کنید.

بعد از درست کردن تمام رجکتها از دستور زیر استفاده کنید تا رام قابل فلش بصورت زیپ در اختیارتان قرار بگیرد.

make fullota

یا کد زیر را هم میتوانید استفاده کنید.

make zipfile

تا اینجا فایل قابل فلش زیپ خود را آماده کردیم.

ویرایش فایل boot.img

اکنون نوبت به ویرایش فایل بوت از رام اصلی برای رام miui خودتان هست.

اول از همه نیاز به برنامه ویرایش فایل بوت نیاز دارید ما از این برنامه اینجا استفاده میکنیم

برنامه را دانلود و در یک مکان مجزا بذارید فایل بوت رام اصلی را در آن پوشه کپی میکنیم

اکنون فایل بوت را کشیده و بر روی unpackimg ببرید و رها کنید کرنل تا در پوشه های ramdisk و split_img استخراج شود.

اول باید ramdisk را ویرایش کنید وارد پوشه میشویم در پوشه sbin فایلهای استخراج شده را مشاهده میکنید.

اکنون دو اتفاق ممکن هست بیفتد دارید اول ramdisk شما همراه با فایلهای دیگر دروه یک پوشه استخراج میشوند.که در این صورت قدم بعدی را میپریم و با Notepad++ آنها را ویرابش میکنیم

اما در صورت اتفاق دوم ramdisk شما بصورت ramdisk.cpio استخراج میشود که در این صورت باید با اوبنتو اقدام به استخراج آن بکنید.

فایل ramdisk.cpio را در یک پوشه جدید کپی کنید ترمینال را باز کنید و دستور زیر را وارد کنید.

cd stryder
cpio -i -F ramdisk.cpio

بعضی از خروجی ها در ترمینال بصورت یلوکهای 2320 یا چیزی نزدیک به این عدد نمایش داده میشود. میبیند که درون پوشه ramdisk استخراج میشوند

خوب میریم برای ویرایش

اول از همه این فایل را دانلود کنید. در یک مکانی آنرا استخراج میکنیم

فایل default.prop و آنرا مانند زیر ویرایش میکنیم.

# 
# ADDITIONAL_DEFAULT_PROPERTIES 
# 
ro.adb.secure=0 
ro.secure=0 
ro.allow.mock.location=0 
ro.debuggable=1 
persist.sys.usb.config=mtp,adb 
persist.service.adb.enable=1 
persist.service.debuggable=1  

تغییرات ذخیره شده را ذخیره کنید بعد فایل init.cm.rc (در صورت بیس سیانوژن) یا init.pa.rc در صورت بیس AOSP را باز کنید.یک # بزارید قبل از ویرایش اینگونه فایلها مثل کد زیر

# Superuser 
#import /init.superuser.rc  

ذخیره کنید اکنون فایل init.rc را باز میکنیم در آخر فایل init.rc کد زیر را اضافه کنید.

#service for shelld
service shelld /system/xbin/shelld
class main

#service for su
service su_daemon /system/xbin/su --daemon
class main
oneshot

service lbesec /system/xbin/lbesec
class main
oneshot

 

فایل را ذخیره بعد فایل seapp_contexts را باز میکنید و کد زیر را در آخر بهش اضافه میکنید

user=theme seinfo=platform domain=platform_app type=platform_app_data_file
user=backup seinfo=platform domain=platform_app type=platform_app_data_file
user=updater seinfo=platform domain=platform_app type=platform_app_data_file
user=theme_man domain=system_app type=system_data_file

همچنین خط زیر اگر وجود داشت را مانند زیر ویرایش کنید.

user=_app domain=untrusted_app type=app_data_file
user=_app seinfo=platform domain=platform_app type=app_data_file
user=_app seinfo=shared domain=shared_app type=app_data_file
user=_app seinfo=media domain=media_app type=app_data_file
user=_app seinfo=release domain=release_app type=app_data_file

ذخیره کنید فایل init.qcom.rc باز میکنیم در آخر قبل از این کد

on property:sys.boot_completed=1

این کد را اضافه کنید

service shelld /system/xbin/shelld
class main

 

فایل رو ذخیره کنید هم اکنون زمان ریپک کردن فایل ramdisk هست. اول فایل اصلی ramdisk.cpio را به پوشه home  و اگه استخراج شده بود فایل در پوشه /home/stryder/  پیداش میکنید.

فایل اصلی ramdisk را هم به home انتقال می دهیم بعد از آن دستور زیر را در ترمینال اجرا کنید.

cpio -i -t -F ../ramdisk.cpio | cpio -o -H newc -O ../ramdisk_new.cpio

اکنون فایلی به اسم ramdisk_new.cpio درست میوشد که نسبت به فایل اصلی حجم کمی بالاتری دارد

همچنین فایل ramdisk_new.cpio را باز کنید و مطمئن شوید که فایلهای جدید در ان بوجود آمده است مانند otad در پوشه bin .

اکنون فایل ramdisk_new.cpio در مسیر ramdisk/sbin/ بگذارید و فایل اصلی ramdisk.cpio را پاک کنید و نام ramdisk_new.cpio را به ramdisk.cpio تغییر دهید.

اکنون برگردید و مستقیم دستور repackimg را در ترمینال اجرا کنید فایل اصلاح شده image_new بوجود می آید که نام آنرا به boot تغییر میدهیم و این فایل اصلاح شده را در MIUI ROM zip خود قرار می دهیم اکنون می توانید رام خود را فلش کنید و از رام زیبایی miui لذت ببرید.

 

آموزش پورت رام از دستگاهی

پیش نیازها:

برنامه 7zip یا winrar و Notepad++

دستور العمل ساخت

اول از همه دو پوشه میسازیم به نامهای  1. BASE ROM 2. PORT ROM

456

 

base rom : رام اصلی که مال خود موبایلتان هست.( cm یا AOSP)

port rom: رام miui موبایلی دیگر که میخواهید برای دستگاه خود پورت کنید.

[symple_box style=”boxerror”]
حتما سعی کنید از رام موبایلی پورت بگیرید که cpu و دیگر مشخصات شبیه به موبایل اصلی باشد یا حداقل اختلاف خیلی کمی میان مشخصات دو دیوایس باشد.
[/symple_box]

اکنون دو رام را هر کدام در پوشه های که درست کردید استخراج میکنید.

بعد پوشه های که در عکس زیر مشخص شدند را پاک کنید از رام اصلیتون

 

4568

اکنون همین پوشه های addon.d (If present), app, framework, fonts, media and priv-app را از رام پورت جابه جا میکنید.

پوشه etc را درون هر دو فولدر باز کنید،برید به پوشه init.d در رام پورت شده هر چی فایل هست به جز فایل 00banner را کپی کنید به پوشه init.d در رام اصلی.

اکنون پوشه permissions را از پوشه etc در هر دو رام باز کنید و تمام فایلهای پوشه permissions را از رام پورت شده به رام اصلی انتقال بدهید و جایگزین کنید.به جز دو پوشه handheld_core_hardware.xml و org.cyanogenmod.hardware.xml اگر وجود داشتند.

همچنین هر چی پوشه در مسیر etc را پورت شده هست را به رام اصلی اصلی در مسیر etc کپی کنید مانند پوشه miui_feature

اکنون فایل system_fonts.xml را در رام اصلی پوشه etc باز کنید و در آخر فایل قبل از کد </familyset> کد زیر را قرار دهید.

<family>
        <nameset>
            <name>miui</name>
        </nameset>
        <fileset>
            <file>Miui-Regular.ttf</file>
            <file>Miui-Bold.ttf</file>
        </fileset>
    </family>

    <family>
        <nameset>
            <name>miuiex</name>
        </nameset>
        <fileset>
            <file>MiuiEx-Regular.ttf</file>
            <file>MiuiEx-Bold.ttf</file>
        </fileset>
    </family>

    <family>
        <nameset>
            <name>miuiex-light</name>
        </nameset>
        <fileset>
            <file>MiuiEx-Light.ttf</file>
        </fileset>
    </family>

اکنون هر چی فایل در پوشه های bin, lib و xbin در رام پورت شده هست را به رام اصلی کپی کنید.(فقط کپی کنید هیچ فایلی را جایگزین نکنید)

الان فایل build.prop را از رام اصلی باز میکنیم.مقدارهای پایین را همانگونه که میل دارید میتوانید تغییر دهید.

ro.build.id=
ro.build.display.id=
ro.build.date=
ro.build.date.utc=
ro.product.locale.language=en
ro.product.locale.region=US
ro.cm.version=
ro.modversion=

اکنون کدهای زیر کپی کنید و در آخر فایل build.prop رام اصلیتون کپی کنید، شما می توانید کدهای زیر را ویرایش کنید ولی ساختار اصلی را نگه دارید برای اطلاع از ساختار اصلی به build.prop رام پورت شده مراجعه کنید.

ro.build.description=devicename-user 4.4.2 yourname C2104XXUCNG1 release-keys
ro.build.fingerprint=devicemanufacturer/devicemodel/device:4.4.2/yourname/C2104XXUCNG1:user/release-keys
ro.product.model=Xperia L
ro.product.device=taoshan
ro.build.characteristics=default
#MIUI_Features
ro.miui.has_real_blur=0
ro.miui.has_handy_mode_sf=1
ro.config.sms_received_sound=FadeIn.ogg
ro.config.sms_delivered_sound=MessageComplete.ogg
ro.product.manufacturer=Xiaomi
ro.config.elder-ringtone=Angel.mp3
persist.sys.mitalk.enable=true
ro.miui.ui.version.code=5
ro.miui.ui.version.name=V7
persist.sys.strictmode.disable=true
ro.product.mod_device=yourdevice

کدهای زیر را همانند build.prop رام پورت شده تغییر دهید

ro.config.notification_sound=
ro.config.alarm_alert=
ro.config.ringtone=

اگر موبایلتان دارای دکمه های بر روی صفحه هست،کد زیر را در پایان build.prop رام اصلی قرار دهید.

qemu.hw.mainkeys=0

خوب تا اینجا کارمون با build.prop تموم شده. اکنون فایل META-INF/com/google/android/updater-script را از رام اصلی با Notepad++ باز میکنیم و تمام کدهای  symlink و  set_metadata را از رام پورت شده به رام اصلی کپی میکنیم.کدهای دیگری در رام اصلی هم هستن به آنها کاری نداشته باشید. یک نمونه  updater-script برای دانلود هم براتون میذارم که ازش استفاده کنید.

کد زیر را هم قبل از unmount(“/system”); در پایان updater-script قرار بدهید.

set_perm(0, 1000, 06750, "/system/xbin/shelld");
run_program("/sbin/busybox", "mount", "/data");
package_extract_dir("data", "/data");
package_extract_file("META-INF/com/miui/relink", "/tmp/relink");
set_perm(0, 0, 0555, "/tmp/relink");
run_program("/tmp/relink");
delete("/tmp/relink");
set_perm_recursive(1000, 1000, 0755, 0644, "/data/miui");
set_metadata("/system/bin/debuggerd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
set_metadata("/system/bin/debuggerd_vendor", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:debuggerd_exec:s0");
set_metadata("/system/xbin/su", "uid", 0, "gid", 2000, "mode", 06755, "capabilities", 0x0, "selabel", "u:object_r:su_exec:s0");
delete_recursive("/data/miui/preinstall_apps");
delete_recursive("/data/miui/cust/preinstall_apps");
ui_print("Installation finished...Enjoy!");
unmount("/data");

همچنین پوشه META-INF/com/miui and data folder را از رام پورت شده به رام اصلی کپی کنید.

اکنون فایل boot.img را طبق آموزشهای بالاتر ویرایش کنید و در رام اصلی قرار دهید.

و در آخر در پوشه Base rom  تمام فایلها و پوشها را با کلیک راست میکشیم و با برنامه winrar مانند تصویر زیر به زیپ تبدیل میکنیم.باید حاوی فایلهای META-INF, system, boot.img, file_contexts(If present) and data باشد.

win

 

اکنون فایل شما آماده هست تا با ریکاوری بر روی موبایلتان فلش شود.

ممکن است بعد از فلش گوشی شما بوت لوپ شود که باید با برنامه LOGCAT اشکلات خود را ببیند و اصلاح کنید.

امیدوارم که آموزش به اندازه کافی کامل و آموزنده باشه که بتونید رام miui  خودتان را بسازید. سربلند و موفق باشید.

برای اطلاعات بیشتر می توانید به منبع آموزش مراجعه کنید.ولی در این آموزش سعی شده تغیراتی برای بروزتر بودن ایجاد شود.

برای بحث و تبادل نظر با کوکرهای انجمن میتوانید به لینک همین آموزش در انجمن مراجعه کنید.

لینک آموزش در انجمن

 

[button link=”https://telegram.me/gsm_developers”]لینک کانال تلگرام[/button]

 

هر گونه کپی برداری از پست شرعاً حرام بوده و مورد پسند نویسنده نمی باشد.