امضای یک فایل apk. با استفاده از ابزار jarsigner. نحوه صحیح امضا کردن یک بازی یا برنامه APK در اندروید نحوه تغییر امضای یک برنامه اندروید

از آنجایی که من خودم سوال را در گوگل جستجو کردم نحوه امضای فایل apk"، من می دانم که پیدا کردن یک دستورالعمل واقعا کارآمد و قابل درک در همه چیز چندان آسان نیست. به همین دلیل تصمیم گرفتم خودم مطالبی را در مورد چگونگی امضای صحیح برنامه یا بازی خود در اندروید بنویسم.

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

بنابراین، بیایید آن را طولانی نکنیم و بلافاصله با نحوه امضای فایل apk خود و نحوه استفاده از آن برای رسیدن به نتیجه دلخواه شروع کنیم.

این روش صحیح ترین روش ذکر شده است، بنابراین ما آن را در این مطالب شرح خواهیم داد. ما کلیدهای خود را با داده ها و گواهی های خود می سازیم و از آنها برای امضای برنامه ای که ایجاد کرده اید استفاده می کنیم.

برای کار ما نیاز داریم: OpenSSL و SignApk.

ابتدا اجازه دهید یک گواهی و یک کلید امضا بسازیم. OpenSSL را نصب کنید. در حین نصب، نصب کننده از شما می خواهد که مؤلفه ها را در پوشه ویندوز کپی کنید، پوشه Bin را انتخاب کنید، که محلی است که کل OpenSSL را در آن نصب می کنید.

حالا از طرف مدیر سیستم (این خیلی مهم است!) خط فرمان را باز کنید. سپس، در خط فرمان، به پوشه bin بروید، که در پوشه ای که OpenSSL را نصب کرده اید قرار دارد (به عنوان مثال، C:\OpenSSL\bin\یا C:\Program Files\OpenSSL\bin\). اگر نمی دانید، انتقال به پوشه دیگر با دستور انجام می شود سی دی. یعنی برای رفتن به پوشه مورد نظر باید دستور زیر را اجرا کنید:

سی دی C:\OpenSSL\bin\

هنگامی که در پوشه Bin قرار گرفتید، می توانید مستقیماً به ایجاد گواهی و کلید ادامه دهید.

مرحله 1(ما تولید کلید را با طول 1024 بیت انجام می دهیم)

دستور را اجرا کنید:

openssl genrsa -out key.pem 1024

گام 2(بر اساس کلید، یک درخواست گواهی ایجاد می کنیم)

دستور را اجرا کنید:

openssl req -new -key key.pem -out request.pem

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

گام 3 (یک کلید خصوصی از یک گواهی تولید کنید)

دستور را اجرا کنید:

openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem

مرحله 4(اجرای تولید کلید عمومی)

دستور را اجرا کنید:

openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

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

و اکنون در واقع، اجازه دهید شروع به امضای برنامه کنیم. بایگانی را از SingApk که از لینک بالا دانلود شده است باز کنید. از پوشه Bin که در آن گواهینامه و کلید 2 فایل را ایجاد کردیم حرکت کنید: گواهی.pemو key.pk8به پوشه ای که در آن SingApk را باز کرده اید. ویندوز باید یک گفتگوی جایگزین فایل را نمایش دهد - جایگزین کنید.

اکنون، برای اینکه فایل apk را با یک امضای دیجیتال منحصر به فرد که خودتان ساخته اید امضا کنید، به سادگی فایل apk خود را به آن بکشید. sign_APK.bat. برای اینکه فایل را از یک پنجره به پنجره دیگر بکشید (این راحت نیست)، فایل apk خود را با SingApk به پوشه منتقل کنید. پس از اجرا، یک فایل با SingApk در پوشه ظاهر می شود apk_signed.apk، که برنامه یا بازی امضا شده شما خواهد بود.

با قابلیت ورود به برنامه گوگل پلی Google می‌تواند کلید امضای برنامه شما را مدیریت کند و از این کلید محافظت کند و از آن برای امضای فایل‌های APK شما برای توزیع استفاده کند. این روش ذخیره سازی در صورت گم شدن یا دستکاری کلید از شما محافظت می کند.

مهم!برای استفاده از Android App Bundles (قالب توصیه شده برای انتشار برنامه ها)، باید قبل از آپلود App Bundle در Play Console در برنامه امضای برنامه Google Play ثبت نام کنید.

دارندگان حساب و کاربران با مجوزهای مدیریت تولید جهانی که شرایط استفاده را پذیرفته اند می توانند ثبت نام کنند. هر بار فقط می‌توانید یک برنامه را در برنامه امضای برنامه Google Play ثبت کنید.

اصول کار

وقتی از ویژگی امضای برنامه در Google Play استفاده می‌کنید، کلیدهای شما در زیرساختی مشابه با کلیدهای Google ذخیره می‌شوند و توسط یک سرویس مدیریت کلید ویژه محافظت می‌شوند. اطلاعات دقیق در مورد زیرساخت فنی Google را می توان در اسناد امنیتی Google Cloud یافت.

برنامه های اندروید با یک کلید خصوصی امضا می شوند. با هر یک از این کلیدها یک گواهی عمومی وجود دارد که دستگاه ها و سرویس ها می توانند از آن برای تأیید امنیت برنامه ها و به روز رسانی آنها استفاده کنند. فقط آن به‌روزرسانی‌ها روی دستگاه‌هایی نصب می‌شوند که امضای آن‌ها با امضا مطابقت دارد برنامه نصب شده. اگر به Google اجازه دهید کلید امضای برنامه شما را مدیریت کند، این فرآیند امن تر خواهد بود.

توجه داشته باشید.استفاده از ویژگی امضای برنامه در Google Play اختیاری است. می‌توانید فایل‌های APK بارگذاری کنید و کلیدهای خود را بدون استفاده از App Bundles مدیریت کنید. با این حال، اگر دسترسی به keystore را از دست بدهید یا در معرض خطر قرار گیرد، نمی‌توانید برنامه خود را به‌روزرسانی کنید و باید آن را با نام بسته دیگری منتشر کنید.

توضیحات کلیدها، اشیاء و ابزار
شرایط شرح
کلید امضای برنامه

کلیدی که Google Play برای امضای فایل‌های APK تحویل داده شده به دستگاه کاربر استفاده می‌کند. وقتی برای برنامه امضای برنامه در Google Play ثبت‌نام می‌کنید، می‌توانید یک کلید امضای موجود را آپلود کنید یا به Google اجازه دهید یک کلید جدید ایجاد کند.

کلید دانلود

دو راه برای ایجاد یک کلید آپلود وجود دارد:

  • از کلید امضای برنامه استفاده کنید.اگر به Google اجازه دادید هنگام ثبت‌نام در برنامه، کلید امضای برنامه را ایجاد کند، کلید آپلود کلیدی است که برای امضای اولین نسخه برنامه استفاده کرده‌اید.
  • از یک کلید آپلود جداگانه استفاده کنید.اگر هنگام ثبت‌نام در برنامه، کلید امضای برنامه خود را ارسال کرده‌اید، می‌توانید یک کلید آپلود جدید برای امنیت ایجاد کنید. اگر نمی‌خواهید این کار را انجام دهید، از کلید امضای برنامه به عنوان کلید دانلود برای امضای نسخه‌های جدید استفاده کنید.
گواهی (der یا pem.)

