آموزش های توسعه رام اندروید

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

با سلام

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

حتما خیلی دیده اید که مثلا رام گوشی نوت 7 رو بر روی گلکسی اس 6 پورت کرده اند در این آموزش انجام چنین کاری را می دهیم

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

توضیحات اولیه:

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

دیوایسی که بوت نمیشه برای فهمیدن اشکال موقع بوت باید لوگ گرفت

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

گاهی هم در حین بوت کرنل شناسای نمی شود که باید init.environ.rc.  تغییرات اعمال بشه برای بوت فریمورک

اگر هم نتوانستید لوگ در بوت کرنل بگیرید در محیط ریکاوری بعد از دو دقیقه کد زیر را وارد کنید

adb pull /data/tombstones

adb کلید موفقیت هر پورتی می باشد

با adb می توان لوگ گرفت و اشکالات را برطرف کرد

از پست زیر در سایت برای دانلود adb و آموزش لوگ گرفتن استفاده کنید

آموزش استفاده از adb و لوگ کات

حتما بعد از گرفتن لوگ با کدهای فراوانی رو به رو می شوید، برای گرفتن تنها لوگ خطاها از کد زیر استفاده کنید

adb logcat *:E > filename

میریم برای توضیحات پورت

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

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

دیکامپایل و کامپایل فایلهای APK را نیز باید بلد باشید

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

معرفی ابزار دئودکس Fulmics Deodexer اندروید 6 و 7

دو پوشه فایلهای Apps Priv-app و Framework را از بیس رام خود بردارید و دئودکس کنید یکجا نگهشون دارید

پورت خود را نیز دئودکس کنید و Apps ،Framework و Priv-app را در بیس کپی کنید

در اینجا با فایلهای services.jar, and framework.jar سر و کار داریم

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

باید امضای برنامه ها را درست کنید تا نصب بشوند

تغییراتی که نیاز هست بدهیم

فایل core-libart.jar/smali/java/security/MessageDigest.smali را باز کیند

