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

بهمن 19, 1397| سنا عبادی
دسترسی به سورس اندروید با دیکامپایل apk | مارکت سورس اندروید ریور

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

نحوه دیکامپایل APK به سورس اندروید

منظور از دیکامپایل کردن یک فایل apk به سورس اندروید چیست ؟

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

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

در این مقاله با ۴ گام شما به سورس یک اپلیکیشن دسترسی خواهید داشت . اگر قهوه خود را آماده کردید و محکم روی صندلی خود نشستید شروع کنیم :

در کل اگر قرار هست یک سورس اندروید را تقسیم بندی کنیم شامل دو بخش هست که در بالا توضیح دادم یعنی بخش اول که شامل منابع (Resources) ‌هست و بخش دوم سورس اصلی برنامه هست که یا به زبان جاوا است یا کاتلین . برای بخش اول از ابزار apktool و برای بخش دوم از dex2jar استفاده خواهیم کرد.

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

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

همچنین بخوانید :  آموزش صفر تا صد برنامه نویسی اندروید
لطفا برای مشاهده لینک های این نوشته به حساب کاربری خود وارد شوید

بعد از اینکه تمامی فایل های پیش نیاز را دانلود و در سیستم خود اکسترکت کردید , مرحله ی بعدی شما از گام اول که دانلود فایل apk شما و کپی کردن آن در فولدری مشخص از سیستم شما هست شروع خواهد شد.
بعد از اینکه apk خود را گرفتید , تنها با تغییر .apk به .zip فرمت فایل را تغییر دهید. به طور مثال اگر androidRiver.apk را دارید تنها .apk را پاک کنید و .zip را جایگزین کنید یعنی باید فایلی به این صورت داشته باشید : androidRiver.zip

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

گام دوم :
حال به اپلیکیشنی که اکسترکت کردید برگردید , شما باید فایلی به نام classes.dex را داشته باشید .
این فایل را کپی کرده و در فولدر dex2jar پیست کنید .
حال CMD را باز کنید .و به لوکیشن dex2jar خود بروید . به طور مثال : (cd C:\Users\AndroidRiver\Desktop\dex2jar-0.0.9.15)
بعد از اینکه به لوکیشن فولدر دسترسی پیدا کردید , این کامند را تایپ کنید :
dex2jar classes.dex و بعد Enter رو بزنید.
در همان موقع به صورت خودکار فایلی با این عنوان classes_dex2jar.jar در فولدر شما ساخته خواهد شد.

در مرحله بعدی , سراغ فایلی به اسم jd-gui.exe خواهیم رفت (یکی از ابزار هایی که دانلود کردید بعد از اکسترکت این خواهد بود).
با دابل کلیک روی این فایل .exe پنجره ایی باز خواهد شد . این مسیر را دنبال کنید : File -> Open File
بعد در دایرکتوری سیستم خود classes_dex2jar.jar که در فولدرDex2jar هست را انتخاب کنید .
بعد باز با مراجعه به File -> Save all sources تمامی سورس ها در دایرکتوری دلخواه خود روی سیستم ذخیره کنید. با مراجعه به مسیری که در آن فایل ها را ذخیره کردید تمامی فایل های جاوا را خواهید دید ولی خبری از فایل های xml نیست . پس ادامه دهیم .

همچنین بخوانید :  استفاده از Flavors در اندروید استدیو

گام سوم :
در این گام قرار هست که منابع و فایل های .xml را بدست آوریم :

فولدری جدا بسازید (مثلا XML) . ‌و یک نسخه از همان فایل APK را در آن قرار دهید .سپس سراغ ابزارهایی که در گام اول دانلود کردید بروید و apktool.jar را کپی کرده و در فولدری که ساختید قرار دهید.
بعد از آن باز به ابزار هایی که دانلود و اکسترکت کردید رفته و در فولدری به نام apktool-install-windows... را باز کنید و دو فایل aapt.exe و apktoll.bat را کپی کنید و در فولدر XML خود در کنار سایر فایل ها جایگذاری کنید.
پس با این تفاصیل شما یک فولدر به نام XML دارید و در آن چهار فایل دارید که یکی از آنها اپ شما با فرمت .apk است . بعدی aapt.ext , apktool.exe و نیز apktool.jar را خواهید داشت.
سپس CMD را باز کنید.
به فولدر XML ‌خود دسترسی پیدا کنید به طور مثال (cd C:\Users\androidRiver\Desktop\XML ) .سپس کامند زیر را تایپ کنید:
apktool if framework-res.apk
و سپس
apktool d yourAppName.apk
نکته : به جای yourAppName.apk نام اپلیکیشن خود با فرمت apk را بنویسید.

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

گام چهارم و آخر:
در این مرحله شما به صورت جداگانه سورس جاوا و xml را خواهید داشت . آنها را در یک فولدر ریخته و سپس شما سورسی کامل خواهید داشت .

لازم است بگوییم معمولا برنامه نویسان از این روش برای دستیابی به بخشی از سورس و یا همچنین یادگیری متد ها و روش های جدید استفاده میکنند . همانطور که میدانیم قطعا شما نمی توانید 100% پروژه را به سورس کد تبدیل کنید اما تا میزان قابل توجهی این امکان وجود دارد.
شما می توانید سورس اندروید خود را در اندروید استودیو باز کنید.
از سورس خود و ادیت آن لذت ببرید .

 

4.9/5 (8 Reviews)
سنا عبادی CO-Founder نویسنده مقاله

توسعه دهنده موبایل به ویژه سیستم عامل اندروید ، هم بنیانگذار اندروید ریور و در تلاش برای تحقق یک رویا..



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

مقالات مرتبط را بخوانید :


سورس های اندروید شامل تخفیف رو ببین !


  تخفیف ها و اخبار ویژه رو در تلگراممون دنبال کن :)
به این مقاله امتیاز دهید :
4.9/5 (8 Reviews)
  خرید سورس های حرفه ای بازی و اپلیکیشن اندروید

دسته‌ها: آموزش برنامه نویسی اندروید

دیدگاه

  • Masrour Tourism
    تیر 11, 1398

    سلام.وقتی دستور dex2jar classes.dex رو وراد می کنم، این ارور رو میده
    ‘java’ is not recognized as an internal or external command,
    operable program or batch file.

    • پشتیبان 2 ( محمد مهدی آذرمهر )
      تیر 12, 1398

      سلام وقت بخیر ، مشکل از JAVA_HOME هست که به درستی ست نشده

    • Pedram Rabbani
      بهمن 13, 1398

      سلام. بسته به اینکه JDK رو کجا نصب کرده باشی به Control Panel\System and Security\System برو رو گزینه Advanced system settings و بعد Environment Variables کلیک کن بعد پایین پنجره یعنی در قسمت System variables روی دکمه ی new کلیک کن. قسمت variable name بنویس patch و قسمت variable value بسته به مسير نصب JDK مثلا
      ;j C:\Program Files\java\jdk-13.0.2\bin
      رو بنويس ok و…..

  • AmirHossein Porali
    مرداد 3, 1398

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

    • پشتیبان 3 ( سارا پهلوانپور)
      مرداد 3, 1398

      سلام امیرحسین عزیز ، باید با پراکسی دانلود کنید با احترام

    • AmirHossein Porali
      مرداد 4, 1398

      سلام اگرمنظورتون فیلتر یا تحریم هست بایدبگم تغیرآیپی ازقبل انجام شده ولی بازم مشکلی هست لطفاچک کنید

    • پشتیبان 2 ( محمد مهدی آذرمهر )
      مرداد 4, 1398

      سلام جناب پورعلی ، لطفا بفرمایید دقیقا با کدام لینک مشکل دارید تا بتوان بررسی کرد

  • ali timar
    آبان 19, 1398

    ممنون کار کرد ی جا توی برنامه نویسی اپم گیر کرده بودم نمیدنستم چیکارش باید کنم که بفکرم رسید از برنامه های مشابه استفاده کنم ببینم اونا چطوری کد نوشتن
    ممنون کارمو راه انداخت

    • سنا عبادی
      اسفند 29, 1398

      خیلی هم عالی

  • ali moeini
    اسفند 14, 1398

    سلام و عرض ادب من در به دست اوردن xml مشکل داشتم و در کامنت خطا داشتم.
    C:\Users\AliMoeini\Desktop\New folder\dex2jar-0.0.9.15>cd C:\Users\AliMoeini\Desktop\New folder\xml

    C:\Users\AliMoeini\Desktop\New folder\xml>apktool if framework-res.apk
    Exception in thread “main” brut.androlib.AndrolibException: java.io.FileNotFoundException: framework-res.apk (The system cannot find the file specified)
    at brut.androlib.res.AndrolibResources.installFramework(AndrolibResources.java:584)
    at brut.androlib.Androlib.installFramework(Androlib.java:473)
    at brut.apktool.Main.cmdInstallFramework(Main.java:250)
    at brut.apktool.Main.main(Main.java:81)
    Caused by: java.io.FileNotFoundException: framework-res.apk (The system cannot find the file specified)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.(Unknown Source)
    at java.util.zip.ZipFile.(Unknown Source)
    at java.util.zip.ZipFile.(Unknown Source)
    at brut.androlib.res.AndrolibResources.installFramework(AndrolibResources.java:552)
    … 3 more

    C:\Users\AliMoeini\Desktop\New folder\xml>apktool d app-debug.apk
    I: Baksmaling…
    I: Loading resource table…
    Exception in thread “main” brut.androlib.AndrolibException: Could not decode arsc file
    at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
    at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
    at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
    at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
    at brut.androlib.Androlib.getResTable(Androlib.java:50)
    at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
    at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
    at brut.apktool.Main.cmdDecode(Main.java:146)
    at brut.apktool.Main.main(Main.java:77)
    Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
    at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
    at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44)
    at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102)
    at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83)
    at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49)
    … 8 more

    • سنا عبادی
      اسفند 29, 1398

      سلام
      بهتر هست این خطاهایی که بهشون برخورد کردید رو سرچ کنید خیلی بهتر به نتیجه میرسید . من تمامی خطا ها رو حفظ نیستم .
      سرچ کنید و اگر به نتیجه ی دلخواه نرسیدید باز کامنت بذارید . موفق باشید

  • Hamid Reza Dadgarnia
    اسفند 23, 1398

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

    • سنا عبادی
      اسفند 29, 1398

      سلام . اگر سورس رمز نگاری نشده باشه منظورم توسط ابزار obfuscate هست . بله میتونید
      ولی اگر با پروگارد رمز نگاری شده باشه یا هرچیز دیگری باید با زبان smali آشنایی داشته باشید که بتونید تغییرات رو اعمال کنید یا استفاده کنید .
      موفق باشید

  • gem free
    فروردین 17, 1399

    سلام من مشکلی توی گرفتن تمام کدهای xml و java رو ندارم البته این کارو ۸۰ درصدشو با گوشی انجام میدم و بقیه کار رو با سیستمم
    ولی بعد از اینکه به این فایل ها دسترسی پیدا میکنم به هر روشی کدهارو وارد اندروید استودیو میکنم خیلی خطا داره
    ای کاش یه آموزش هم واسه این کار میزاشتین

  • paeez 1397
    اردیبهشت 16, 1399

    سلام،
    من چگونه می توانم دیتای یک بازی را دیکامپایل و ویرایش کنم؟
    مثلا دیتای یک بازی را که پسوندش .obbدیکامپایل کنم و یک فایل را از داخلش حذف و یا اضافه کنم و سپس دوباره کامپایل کنم؟

  • حسن قربانی
    اردیبهشت 18, 1399

    سلام چگونه سورس هارو ویرایش کنم.

  • HOSSEIN GHOLAMI
    خرداد 31, 1399

    کار نمیکنه چرا؟ دانلود نمیشن

  • HOSSEIN GHOLAMI
    خرداد 31, 1399

    یک روش دوم هم دارد که ان خیلی راحت تر می باشد قصد قرار دادن ان در سایت را دارم ولی نمی دانم چگونه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
    ممنون میشوم راهنمایی کنید.

  • HOSSEIN GHOLAMI
    تیر 1, 1399

    سلام و عرض ادب. من طبق آموزش پیش رفتم ولی این ارور رو میده
    http://s7.picofile.com/file/8245294926/scrin.png
    البته وقتی ارور میده پوشه هم میسازه با اسم فایل apk اما اصلا شبیه فولدر توی آموزش نیست! داخل پوشه ای که هم اسم ای پی کی هست یه فولدر به اسم smali وجود داره و فرمت تمام فایلاشم smali هست!باید چیکار کنم؟!

  • Amir Afshar
    شهریور 5, 1399

    با سلام خیلی ممنون بابت توضیحات خوبتون. یه سوال داشتم اگه کسی به این روش بخواد اپلیکیشن منو کپی کنه یا بخواد به نفع خودش سوءاستفاده کنه، آیا میتونه؟؟؟

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

راهنما : برای نوشتن موارد مختلف در دیدگاه می توانید از راهنمای نگارش اندروید ریور استفاده کنید : نگارش کد کوتاه `your code`
نگارش کد بلند یا نگارش بخش عمده یک سورس کد :
[sourcecode lang="your code language"] your code here [/sourcecode]