گواهی حاوی کلید عمومی و اطلاعات اضافی درباره مالک آن. گواهی کلید عمومی به هر کسی اجازه می‌دهد بداند چه کسی App Bundle یا فایل APK را امضا کرده است. این گواهی را می توان به اشتراک گذاشت زیرا شامل کلید خصوصی نیست.

برای ثبت کلیدها با ارائه دهندگان API، می توانید گواهی عمومی برای کلید امضای برنامه را در صفحه دانلود کنید امضای برنامهدر کنسول Play گواهی کلید عمومی را می توان با همه به اشتراک گذاشت زیرا شامل کلید خصوصی نمی شود.

اثر انگشت گواهی

یک شناسه کوتاه و منحصر به فرد برای گواهی. اثر انگشت، همراه با نام بسته، اغلب توسط ارائه دهندگان API درخواست می شود تا دسترسی به خدمات خود را فراهم کنند.

اثر انگشت MD5، SHA-1، و SHA-256 گواهینامه های آپلود و امضای برنامه را می توانید در این آدرس پیدا کنید. امضای برنامهدر کنسول Play همچنین ممکن است نوع دیگری از اثر انگشت دیجیتال را دریافت کنید. برای این کار گواهینامه اصلی را با فرمت DER در همین صفحه دانلود کنید.

فروشگاه کلید جاوا (jks. یا keystore.) ذخیره سازی گواهینامه های امنیتی و کلیدهای خصوصی.
ابزار PEPK

ابزاری برای صادر کردن کلیدهای خصوصی از حافظه جاوا و رمزگذاری آنها برای ارسال به Google Play.

هنگامی که کلید امضای برنامه خود را به Google ارائه کردید، کلید خود را صادر و آپلود کنید (و در صورت لزوم گواهی عمومی آن)، سپس دستورالعمل‌ها را برای دانلود و استفاده از ابزار دنبال کنید. همچنین می توانید ابزار متن باز PEPK را دانلود، مشاهده و استفاده کنید.

فرآیند امضای برنامه

می‌توانید فایل‌های APK امضا شده با کلید اصلی امضای برنامه را قبل یا بعد از امضای برنامه در Google Play بارگذاری کنید.

اگر به Android App Bundles ارتقا دهید، می‌توانید آن‌ها را در نسخه‌های آزمایشی آزمایش کنید و از APK‌های موجود در نسخه‌های تولیدی استفاده کنید. در اینجا نحوه کار آن آمده است:

  1. یک App Bundle یا APK را امضا می‌کنید و آن را در Play Console آپلود می‌کنید.
  2. فرآیند امضای برنامه بستگی به آنچه دانلود می کنید دارد.
    • بسته برنامه. Google فایل‌های APK را در App Bundle بهینه می‌کند و سپس آنها را با کلید امضای برنامه امضا می‌کند.
    • فایل APK با کلید آپلود امضا شده است. Google امضای شما را تأیید می‌کند، آن را حذف می‌کند و فایل‌های APK را با کلید امضای برنامه دوباره امضا می‌کند.
    • یک فایل APK امضا شده با کلید امضای برنامه.گوگل امضا را تایید می کند.
  3. گوگل فایل های APK امضا شده را به کاربران تحویل می دهد.

نحوه ثبت نام در برنامه امضای برنامه Google Play

برنامه های کاربردی جدید

مرحله 1: یک کلید آپلود ایجاد کنید

  1. یک کلید آپلود به دنبال دستورالعمل ها ایجاد کنید.
  2. فایل APK جدید را با یک کلید آپلود امضا کنید.

مرحله 2: انتشار را آماده کنید

  1. پیروی از دستورالعمل ها
  2. پس از انتخاب نوع نسخه، گزینه‌های امضای برنامه خود را در قسمت «اجازه دهید Google کلید امضای برنامه خود را ایمن و مدیریت کند» پیکربندی کنید.
  3. اگر کلیک کنید ادامه هید، کلید تولید شده تبدیل به کلید آپلود می شود که برای امضای نسخه های بعدی استفاده می شود. همچنین می توانید از موارد زیر انتخاب کنید تنظیمات پیشرفته:
    • از یک کلید برای برنامه های مختلف در حساب توسعه دهنده استفاده کنید (گزینه 2).
    • کلید امضای برنامه موجود (گزینه 2، 3 و 4) را با انتخاب روش صادرات و آپلود که مناسب شماست، آپلود کنید. پس از بارگذاری کلید امضای برنامه و گواهی عمومی آن، می توانید از کلید امضای برنامه به عنوان کلید امضای برنامه استفاده کنید.

توجه داشته باشید.برای ادامه، باید شرایط استفاده را بپذیرید و در برنامه امضای برنامه ثبت نام کنید.

مرحله 3: کلید امضای برنامه خود را با ارائه دهندگان API ثبت کنید

اگر برنامه شما از یک API استفاده می کند، برای احراز هویت، به احتمال زیاد نیاز به ثبت یک گواهی کلیدی دارید که Google برنامه شما را با آن امضا می کند. برای یافتن گواهی:

  1. وارد کنسول Play شوید.
  2. یک برنامه کاربردی را انتخاب کنید.
  3. از منوی سمت چپ، را انتخاب کنید مدیریت انتشار > امضاهای برنامه.
    • اگر ارائه‌دهنده API به نوع دیگری از اثر انگشت نیاز دارد، می‌توانید گواهی اصلی را با فرمت DER دانلود کرده و در صورت نیاز با استفاده از ابزارهای مناسب، آن را تبدیل کنید.
برنامه های کاربردی منتشر شده

مرحله 1: برای برنامه امضای برنامه Google Play ثبت نام کنید

  1. وارد کنسول Play شوید.
  2. یک برنامه کاربردی را انتخاب کنید.
  3. از منوی سمت چپ، را انتخاب کنید مدیریت انتشار > امضاهای برنامه.
  4. در صورت لزوم، شرایط استفاده را بخوانید و کلیک کنید تایید کنید.

مرحله 2 کلید اصلی را به Google ارسال کنید و یک کلید آپلود ایجاد کنید

  1. کلید اصلی امضای برنامه را پیدا کنید.
  2. وارد کنسول Play شوید.
  3. یک برنامه کاربردی را انتخاب کنید.
  4. از منوی سمت چپ، را انتخاب کنید مدیریت انتشار > امضاهای برنامه.
  5. کلید امضای برنامه موجود خود را به روشی که به بهترین وجه با فرآیند انتشار شما سازگار است آپلود کنید.
  1. و گواهی را در گوگل پلی آپلود کنید.
    • همچنین می توانید از کلید امضای برنامه به عنوان کلید آپلود استفاده کنید.
  2. انگشت شست (MD5، SHA-1 و SHA-256) گواهی امضای برنامه را کپی کنید.
    • برای اهداف آزمایشی، ممکن است لازم باشد با استفاده از اثر انگشت گواهی و کلید امضای برنامه، گواهینامه کلید آپلود را با ارائه دهنده API ثبت کنید.

مرحله 4: به روز رسانی بعدی برنامه خود را با یک کلید آپلود امضا کنید

به‌روزرسانی‌های برنامه‌ای که منتشر می‌شوند باید با کلید دانلود امضا شوند.

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

می‌توانید هنگام ثبت‌نام برای برنامه امضای برنامه در Google Play یک کلید آپلود ایجاد کنید، یا می‌توانید بعداً در این بخش کلیدی را ایجاد کنید. مدیریت انتشار > امضاهای برنامه.

برای ایجاد یک کلید آپلود، مراحل زیر را دنبال کنید:

  1. دستورالعمل های سایت توسعه دهندگان اندروید را دنبال کنید. کلید را در جای امنی نگه دارید.
  2. گواهی کلید بوت را در قالب PEM صادر کنید. آرگومان های زیر را با خط زیر جایگزین کنید:
    • $ keytool -export -rfc -keystore upload-keystore.jks -نام مستعار آپلود -فایل upload_certificate.pem
  3. هنگامی که در طول فرآیند انتشار از شما خواسته شد، گواهی را برای ثبت آن در Google آپلود کنید.

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

  • کلید آپلود فقط برای احراز هویت سازنده برنامه در Google ثبت شده است.
  • امضای شما از همه APK های آپلود شده قبل از اینکه به دست کاربران برسد حذف می شود.
محدودیت های
  • کلید آپلود باید از رمزگذاری RSA استفاده کند و باید حداقل 2048 بیت اندازه داشته باشد.
  • کلیدهای DSA و EC و کلیدهای RSA کوچکتر از 2048 بیت پشتیبانی نمی شوند.
به روز رسانی فروشگاه های کلید

هنگامی که کلید بوت خود را ایجاد کردید، مکان های زیر را در صورت نیاز بررسی و به روز کنید:

  • سیستم محلی؛
  • سرور محلی امن (با لیست های کنترل دسترسی مختلف)؛
  • سیستم ابری (با لیست های کنترل دسترسی مختلف)؛
  • خدمات ویژه برای مدیریت کلید؛
  • مخازن Git

نحوه به روز رسانی کلید امضا برای نصب برنامه های جدید

در برخی موارد، می‌توانید درخواست به‌روزرسانی کلید امضای برنامه را بدهید. کلید جدید برای امضای نصب‌ها و به‌روزرسانی‌های جدید در برنامه استفاده می‌شود، در حالی که کلید قدیمی برای به‌روزرسانی نسخه‌های امضاشده که کاربران قبلاً نصب کرده‌اند استفاده می‌شود.

کلید امضا فقط یک بار در هر برنامه به روز می شود. در موارد بعید که از کلید امضای یکسانی برای اجرای چندین برنامه در یک فرآیند استفاده می کنید، کلید نمی تواند به روز شود.

در موارد زیر باید درخواست به روز رسانی کلید امضای برنامه را داشته باشید:

  • شما به یک کلید رمزنگاری قوی تری نیاز دارید.
  • کلید امضای برنامه به خطر افتاده است.

توجه داشته باشید.درخواست به‌روزرسانی کلید امضای برنامه در کنسول Play به تعویض کلید در Android P و نسخه‌های جدیدتر مربوط نمی‌شود. این جایگزینی کلید در حال حاضر توسط Google Play پشتیبانی نمی‌شود.

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

قبل از درخواست به‌روزرسانی کلید، مهم است که بدانیم چه تغییراتی در پی خواهد داشت.

  • اگر از کلید امضای یکسانی برای چندین برنامه برای استفاده از یک کد یا داده استفاده می‌کنید، باید برنامه‌ها را به‌روزرسانی کنید تا هم کلید جدید و هم کلید قدیمی را تشخیص دهند.
  • اگر برنامه شما از یک API استفاده می‌کند، حتماً گواهی‌ها را برای کلیدهای امضای برنامه جدید و قدیمی قبل از به‌روزرسانی، با ارائه‌دهنده API ثبت کنید. گواهی ها در صفحه موجود است امضای برنامهکنسول بازی.
  • اگر بسیاری از کاربران برنامه شما به‌روزرسانی‌ها را از طریق شبکه‌های اشتراک‌گذاری فایل نصب کنند، فقط می‌توانند به‌روزرسانی‌هایی را نصب کنند که با کلیدی مشابه برنامه نصب شده در دستگاه‌هایشان امضا شده‌اند. اگر برنامه ها نمی توانند به روز شوند زیرا نسخه نصب شدهبا یک کلید دیگر امضا شده است، کاربران می توانند آن را حذف نصب کرده و دوباره نصب کنند تا به روز رسانی ها را دریافت کنند.
درخواست به روز رسانی کلید برای نصب های جدید. برای انجام این کار؛ این موارد را دنبال کنید:
  1. وارد کنسول Play شوید.
  2. یک برنامه کاربردی را انتخاب کنید.
  3. از منوی سمت چپ، را انتخاب کنید مدیریت انتشار > امضاهای برنامه.
  4. در کارت «به‌روزرسانی کلید امضا برای نصب‌های برنامه جدید»، را انتخاب کنید درخواست به روز رسانی کلید.
  5. انتخاب کنید که با دستگاه چه کاری انجام دهید.
    • بسته به گزینه ای که انتخاب می کنید، ممکن است مجبور شوید برای تکمیل درخواست خود با پشتیبانی تماس بگیرید.
  6. به Google Play اجازه دهید یک کلید امضای برنامه جدید ایجاد کند (توصیه می شود) یا یکی را دانلود کنید.
    • پس از به‌روزرسانی کلید امضای برنامه، اگر کلید همان کلید آپلود بود، می‌توانید همچنان از کلید امضای برنامه قدیمی به عنوان کلید آپلود استفاده کنید یا یک کلید جدید ایجاد کنید.
  • اگر برنامه خود را خارج از Google Play نیز منتشر کرده‌اید، یا قصد انجام این کار را دارید، می‌توانید یک کلید امضای برنامه از قبل به اشتراک گذاشته شده ایجاد کنید و هنگام ثبت‌نام در برنامه امضای برنامه Google Play آن را در Google آپلود کنید.
  • برای محافظت از حساب خود، تأیید دو مرحله ای را روشن کنیدبرای همه حساب هایی که به کنسول Play دسترسی دارند.
  • هنگامی که یک App Bundle در نسخه آزمایشی یا تولیدی منتشر شد، می‌توانید مرورگر App Bundle را باز کنید و بایگانی ZIP حاوی همه فایل‌های APK را برای یک دستگاه خاص دانلود کنید. این فایل‌های APK قبلاً با کلید امضای برنامه امضا شده‌اند. با استفاده از این ابزار می توانید آنها را از بایگانی ZIP روی دستگاه نصب کنید خط فرمانابزار بسته بندی
  • برای امنیت بیشتر، یک کلید آپلود جدید ایجاد کنید که با کلید امضای برنامه متفاوت است.
  • اگر می‌خواهید یک APK امضا شده با کلید آپلود را آزمایش کنید، کلید را با یک سرویس یا API که از امضای برنامه برای احراز هویت استفاده می‌کند (مانند Google Maps API یا Facebook SDK) ثبت کنید.
  • اگر از APIهای Google استفاده می‌کنید، می‌توانید گواهی بارگذاری را در Google Cloud Console ثبت کنید.

در صورت گم شدن یا هک شدن کلید چه باید کرد؟

اگر دسترسی به کلید آپلود خصوصی خود را از دست داده اید یا هک شده است، از مالک حساب خود بپرسید. هنگام تماس با پشتیبانی، مالک حساب باید فایل upload_certificate.pem را پیوست کند.

هنگامی که تیم پشتیبانی یک کلید آپلود جدید را ثبت می‌کند، یک ایمیل دریافت می‌کنید و سپس می‌توانید فروشگاه‌های کلید را به‌روزرسانی کنید و کلید را با ارائه‌دهندگان API ثبت کنید.

مهم!بازنشانی کلید آپلود بر کلید امضای برنامه که Google Play برای امضای فایل‌های APK قبل از ارسال به کاربران استفاده می‌کند، تأثیری نمی‌گذارد.

آیا این اطلاعات مفید بود؟

چگونه می توان این مقاله را بهبود بخشید؟

گاهی اوقات برخی از برنامه های اندروید به دلایلی مناسب کاربر نیستند. یک مثال تبلیغات آزاردهنده است. و این طور اتفاق می افتد - همه در برنامه خوب هستند ، اما فقط ترجمه در آن یا کج است یا کاملاً وجود ندارد. یا مثلا برنامه آزمایشی است ولی راهی برای دریافت نسخه کامل وجود ندارد. چگونه شرایط را تغییر دهیم؟

معرفی

در این مقاله، ما در مورد نحوه جدا کردن یک APK با یک برنامه، نگاهی به ساختار داخلی آن، جداسازی و کامپایل کردن بایت کد، و همچنین تلاش برای ایجاد چندین تغییر در برنامه های کاربردی که می توانند این یا آن مزیت را برای ما به ارمغان بیاورند، صحبت خواهیم کرد.

برای انجام همه این کارها، حداقل به دانش اولیه زبان جاوا، که برنامه های اندروید با آن نوشته می شوند، و زبان XML که در همه جای اندروید استفاده می شود - از توصیف خود برنامه و حقوق دسترسی آن گرفته تا ذخیره رشته ها نیاز دارید. که روی صفحه نمایش داده خواهد شد. همچنین به توانایی کار با نرم افزار کنسول تخصصی نیاز خواهید داشت.

بنابراین، بسته APK که در آن کاملاً همه نرم افزارهای اندرویدی توزیع شده است چیست؟

حذف کامپایل برنامه

در مقاله، ما فقط با کد برنامه جدا شده کار کردیم، با این حال، اگر تغییرات جدی تری در برنامه های بزرگ ایجاد کنید، درک کد smali بسیار دشوارتر خواهد بود. خوشبختانه، می‌توانیم کد dex را به کد جاوا تبدیل کنیم، که اگرچه اصلی نیست و قابل کامپایل نیست، اما خواندن و درک منطق برنامه بسیار آسان‌تر است. برای این کار به دو ابزار نیاز داریم:

  • dex2jar - مترجم بایت کد Dalvik به بایت کد JVM که بر اساس آن می توانیم کد جاوا را دریافت کنیم.
  • jd-gui خود یک دیکامپایلر است که به شما امکان می دهد کد جاوا قابل خواندن را از بایت کد JVM دریافت کنید. از طرف دیگر، می توانید از Jad (www.varanecas.com/jad) استفاده کنید. اگرچه بسیار قدیمی است، اما در برخی موارد کد خواناتری نسبت به Jd-gui تولید می کند.

آنها باید اینگونه استفاده شوند. ابتدا dex2jar را راه اندازی می کنیم و مسیر بسته apk را به عنوان آرگومان مشخص می کنیم:

%dex2jar.sh mail.apk

در نتیجه، بسته جاوا mail.jar در دایرکتوری فعلی ظاهر می‌شود که می‌توان آن را در jd-gui برای مشاهده کد جاوا باز کرد.

تنظیم بسته های APK و دریافت آنها

بسته نرم افزار اندروید در اصل یک فایل ZIP معمولی است که برای مشاهده محتویات و باز کردن بسته بندی نیازی به ابزار خاصی ندارد. کافی است یک آرشیو داشته باشید - 7zip برای ویندوز یا کنسول unzip در لینوکس. اما این در مورد لفاف است. داخلش چیه؟ در داخل، ما به طور کلی ساختار زیر را داریم:

  • META-INF/- حاوی یک گواهی دیجیتالی از برنامه است که سازنده آن را تأیید می کند، و جمع های چک فایل های بسته.
  • res/ - منابع مختلفی که برنامه در کار خود از آنها استفاده می کند، مانند تصاویر، توصیفی از رابط و سایر داده ها.
  • AndroidManifest.xml- شرح برنامه این شامل، برای مثال، لیست مجوزهای مورد نیاز، نسخه مورد نیاز Android و وضوح صفحه نمایش مورد نیاز است.
  • classes.dex- بایت کد برنامه کامپایل شده برای ماشین مجازی Dalvik.
  • منابع.arsc- همچنین منابع، اما از نوع متفاوت - به ویژه، رشته ها (بله، این فایل را می توان برای Russification استفاده کرد!).

فایل‌ها و دایرکتوری‌های فهرست‌شده، اگر نه در همه، در اکثریت قریب به اتفاق APK‌ها هستند. با این حال، چند فایل/دایرکتوری کمتر رایج وجود دارد که قابل ذکر است:

  • دارایی های- آنالوگ منابع تفاوت اصلی این است که برای دسترسی به یک منبع، باید شناسه آن را بدانید، در حالی که لیست دارایی ها را می توان به صورت پویا با استفاده از متد AssetManager.list() در کد برنامه به دست آورد.
  • lib- کتابخانه های بومی لینوکس که با کمک NDK (Native Development Kit) نوشته شده اند.

این دایرکتوری توسط سازندگان بازی برای قرار دادن موتور بازی خود به زبان C/C++ و همچنین سازندگان برنامه‌های کاربردی با کارایی بالا استفاده می‌شود (به عنوان مثال، گوگل کروم). دستگاه را فهمید. اما چگونه می توان فایل پکیج اپلیکیشن مورد نظر را دریافت کرد؟ از آنجایی که دریافت فایل‌های APK از دستگاه بدون روت کردن امکان‌پذیر نیست (آنها در فهرست / داده / برنامه هستند)، و روت کردن همیشه توصیه نمی‌شود، حداقل سه راه برای دریافت فایل برنامه به رایانه وجود دارد:

  • پسوند APK Downloader برای کروم.
  • برنامه واقعی APK Leecher.
  • میزبانی فایل های مختلف و warezniki.

استفاده از کدام یک موضوع سلیقه ای است. ما ترجیح می دهیم از برنامه های جداگانه استفاده کنیم، بنابراین استفاده از Real APK Leecher را شرح خواهیم داد، به خصوص که در جاوا نوشته شده است و بر این اساس، حتی در ویندوز، حتی در nix نیز کار خواهد کرد.

پس از شروع برنامه، باید سه قسمت ایمیل، رمز عبور و شناسه دستگاه را پر کنید و یک زبان را انتخاب کنید. دو مورد اول ایمیل و رمز عبور حساب Google شما هستند که در دستگاه استفاده می کنید. سومین شناسه دستگاه است و با شماره گیری کد روی شماره گیر می توانید آن را دریافت کنید # #8255## و سپس خط شناسه دستگاه را پیدا کنید. هنگام پر کردن، فقط باید شناسه را بدون پیشوند android وارد کنید.

پس از پر کردن و ذخیره کردن، اغلب پیام "خطا هنگام اتصال به سرور" ظاهر می شود. هیچ ربطی به Google Play ندارد، بنابراین با خیال راحت آن را نادیده بگیرید و به دنبال بسته های مورد علاقه خود بگردید.

بررسی و اصلاح

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

  • بایگانی ZIPبرای باز کردن و بسته بندی؛
  • کوچک- اسمبلر/جداساز بایت کد ماشین مجازی دالویک (code.google.com/p/smali)؛
  • aapt- ابزاری برای بسته بندی منابع (به طور پیش فرض، منابع به شکل باینری برای بهینه سازی عملکرد برنامه ذخیره می شوند). همراه با Android SDK، اما می توان به طور جداگانه به دست آورد.
  • امضا کننده- ابزاری برای امضای دیجیتالی یک بسته اصلاح شده (bit.ly/Rmrv4M).

می توانید از همه این ابزارها به طور جداگانه استفاده کنید، اما این کار ناخوشایند است، بنابراین بهتر است از نرم افزارهای سطح بالاتر ساخته شده بر اساس آنها استفاده کنید. اگر از Linux یا Mac OS X استفاده می کنید، ابزاری به نام apktool وجود دارد. این به شما امکان می دهد منابع را به شکل اصلی خود باز کنید (از جمله فایل های XML باینری و arsc)، بسته را با منابع اصلاح شده بازسازی کنید، اما نمی داند چگونه بسته ها را امضا کند، بنابراین باید ابزار امضا کننده را به صورت دستی اجرا کنید. با وجود این واقعیت که ابزار به زبان جاوا نوشته شده است، نصب آن نسبتاً غیر استاندارد است. ابتدا باید خود فایل jar را دریافت کنید:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

اگر روی ویندوز کار می کنید، یک ابزار عالی برای آن به نام Virtual Ten Studio وجود دارد که تمام این ابزارها (از جمله خود apktool) را نیز جمع آوری می کند، اما به جای یک رابط CLI، یک رابط گرافیکی بصری در اختیار کاربر قرار می دهد تا با آن عملیات باز کردن، جداسازی و کامپایل کردن را با چند کلیک انجام دهید. این ابزار Donation-ware است، یعنی گاهی اوقات ویندوز با یک پیشنهاد برای دریافت مجوز ظاهر می شود، اما در نهایت می توان این را تحمل کرد. توصیف آن بی معنی است، زیرا می توانید در عرض چند دقیقه رابط کاربری را درک کنید. اما apktool با توجه به کنسولی بودنش باید بیشتر مورد بحث قرار گیرد.


گزینه های apktool را در نظر بگیرید. به طور خلاصه، سه دستور اصلی وجود دارد: d (decode)، b (build) و if (install frame). اگر با دو دستور اول همه چیز مشخص است، پس فرمان سوم یعنی عملگر شرطی چه می کند؟ این فریم ورک UI مشخص شده را باز می کند، که در هنگام تجزیه یک بسته سیستم مورد نیاز است.

جالب ترین گزینه های دستور اول را در نظر بگیرید:

  • -s- فایل های dex را از هم جدا نکنید.
  • -r- منابع را باز نکنید.
  • - اطلاعات اشکال زدایی را در نتایج جداسازی فایل dex وارد نکنید.
  • -- فریم مسیر- از چارچوب UI مشخص شده به جای apktool داخلی استفاده کنید. اکنون چند گزینه برای دستور b در نظر بگیرید:
  • - مونتاژ اجباری بدون بررسی تغییرات؛
  • - اگر به دلایلی می خواهید از منبع دیگری استفاده کنید، مسیر aapt (ابزار ساخت بایگانی APK) را مشخص کنید.

استفاده از apktool بسیار ساده است، تنها کاری که باید انجام دهید این است که یکی از دستورات و مسیر APK را مشخص کنید، به عنوان مثال:

$ apktool d mail.apk

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

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

البته تئوری خوب است، اما اگر نمی دانیم با بسته بسته بندی نشده چه کنیم، چرا به آن نیاز است؟ بیایید سعی کنیم تئوری را به نفع خودمان اعمال کنیم، یعنی برخی از نرم افزارها را اصلاح می کنیم تا به ما تبلیغات نشان ندهد. به عنوان مثال، اجازه دهید مشعل مجازی باشد - یک مشعل مجازی. برای ما، این نرم افزار عالی است، زیرا پر از تبلیغات مزاحم است و به اندازه کافی ساده است که در وحشی کد گم نشوید.


پس با استفاده از یکی از روش های بالا اپلیکیشن را از بازار دانلود کنید. اگر تصمیم دارید از Virtuous Ten Studio استفاده کنید، کافی است فایل APK را در برنامه باز کنید و آن را از بسته بندی خارج کنید، برای آن یک پروژه (File -> New project) ایجاد کنید، سپس در منوی زمینهپروژه، Import File را انتخاب کنید. اگر انتخاب شما روی apktool افتاد، کافی است یک دستور را اجرا کنید:

$ apktool d com.kauf.particle.virtualtorch.apk

پس از آن، یک درخت فایل در دایرکتوری com.kauf.particle.virtualtorch ظاهر می شود، مشابه آنچه در بخش قبل توضیح داده شد، اما به جای فایل های dex و یک فایل apktool.yml، یک فهرست smali اضافی دارد. مورد اول حاوی کد جدا شده فایل dex اجرایی برنامه است، مورد دوم حاوی اطلاعات سرویس مورد نیاز apktool برای جمع آوری بسته است.

اولین جایی که باید به آن نگاه کنیم، البته AndroidManifest.xml است. و در اینجا بلافاصله با خط زیر روبرو می شویم:

به راحتی می توان حدس زد که او مسئول اعطای مجوزهای برنامه برای استفاده از اتصال اینترنت است. در واقع، اگر فقط بخواهیم از شر تبلیغات خلاص شویم، به احتمال زیاد کافی است که اپلیکیشن را از اینترنت ممنوع کنیم. بیایید سعی کنیم آن را انجام دهیم. خط مشخص شده را حذف کنید و سعی کنید نرم افزار را با استفاده از apktool کامپایل کنید:

$ apktool b com.kauf.particle.virtualtorch

فایل APK به دست آمده در دایرکتوری com.kauf.particle.virtualtorch/build/ ظاهر می شود. با این حال، نمی‌توان آن را نصب کرد زیرا دارای امضای دیجیتال و جمع‌بندی فایل‌ها نیست (به سادگی یک فهرست META-INF/ ندارد). ما باید بسته را با ابزار apk-signer امضا کنیم. راه اندازی شد. رابط از دو تب تشکیل شده است - در اول (Key Generator) کلیدها را ایجاد می کنیم ، در دوم (APK Signer) امضا می کنیم. برای ایجاد کلید خصوصی، فیلدهای زیر را پر کنید:

  • فایل هدف- فایل خروجی ذخیره کلید. معمولاً یک جفت کلید را ذخیره می کند.
  • کلمه عبورو تایید- رمز عبور برای ذخیره سازی؛
  • نام مستعار- نام کلید در مخزن؛
  • رمز عبور مستعارو تایید- رمز عبور کلید مخفی؛
  • اعتبار- مدت اعتبار (به سال). مقدار پیش فرض بهینه است.

فیلدهای باقی مانده، به طور کلی، اختیاری هستند - اما باید حداقل یکی را پر کنید.


هشدار

برای امضای برنامه با apk-signer، باید Android SDK را نصب کرده و مسیر کامل آن را در تنظیمات برنامه مشخص کنید.

تمام اطلاعات فقط برای مقاصد اطلاعاتی ارائه شده است. نه سردبیران و نه نویسنده مسئولیتی در قبال آسیب احتمالی ناشی از مطالب این مقاله ندارند.

اکنون می توانید APK را با این کلید امضا کنید. در تب APK Signer، فایل جدید تولید شده را انتخاب کنید، رمز عبور، نام مستعار کلیدی و رمز عبور آن را وارد کنید، سپس فایل APK را پیدا کنید و با جسارت روی دکمه "Sign" کلیک کنید. اگر همه چیز خوب پیش برود، بسته امضا خواهد شد.

اطلاعات

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

فقط نرم افزارهای شخص ثالث به امضای دیجیتال نیاز دارند، بنابراین اگر برنامه های سیستمی را که با کپی کردن آنها در فهرست /system/app/ نصب شده اند تغییر می دهید، نیازی به امضای آنها ندارید.

پس از آن، بسته را روی گوشی هوشمند می اندازیم، نصب و اجرا می کنیم. Voila، آگهی از بین رفته است! اما در عوض، پیامی ظاهر شد که ما اینترنت نداریم یا مجوزهای مناسب را نداریم. در تئوری، این می تواند کافی باشد، اما پیام آزاردهنده به نظر می رسد، و صادقانه بگویم، ما فقط با یک برنامه احمقانه خوش شانس بودیم. یک نرم افزار خوب نوشته شده به احتمال زیاد اعتبار خود را روشن می کند یا اتصال اینترنت را بررسی می کند و در غیر این صورت به سادگی از شروع به کار خودداری می کند. چگونه در این مورد باشیم؟ البته کد را ویرایش کنید.

به طور معمول، نویسندگان برنامه، کلاس‌های ویژه‌ای را برای نمایش تبلیغات و روش‌های فراخوانی این کلاس‌ها در طول راه‌اندازی برنامه یا یکی از «فعالیت‌های» آن (به عبارت ساده، صفحه‌های برنامه) ایجاد می‌کنند. بیایید سعی کنیم این کلاس ها را پیدا کنیم. ما به دایرکتوری smali می رویم، سپس com (در org فقط کتابخانه گرافیکی باز cocos2d وجود دارد)، سپس kauf (دقیقا آنجا، زیرا این نام توسعه دهنده است و تمام کدهای او آنجا هستند) - و اینجاست، دایرکتوری بازاریابی در داخل ما تعداد زیادی فایل با پسوند smali پیدا می کنیم. اینها کلاس هایی هستند و قابل توجه ترین آنها کلاس Ad.smali است که با نام آن به راحتی می توان حدس زد که تبلیغات را نمایش می دهد.

ما می‌توانیم منطق کار آن را تغییر دهیم، اما حذف احمقانه تماس‌های هر یک از روش‌های آن از خود برنامه بسیار ساده‌تر است. بنابراین، از دایرکتوری بازاریابی خارج می شویم و به دایرکتوری ذرات همسایه و سپس به virtualtorch می رویم. فایل MainActivity.smali در اینجا شایسته توجه ویژه است. این یک کلاس استاندارد اندروید است که توسط Android SDK تولید شده و به عنوان نقطه ورود به برنامه (مشابه عملکرد اصلی در C) تنظیم شده است. فایل را برای ویرایش باز کنید.

داخل کد اسمالی (اسمبلر محلی) است. به دلیل ماهیت سطح پایین آن، خواندن آن نسبتاً گیج کننده و دشوار است، بنابراین ما آن را مطالعه نمی کنیم، بلکه به سادگی تمام موارد ذکر شده از کلاس Ad را در کد پیدا می کنیم و آنها را نظر می دهیم. ما در رشته "Ad" در جستجو رانندگی می کنیم و به خط 25 می رسیم:

آگهی خصوصی فیلد:Lcom/kauf/marketing/Ad;

در اینجا، یک آگهی فیلد برای ذخیره یک شی از کلاس Ad ایجاد می شود. با قرار دادن علامت ## در جلوی خط نظر می دهیم. ما به جستجو ادامه می دهیم. خط 423:

نسخه جدید نسخه 3، Lcom/kauf/marketing/Ad.

اینجا جایی است که شی ایجاد می شود. نظر می دهیم. جستجو را ادامه می دهیم و در خطوط 433، 435، 466، 468، 738، 740، 800 و 802 فراخوانی متدهای کلاس Ad را پیدا می کنیم. نظر می دهیم. بنظر همینه پس انداز می کنیم. اکنون بسته باید دوباره مونتاژ شود و عملکرد آن و وجود تبلیغات بررسی شود. برای خلوص آزمایش، خط حذف شده از AndroidManifest.xml را برمی گردانیم، بسته را جمع آوری می کنیم، آن را امضا می کنیم و آن را نصب می کنیم.

خوکچه هندی ما تبلیغات قابل مشاهده

اوپ-پا! تبلیغات تنها زمانی که برنامه در حال اجرا بود ناپدید شد، اما در منوی اصلی باقی ماند، که هنگام راه اندازی نرم افزار مشاهده می کنیم. بنابراین، صبر کنید، اما نقطه ورودی کلاس MainActivity است، و تبلیغات در حالی که برنامه در حال اجرا بود ناپدید شد، اما در منوی اصلی باقی ماند، بنابراین نقطه ورودی متفاوت است؟ برای آشکار کردن نقطه ورودی واقعی، فایل AndroidManifest.xml را دوباره باز می کنیم. و بله، شامل خطوط زیر است:

آنها به ما (و مهمتر از آن اندروید) می گویند که فعالیتی با نام Start باید در پاسخ به تولید هدف (رویداد) android.intent.action.MAIN از دسته android.intent.category.LAUNCHER راه اندازی شود. این رویداد زمانی ایجاد می‌شود که روی نماد برنامه در راه‌انداز ضربه بزنید، بنابراین نقطه ورودی، یعنی کلاس Start را مشخص می‌کند. به احتمال زیاد، برنامه نویس ابتدا یک برنامه بدون منوی اصلی نوشت که نقطه ورود به آن کلاس استاندارد MainActivity بود و سپس یک پنجره (اکتیویتی) جدید حاوی یک منو و توضیح در کلاس Start اضافه کرد و به صورت دستی آن را وارد کرد. نقطه.

فایل Start.smali را باز می کنیم و دوباره به دنبال خط "Ad" می گردیم، در خطوط 153 و 155 به کلاس FirstAd اشاره می کنیم. همچنین در کد منبع وجود دارد و با قضاوت از روی نام، وظیفه نمایش تبلیغات در صفحه اصلی را بر عهده دارد. ما بیشتر نگاه می کنیم، یک نمونه از کلاس FirstAd و یک intent، با توجه به زمینه مربوط به این نمونه، وجود دارد، و سپس برچسب cond_10، که انتقال شرطی به آن دقیقاً قبل از ایجاد یک نمونه از کلاس انجام می شود. :

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

به احتمال زیاد، برنامه به نوعی به طور تصادفی محاسبه می کند که آیا لازم است تبلیغات در صفحه اصلی نشان داده شود یا خیر، و اگر نه، مستقیماً به cond_10 می پرد. خوب، بیایید کار او را ساده کنیم و انتقال شرطی را با یک تغییر شرطی جایگزین کنیم:

#if-ne p1, v0, :cond_10 goto:cond_10

دیگر هیچ اشاره ای به FirstAd در کد وجود ندارد، بنابراین فایل را می بندیم و مشعل مجازی خود را با استفاده از apktool دوباره جمع می کنیم. در گوشی هوشمند کپی کنید، نصب کنید، اجرا کنید. Voila، همه تبلیغات از بین رفته اند، به همه ما تبریک می گویم.

نتایج

این مقاله تنها معرفی مختصری از روش های باز کردن و اصلاح اپلیکیشن های اندروید است. بسیاری از مسائل در پشت صحنه باقی ماندند، مانند حذف حفاظت، تجزیه کد مبهم، ترجمه و جایگزینی منابع برنامه، و همچنین اصلاح برنامه های نوشته شده با با استفاده از اندروید NDK. با این حال، داشتن دانش اولیه، درک همه اینها فقط یک موضوع زمان است.

بازدید پست: 5 618

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

اگر از سیستم ساخت استفاده می کنید گریدبرای ایجاد برنامه های کاربردی خود، همچنین می توانید چند گزینه برای ایجاد امضا برای برنامه های خود تنظیم کنید.

احتمالاً نمی خواهید کلیدهای امضا، رمز عبور و نام کاربری خود را در یک مخزن عمومی (یا حتی خصوصی) منتشر کنید. بنابراین، می توانید کلید، رمز عبور و نام کاربری را به عنوان ویژگی در یک فایل جداگانه تعریف کنید.

قبل از شروع امضای برنامه، باید یک ویژگی جدید در فایل gradle.properties ایجاد کنید. بیایید آن را صدا کنیم keys.repoو به عنوان یک مقدار، مسیر پوشه ای را که در آن ذخیره کلید و فایل دارای خصوصیات متعاقباً در آن قرار می گیرد، مشخص کنید (به عنوان مثال، C:/Users/UserName/.signing).

Keys.repo=C:/Users/UserName/.signing

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

RELEASE_STORE_FILE=/YourProjectName/KeyStoreName.jks RELEASE_STORE_PASS=****** RELEASE_ALIAS=نام مستعار کلیدی‎RELEASE_KEY_PASS=******

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

اگر فروشگاه کلید ندارید، می توانید به راحتی با استفاده از Android Studio یکی ایجاد کنید. برای انجام این کار، آیتم منو را انتخاب کنید ساختن -> ایجاد APK امضا شده.

در پنجره ای که ظاهر می شود، کلیک کنید ایجاد جدید...در نتیجه پنجره ای باز می شود که در آن می توانید محل ذخیره کلید را مشخص کنید (برای این درس بهتر است بلافاصله مسیری را که در آن مشخص کرده اید انتخاب کنید. YourProjectName.propertiesدر ملک RELEASE_STORE_FILE) و همچنین داده های مربوط به کلید.

سپس باید یک پوشه ایجاد کنید YourProjectNameو فایل keystore مورد نظر را به آنجا منتقل کنید.

اکنون می توانید مستقیماً به فرآیند امضاء بروید. برای انجام این کار، در پروژه خود باید فایل را باز کنید build.gradle(در پوشه برنامه قرار دارد). داخل آن در بلوک اندرویدباید کد زیر را اضافه کنید

SigningConfigs ( اشکال زدایی ( /* بدون تغییر در اینجا */ ) انتشار ( if (project.hasProperty("Keys.repo")) (def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties " ) if (projectPropsFile.exists()) ( Properties props = new Properties() props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") + props["RELEASE_STORE_FILE"] ) ) storePassword props["RELEASE_STORE_PASS"] keyAlias ​​props["RELEASE_ALIAS"] keyPassword props["RELEASE_KEY_PASS"] ) ) other (println "==================== = =============================== "Println" - لطفاً محیط سازش انتشار را پیکربندی کنید - به عنوان مثال در ~/. امضای دایرکتوری" println "============================================== ========" )))

طرح های امضا چیست؟

دو طرح برای به دست آوردن امضای APK وجود دارد: v1 JARو v2 کامل APK.

در حالت اول، امضا کنید شیشه-file که روش سنتی امضا است. امضای v1 از برخی از بخش‌های APK، مانند ابرداده ZIP محافظت نمی‌کند. تأییدکننده APK باید بسیاری از ساختارهای داده غیرقابل اعتماد (هنوز تأیید نشده) را مدیریت کند و سپس داده‌هایی را که امضا نشده‌اند دور بریزد و فضای زیادی برای حمله باقی بگذارد. علاوه بر این، تأیید کننده APK باید تمام رکوردهای فشرده شده را از حالت فشرده خارج کند، که باعث هدر رفتن زمان و حافظه زیادی می شود. برای پرداختن به این مشکلات، دومین APK schema v2 Full توسعه داده شد.

Schema v2 در معرفی شد Android 7.0 Nougat (API 25)و از زمان نسخه کار می کند اندروید استودیو 2.2و پلاگین اندروید Gradle 2.2. این طرح نصب سریعتر برنامه و محافظت خوب در برابر تغییرات غیرمجاز در APK را فراهم می کند. محتوای APK هش و امضا می شود و سپس دریافت می شود بلوک امضای APKدر APK قرار داده شده است.

در طول اعتبارسنجی، طرح v2 با APK به عنوان یک لکه برخورد می کند و تأیید امضا را در کل فایل انجام می دهد. هر گونه تغییر در APK، از جمله اصلاحات در فراداده ZIP، امضا را باطل می کند. این شکل از تأیید بسیار سریعتر است و اجازه می دهد تا تغییرات غیرمجاز بیشتری شناسایی شود.

فرمت جدید با عقب سازگار است، بنابراین فایل‌های APK امضا شده با طرح جدید را می‌توان در دستگاه‌های قدیمی‌تر (که به سادگی امضای جدید را نادیده می‌گیرند) نصب کرد تا زمانی که آن APKها با طرح v1 نیز امضا شده باشند.

Signing به طور پیش‌فرض از هر دو طرح استفاده می‌کند تا برنامه‌ها روی هر دستگاهی نصب شوند. با این حال، در صورت لزوم، می توانید امضای v1 یا v2 را غیرفعال کنید. برای این کار در کد بالا در بلوک رهاییفقط خطوط زیر را اضافه کنید

V1SigningEnabled false

V2SigningEnabled false

همچنین مهم است که توجه داشته باشید که قبل از امضای با طرح v2 باید با طرح v1 امضا کنید، زیرا APK پس از امضای با طرح v2، اگر با گواهی‌های اضافی امضا شود، v2 را پاس نمی‌کند.

پس از اضافه شدن کد، این کد را در بلوک نشان دهید buildTypesداخل رهایی. مثلا:

BuildTypes ( انتشار ( minifyEnabled true shrinkResources proguardFiles true getDefaultProguardFile ("proguard-android.txt")، "proguard-rules.pro" signingConfig signingConfigs.release) )

اکنون می توانید با خیال راحت در آیتم منو ساختنانتخاب کنید APK بسازید، که قبلاً نوع مونتاژ را تغییر داده اید اشکال زداییبر رهایی. همانطور که می بینید، این روش از این نظر راحت است که خودکار است، فقط یک بار باید پیکربندی شود و کیبوردهای شما می توانند ایمن باشند.

بنابراین، شما روزها (و شاید شب ها) کار کرده اید و اکنون اولین اپلیکیشن هیبریدی موبایل شما آماده است. کاملاً پایدار است، اکثر اشکالات مهم بسته هستند. موارد کوچکی باقی مانده است، اما با یادآوری اینکه کمال گرایی شیطانی است، با اراده قوی تصمیم می گیرید که برنامه را منتشر کنید.

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

انحراف کوچک

وقتی پروژه حیوان خانگی من به انتشار نزدیک شد، شروع به جستجوی اطلاعاتی در مورد چگونگی انتشار سریع و بدون دردسر یک برنامه کردم. بسیاری از دستورالعمل های یافت شده ساده به نظر می رسیدند. من دستورالعمل های نویسندگان چارچوب Ionic را انتخاب کردم که برنامه بر اساس آن توسعه یافته است. همه چیز در اولین بار درست نشد، چندین ویژگی وجود دارد. روند امضا در این مقاله توضیح داده شده است، نکات مهم برجسته شده است.

اطلاعات اولیه

من فرض می کنم شما همه چیز مورد نیاز خود را برای توسعه هیبریدی تنظیم کرده اید برنامه های موبایلبا استفاده از آپاچی کوردووا باید نصب شود:
  • آپاچی کوردووا
  • کیت توسعه جاوا
  • ابزار Android SDK
lcf به عنوان پروژه و نام برنامه استفاده می شود. در صورت لزوم نام پروژه خود را جایگزین کنید.

برو

ابتدا باید یک نسخه انتشار از اپلیکیشن خود ایجاد کنید. اما قبل از آن، بیایید مطمئن شویم که همه افزونه های غیر ضروری حذف شده اند. به عنوان مثال، ما نیازی به افزونه ای نداریم که اطلاعات اشکال زدایی را در کنسول چاپ کند. بیایید آن را حذف کنیم:

پلاگین $ cordova rm cordova-plugin-console
برای تولید نسخه انتشار برای اندروید، از دستور استفاده کنید ساختنبا پرچم --رهایی:

$ cordova build -- انتشار اندروید
این دستور ایجاد خواهد کرد بدون امضافایل APK در دایرکتوری:

پلتفرم‌ها/اندروید/build/outputs/apk
برای مثال پلتفرم‌ها/اندروید/build/outputs/apk/ android-release-unsigned.apk. سپس باید این فایل را امضا کنیم و برنامه کاربردی را اجرا کنیم زیپالاینبرای بهینه سازی و آماده سازی فایل برای گوگل پلی.

برای امضای فایل گواهینامه لازم است. بیایید آن را با استفاده از ابزار ایجاد کنیم ابزار کلیدیکه در JDK گنجانده شده است:

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 - اعتبار 10000
مهم

مقدار پارامتر -alias را باید به خاطر بسپارید، اما بهتر است آن را یادداشت کنید. در مثال بالا برابر است با lcf (با حروف اول نام اپلیکیشن Loyal Client Free). من در اینجا جزئیات نمی دهم، اگر علاقه مند هستید، در نظرات بنویسید، بیشتر به شما خواهم گفت.

نام مستعار هر بار هنگام امضا استفاده می شود * برنامه های کاربردی. برای راحت تر به خاطر سپردن، از نام فایل keystore به عنوان نام مستعار استفاده کنید، به عنوان مثال:


-keystore hello-world.keystore - مستعار hello-world -keystore weather-app.keystore - مستعار آب و هوا-app -keystore todo.keystore - مستعار todo
* شما باید برنامه را با هر انتشار به روز رسانی امضا کنید

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

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

1. رمز عبور keystore را وارد کنید:
در اینجا باید رمز عبور فایل (حداقل 6 کاراکتر) را وارد کنید. رمز عبور وارد شده باید در مکانی امن نوشته شود، هر بار هنگام امضای برنامه مورد نیاز است.

2. رمز عبور جدید را دوباره وارد کنید:
رمز عبور را مجدد وارد کنید.

3. نام و نام خانوادگی شما چیست؟
: ایوان پتروف
نام و نام خانوادگی شما. مقدار داخل پرانتز مقدار پیش فرض است.

4. نام واحد سازمانی شما چیست؟
: آی تی
نام بخش شرکت شما شما می توانید آن را خالی بگذارید، من IT را مشخص می کنم.

5. نام سازمان شما چیست؟
: 2 توسعه دهندگان
نام سازمان شما در صورت وجود مشخص کنید.

6. نام شهر یا محله شما چیست؟
: مسکو
نام شهر

7. نام ایالت یا استان شما چیست؟
: MO
نام منطقه

8. کد کشور دو حرفی این واحد چیست؟
: EN
کد کشور. من RU را نشان می دهم.

: y

تأیید کنید که آیا همه چیز درست است یا Enter را فشار دهید تا دوباره وارد شوید.


در پایان پیامی در مورد تولید موفق کلید ظاهر می شود. از شما خواسته می شود یک رمز عبور برای کلید خصوصی تنظیم کنید (اگر می خواهید همان رمز را بگذارید، Enter را فشار دهید):

تولید 2 جفت کلید RSA 048 بیتی و گواهی خودامضا (SHA256withRSA) با اعتبار 10000 روز برای: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU Enter key رمز عبور برای (اگر همان رمز عبور فروشگاه کلید باشد، برگردانید):
فایل در دایرکتوری فعلی ایجاد خواهد شد lcf.keystore.

مهم

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

دو مرحله باقی مانده است و شما یک فایل APK آماده برای توزیع خواهید داشت. ما مستقیماً به امضای خود ادامه می دهیم.

برای امضای فایل apk خود، از این ابزار استفاده کنید jarsigner، که در JDK نیز گنجانده شده است.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
نام گواهی پس از پارامتر مشخص می شود -فروشگاه کلید، نام مستعار - بعد از نام فایل.

در نهایت برای بهینه سازی فایل apk از ابزار کاربردی استفاده می کنیم زیپالاین:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
آخرین پارامتر نام فایلی است که در گوگل پلی آپلود خواهید کرد.

مهم.

سودمند زیپالایناین بخشی از ابزار Android SDK است و می‌توانید در اینجا پیدا کنید:

/path/to/Android/sdk/build-tools/VERSION/zipalign

نتیجه

اکنون یک فایل apk آماده برای توزیع دارید که می تواند در Google Play آپلود شود. توضیحات را پر کنید، رتبه درخواست خود را تعیین کنید و روی "انتشار" کلیک کنید.
 
مقالات توسطموضوع:
دانلود نسخه آزمایشی آنتی ویروس Yandex
محصولات آزمایشگاه کسپرسکی برای بسیاری شناخته شده است و بسیار محبوب هستند. با این حال، هزینه بالای برنامه ها اکثر کاربرانی را که به سادگی آماده پرداخت هزینه "خوک در یک پوک" نیستند - برای برنامه ها، عملکرد و کارایی، می ترساند.
چگونه به بیت بودن سیستم عامل و پردازنده در ویندوز پی ببریم
پس از خرید یک لپ تاپ جدید یا مونتاژ یک کامپیوتر رومیزی، بسیاری از کاربران با این سوال مواجه می شوند: 32 یا 64 بیت، کدام سیستم را نصب کنیم؟ موضوع بسیار جالب است و در این نشریه ما با جزئیات تمام تفاوت های ظریف مربوط به آن را در نظر خواهیم گرفت
تبدیل از djvu به pdf
چگونه djvu را به pdf تبدیل کنیم تا متن سند تا حد امکان خوانا باقی بماند؟ برای انجام این کار، باید از برنامه ها و خدمات اثبات شده استفاده کنید، چنین اسنادی را می توان در رایانه، تلفن، تلفن های هوشمند مشاهده کرد، زیرا تعداد زیادی از آنها وجود دارد.
شبکه های cpa روسیه.  شبکه های CPA - چیست؟  برنامه های وابسته شبکه های CPA: رتبه بندی، توضیحات و بررسی.  شبکه های CPA چیست؟
تقریباً هر کاربر با کلمات ارزشمند CPA در اینترنت مواجه می شود، اما همه نمی دانند که چیست. در این مقاله به شما می گویم که CPA چیست و با چه چیزی خورده می شود و در اینجا همچنین با 13 شبکه برتر CPA در Runet آشنا خواهید شد. CPA و CPA چیست