در زیر .method public static isEqual([B[B)Z کدهای زیر را اضافه کنید

.registers 7
 .param p0 # [B
 .param p1 # [B

 const/4 v2, 0x0 # change to const/4 v2, 0x1

 array-length v3, p0

 array-length v4, p1

فایل core-libart.jar/smali/java/security/Signature.smali را باز کنید

در آخر کد .method public final verify([B)Z کد زیر را اضافه کنید

:cond_d
 invoke-virtual {p0, p1}, Ljava/security/Signature;->engineVerify([B)Z

move-result v0 # change to  const/4 v0, 0x1

 return v0
.end method

at the end of the method .method public final verify([BII)Z

 :cond_1e
 invoke-virtual {p0, p1, p2, p3}, Ljava/security/Signature;->engineVerify([BII)Z

move-result v0 # change to  const/4 v0, 0x1

 return v0
.end method

 

حالا در این مسیر فایل services/smali/com/android/server/pm/PackageManagerService.smali را باز کنید

و تمام متود زیر را

.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature; )I

به کد زیر تغییر بدهید

.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/ Signature;)I
    .locals 1

    const/4 v0, 0x0

    return v0
.end method

فایل services.jar/smali/com/android/server/pm/PackageManagerService$InstallParams.smali را باز کنید

در زیر کد .method private installLocationPolicy(Landroid/content/pm/PackageInfoLite; )I قرار دهید

and-int/lit16 v7, v7, 0x80

 if-nez v7, :cond_61

 iget v7, p1, Landroid/content/pm/PackageInfoLite;->versionCode:I

 iget v8, v3, Landroid/content/pm/PackageParser$Package;->mVersionCode:I

 if-ge v7, v8, :cond_61 # change to if-ge v8, v8, :cond_61

 const-string v4, "PackageManager"

 new-instance v5, Ljava/lang/StringBuilder;

 invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V

 const-string v7, "Can\'t install update of "

خوب با این کار برنامه ای که نصب نمی شود امضاش برداشته میشه و راحت نصب میشه

برای راحتی کار دو برنامه را بهتون معرفی میکنم

برنامه Winmerge که اجازه ادغام دو فایل را بهتون میده

برنامه FileSeek برای جستجوی خطاها در فایلهای رام

 

بریم برای چند نمونه عیب یابی

در logcat بیشتر دنبال سه چیز باشیم(“E JavaBinder:”, “E art”, “E AndroidRuntime: FATAL EXCEPTION:”)

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

بعنوان نمونه اگر در logcat با خطایی زیر مواجه شدیم

"01-01 01:26:25.169  5599  7183 E JavaBinder: java.lang.NoSuchMethodError: No virtual method activityPauseTrigger(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/pm/ApplicationInfo;)V in class Lcom/android/internal/app/ActivityTrigger; or its super classes (declaration of 'com.android.internal.app.ActivityTrigger' appears in /system/framework/framework.jar:classes2.dex)"

مکان خطا در framework jar Class2 می باشد

activityPauseTrigger(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/pm/ApplicationInfo;)V is the missing info in the port smalis and

لوگ میکه که خطا جای در

Lcom/android/internal/app/ActivityTrigger; or the files with idential names to Activity trigger

در این موارد خطا ممکن در فایلهای smali رام استوک باشد

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

در صورتی که هم لوگ مکان فایلی که خطا داد را نشان نداد از برنامه  fileseek استفاده می کنیم

بعنوان نمونه

"01-01 00:24:17.509  7524  7539 E JavaBinder: java.lang.UnsatisfiedLinkError: No implementation found for void com.android.internal.app.ActivityTrigger.native_at_pauseActivity(java.lang.String) (tried Java_com_android_internal_app_ActivityTrigger_native_1at_1pauseActivity and Java_com_android_internal_app_ActivityTrigger_native_1at_1pauseActivity__Ljava_lang_String_2)

در کد بالا باید دنبال چه چیز باشیم؟مکانش کجاست؟

خلاصه ترش میکنیم

com.android.internal.app.ActivityTrigger.native_at_pauseActivity(java.lang.String

طبق جستجوی fileseek شاید نزدیک به 100 مورد مشابه باشه

ولی فقط یک فایل کاملا شبیه می باشد

.method ActivityTrigger.native_at_pauseActivity

پس با winmerge طبق مسیری که پیدا کردیم فایل smali را پاک و تمیز میکنیم

یک نمونه خطا برای Runtime هم در زیر براتون مینویسم

طبق لوگ زیر

"07-25 09:17:08.975 16379 16379 E AndroidRuntime: java.lang.NoSuchMethodError: No interface method setDataFromNSFLP(ILandroid/os/Bundle;)V in class Landroid/location/ILocationManager; or its super classes (declaration of 'android.location.ILocationManager' appears in /system/framework/framework.jar)

باید در فایل framework بگردیم

با برنامه file seek کد زیر را میگردیم و مراحل را مانند بالا انجام می دهیم

setDataFromNSFLP(ILandroid/os/Bundle;)V

خوب بعد از بالا آمدن دستگاه نیز  ممکن با مشکلاتی از قبیل بسته شدن برنامه ها رو به رو بشید

ویرایش در هر فریمور متفاوت می باشد

یادتان هست در بالا گفتم فایلهای سیستم استوک رو یجا نگه دارید اینجا بدرد می خورد

پوشه McRegistry و فایل ffffffff0000000 را به رام خود انتقال بدید

پوشه  Fonts و فایل font در پوشه /etc را نیز انتقال بدید

پوشه های  ” preloadedmdm “, ” sipdb ”  ” tts را از رام بوت شده خود پاک کنید و با پوشه های رام پورت شده جایگزین کنید

پوشه Media را باز کنید

پوشه Audio را پاک کنید و پوشه رام پورت را جایگزینش کنید

در مسیر /etc/permission پوشه های ناقص را جایگزین میکنیم( برای فریمورهای 64 بیت به 32 بیت)

فایلهای libs را از 64 به 32 جایگزین میکنیم

فیکس مشکل مکان یابی

فایل services.jar را دیکامپایل میکنید

در مسیر services.jar\smali\com\android\server\location فایلهای smali را با برنامه Winmerge به پورت ادغام میکنیم

همچنین فایل services.jar\smali\com\android\server\LocationMana gerService$xxx را از بیس به پورت کپی میکنیم

فیکس بلوتوث و NFC

دو فایل NFC.apk و Bluetooth.apk از بیس به رام پورت کپی کنید

اگر بازم مشکل NFCداشت

فایل PackageManagerService.smali را باز می کنید

دنبال مدل NFC خود میگردید دنبال supportNfc باشید

و مدل خود را جایگزین کنید( مثلا برای نوت 7 S3FWRN5 می باشد)

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

mohsen

محسن هستم 30 ساله طرفدار دنیایی متنوع اندروید و کاستوم رامها در Gsm-Developers

‫28 دیدگاه ها

  1. سلام ببخشید قسمت aroma رایگان نمیشه؟
    کلی فایل دارم ولی بلد نیستم چطور ازشون استفاده کنم

  2. سلام از زحمات شما بسیار سپاسگذارم . ترجمه بسیار خوبی بود . ممنون از راهنمایی های شما دوست عزیز .
    یه سوال و اینکه برای یادگیری برنامه نویسی اندروید و همچنین جهت ساخت کاستوم رام های مختلف آیا جایی برای آموزش هست که بتونم یاد بگیرم ؟ یا اینکه باید به صورت تجربی باآزمون و خطا کارکنم تا یاد بگیرم ؟
    اگه جایی هست که بشه یاد گرفت ممنون میشم معرفی کنید .
    باز هم از زحمت های شما کمال تشکر رو دارد .

    1. با سلام دوست عزیز برنامه نویسی بحثی جدا از توسعه رامهای اندروید می باشد..برای توسعه نیاز به یادگیری زبان برنامه نویسی نیست ولی با دانستن زبان برنامه نویسی میتونید خیلی حرفه ای توسعه بدید
      برای توسعه هم جایی برای یادگیری نیست و کلا بحثی تجربی می باشد مسلط بودن به زبان انگلیسی هم شرط هست..باید یک گوشی داشته باشید و بصورت تجربی شروع کنید کار با حوصله هست
      امیدوارم که موفق باشید در این راه اگر گوشی سامسونگ دارید توصیه میکنم از بخش آموزش ساخت کاستوم رام سامسونگ استفاده کنید یه شروع ساده و حرفه ای هست که باعث میشه بیشتر قلقها رو یاد بگیرید

  3. خب در این صورت شرایط لازم رو دارم . اتفاقا گوشی سامسونگ دارم حتما از بخش آموزش استفاده میکنم خیلی مطالب مفیدی تو سایت و فروم گذاشتین .از اینکه وقت و انرژی برای کمک به من و دوستان صرف میکنید خیلی ممنونم . همیشه پیروز و موفق باشید .

  4. سلام من می خواستم برای gt n5100 رام از یه تبلت بروز سامسونگ پورت کنم. می خوام تبلتی باشه که جدید ترین اندروید رو دریافت کنه لطفا راهنمایی کنید ممنون

  5. با سلام خدمت شما دوست گرامی من گوشی Samsung galaxy core prime دارم با شماره مدل sm-g360h با android 4.4.4 براش یک رام سامسونگ پیدا کردم با android 5.1.1 همه چی خوب کار میکنه ولی مشکلی که من با این رام دارم مشکل مکانیابی هست در ضمن رامی که من روش نصب کردم مربوط به گوشی Samsung galaxy j1 mini هست همونطور که گفتم من خودم این رام رو نساختم از سایت xda گرفتم من توسعه دهنده هم نیستم میتونید برام مشکل مکانیابی رو حل کنید؟ با سپاس

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

  6. سلام خسته نباشید
    من میخوام رام8.0یا7.1.1رو برای یه گوشی قدیمی که تا اندروید4.4.2 بیشتر ساپورت نشده پورت کنم بنظرتون این کار ممکنه؟؟اگه ممکنه باید از کجا شروع کنم.در ضمن رامی رو که میخوام پورت کنم رام رسمی سامسونگ هست.

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

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

  8. سلام محسن جان … اموزش عالی هست …..یه سوال محسن جان من داخل سایت xda دیم که رام نوت8 رو برای j5 2016 پورت کردم ……. حالا من می خوام همین کار رو بکنم ……از دیکام و ریکام و ادیت برنامه ها هم سر در می یارم و قبلا انجام دادم …..حالا می خوام کارم رو پیشرفت بدم …..ایا این اموزش می تونم کمکم کنه یا نه ….چون پردازنده نوت 8 اگزینوس هست و پردازنه جی 5 اسنپدراگون ( رامی هم که داخل xda دیدم پورت واقعی نوت 8 بود و خودمم تست کردم ..اینم لینک رام :https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries–other-development/rom-odyssey-note8-v1-t3744713

    ممنون می شم جواب بدی…

    1. سلام کاری به پردازنده نداره برنامه های گوشیهای سامسونگ رو همه گوشیهاش قابل اجرا هست..این نوع پورتها هم پورت سیستم نوت 8 هست مثلا..مثلا بیایید برنامه ماشین حساب نوت 8 رو از سیستم گوشی نوت 8 بکشید و روی جی 5 نصب کنید مشکلی نداره معمولا

      1. ممنون ………ایا شما داخل تلگرام یا هر پیام رسان دیگری فعالیت دارین ؟؟ که بشه باحاتون در ارتباط باشیم ؟؟؟

  9. سلام چطوری میتونم فایلای vdex odex art oat art.rel رو از بین ببرم هیچ کدوم از برنامه های دئودکسر هم کار نمیکنن رام اندروید ۸ سامسونگ هست

  10. سلام محسن جان
    یه رام لینیج 15.1 دارم که واسه n915f
    امکانش هست برنامه های نوت 8 رو بریزم تو لینیج بعد فلشش کنم؟؟؟

      1. خب رام پورت شده از نوت 8 یا… نداری واسه نوت ایج
        اگه اندرویدشم 7 باشه عالی میشه
        من یه رام پورت شده پیدا کردم اما واسه سری اگزیونوس نوت ایج بود و نوت ایج من اسنپدراگونه…راهی هست که بشه این رامو فلش کنم؟؟؟

  11. سلام گوشی من اسنپدراگونه
    یه کاستوم رام براش پیدا کردم که واسه اگزیونوسه
    میشه رو گوشیم فلشش کنم؟ راهی داره آیا؟؟؟

  12. سلام در پورت رام نیازی نیست هر دو ورژن اندروید یکی باشه فقط کافیه سخت افزار دو دستگاه یکی باشه برای مثال اندروید وان بتا برای a6 عرضه شده همون رام برای a7 2017 پورت شده

  13. سلام من یه گوشی دارم اندروید ۶ هیچ کاستوم رامی نیست واسش نصب کنم ولی یه گوشی هست یه مدل بالاتر مشخصات اون دقیقا عین مال منه ولی کاستوم رامش اندروید ۷ هست
    هیچ راهییی نداره پورت کنم؟

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

  14. در assyed kitchen رام رسمی و رامی را که می خواهیم پرت کنیم را در کدام پوشه ها بذاریم ؟

  15. سلامچند سوال داشتم
    در پورت رام مثلا گوشی های نخسه خارجی که زبان فارسی و حالت شبکه 3G 4G به درستی کار نمیکند یعنی حالت شبکه اتوماتیک است
    که این ها همه مربوط فایل csc میشود مثلا ایا میشود مثلا رام
    j710f را روی نخسه چینی همن مدل j7108 پورت کرد من من تمام کارها را انجام دادم فقد ماندم که چطور حالت شبکه را مثل j710fکنم ایا او فایل های که داخل فایل
    sec_csc.zip است اونا را کاملا حذف کنم یا فایل های j710f را به اونا اضافه کنم قبلی را حذف نکنم که حالت شبکه j7108 مثل j710f بالا بیاد ممنون اگه پاسخ به ایمیل بفرستت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا