برسی signature اپلیکیشن‌های اندروید

استاندارد

همونطور که میدونید در انتهای کار توسعه اپلیکیشن‌های اندرویدی ، توسعه دهندگان اپلیکیشن‌ خروجی اپلیکیشن‌ (Apk) خودشون رو بصورت sign شده منتشر میکنند تا مدریت اپدیت‌ها و انشار اپدیت برای اپلیکیشنشون رو فقط و فقط خودشون بتونند انجام بدهند .

ولی خب این sign کردن باعث نمیشه دیگران نتونند کدی که توسعه دهنده اپلیکیشن‌ زده رو تغیر بدند، اما (یه امای بزرگ) واسه خروجی گرفتن از تغییرات انجام شده نیاز هست که دوباره اپلیکیشن sign بشه و با توجه به اینکه keystore که برای sign کردن توسط توسعه دهنده استفاده شده رو اصولا فقط خودش در اختیار داره و کسایی که این تغییرات رو اعمال کردند باید با یه keystore جدید sign کردن رو انجام بدند .

پس حالا نگرانی که پیش میاد چیه ؟ اینکه از کجا میتونیم بفهمیم اپلیکیشنی که دانلود کردیم اپلیکیشن‌ رسمی هست یا نه (توسط توسعه دهنده اصلی sign شده یا نه ) !

کاری که میتونیم بکنیم اینکه با keytool که ابزار جاوا برای مدیریت certificateها و keyها هست اطلاعات مربوط به certificate هر کدوم از apk ها بگیریم و برسی کنیم .

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

مرحله اول

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

مرحله دوم

دستور زیر رو توی terminal اجرا کنید . این دستور اطلاعات مربوط به certificate هر apk ای که توی فولدرمون هست رو به ما نشون میده .

مرحله اخر

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

چیزی که این مقایسه به ما نشون میده این هست که هر دوی این نسخه‌ها توسط توسعه دهنده اصلی sign شده و از این بابت مشکلی ندارن .

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

پنج تا از بهترین کتابخونه‌هایی که تو توسعه اندروید باید حتما بشناسیم

استاندارد

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

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

من اینجا میخوام ۵ تا از پر کاربردترین کتابخونه‌های اندرویدی رو براتون بنویسم که میتونند توی برنامه نویسی اندروید خیلی به ما کمک کنند و زندگی رو واسمون شیرین‌تر بکنن  .

01082013AndroidSupportLibrary

GSON .۱

gson کتابخونه‌ای هست که توسط google معرفی شده و به شما این امکان رو میده که به راحتی موجودیت‌های جاوایی خودتون رو به json تبدیل کنید و بالعکس .
اگه توی اپلیکیشنتون درگیر کار با Api ها باشید حتما gson خیلی به کارتون میاد .

همچنین این کتابخونه dependency خیلی از کتابخونه‌های دیگه‌ای هست که شاید استفاده میکنید .

 

RETROFIT

خود توسعه دهندهاش راجع به اون میگن: با retrofit شما میتونید REST API هاتون رو تبدیل به Java interface بکنید .

یکی از راه حل‌های بسیار خوب برای مرتب و تمیز کردن فراخوانی متدهای API ها استفاده از retrofit هست . retrofit به ما اجازه میده که با استفاده از annotation ها بتونیم نوع متدهای مورد استفاده و url هرکدوم رو مشخص کنیم و body مربوط به requestهامون و پارامترهای مربوط به Query رو خیلی راحت اضافه کنیم . همینطور خیلی ساده میتونیم به request مون header اضافه کنیم . همه این امکانات باعث میشه کدهامون خیلی تمیزتر و خواناتر بشن که خیلی نکته مهمی هم هست .

 

 

SUGAR ORM

sugerOrm یه ORM مخصوص اندروید هست ، همونطور که میدونید ORM مخفف Object-relational mapping هست و همونطور که از اسمش معلومه، کاری که orm انجام میده اینکه object های ما رو به نوع داده‌ای قابل ذخیره تو Relational Databaseها تبدیل میکنه و بلعکس . با استفاده از orm میتونیم کارهایی که با استفاده از دستورات طولانی sql انجام میشند رو خیلی ساده انجام بدیم . کد زیر رو در نظر بگیرید .

همونطور که میبینید با ORM میتویند خیلی ساده‌تر عملیات create, read, update و delete رو انجام بدید .

 

PICASSO

Picasso رو هم که حتما باهاش اشنا هستید . این کتابخونه امکان دانلود تصاویر و cache کردن اونها روی memory و دیسک رو میده . همچنین به شما امکانتی مثل resize کردن، برش و امکان تایین فرمت ذخیره سازی هر کدوم از پیکسل‌ها توی حافظه ( ALPHA_8  ARGB_4444 , RGB_565 )و … رو به شما میده که به واسطه اونها میتونید حجم مصرفی memory توسط اپلیکیشنتون رو کاهش بدین .

 

EVENTBUS

این کتابخونه قراره برقراری ارتباط بین بخش‌های مختلف اپلیکیشن رو برای ما ساده‌تر کنه. فرض کنید که میخواید یه متغیری رو از Activity تون به یه سرویس که در حال اجرا هست بفرستید یا یه ارتباط ساده بین fragmentهای موجود تو برناممون ایجاد کنیم. تو مثال پایین وقتی اتصال اینترنت قطع میشه به وسیله eventbus میتونیم هر activity رو که میخوایم از این موضوع باخبر کنیم .

 

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

چطوری اجرای حلقه‌هامون رو توی متلب سریع‌تر کنیم

استاندارد

همونطور که میدونید زبان متلب جوری طراحی شده که برای عملیات روی ماتریس‌ها و بردارها به شدت کارامد باشه ، ولی‌ بر خلاف کار آمدی توی این زمینه، متلب توی for-loop اصلا خوب عمل نمیکه و باعث میشه تو موقع اجرای کدهاتون (مخصوصا اونها که تعداد حلقه‌های به نسبت زیادی دارن) کلافه بشین .

حالا چیکار کنیم که انجام حلقه‌هامون رو توی متلب سریع تر کنیم ؟ این کار رو میتونیم به کمک Vectorization انجام بدیم . Vectorization به تبدیل عملیات‌های که به صورت تک تک انجام میشن ( مثلا یه حلقه ۱۰۰۰ تای که باید body حلقمون ۱۰۰۰ بار به صورت تک تک انجام بشه) به عملیات‌های که به واسطه بردارها انجام میشن گفته میشه .

 

حالا بریم سر مثال ، کد زیر رو در نظر بگیرید :

همون کد رو میتونیم به صورت Vectorization شده دربیاریم، به شکل زیر :

یا مثلا دو ماتریس A و B  رو در نظر بگیرید که هم اندازه اند ، برای ضرب کردن درایه به درایه این دو ماتریس دو راه حل وجود داره .
راه اول با حلقه for :

راه دوم با Vectorization :

عملگر point (نقطه) توی کد بالا باعث میشه عملیات ضرب روی تک تک درایه‌های ماتریس‌هامون انجام بشه . از این عملگر برای vectorize کردن دیگر عملگرها هم میشه استفاده کرد، مثل ^(توان) یا / (تقسیم) .

کد زیر و در نظر بگیرید

حالا همون کد که با عملگر point (نقطه) vectorize شده :

 

اگه دوستداشتد هم میتونید با قرار دادن ;tic در اول کدتون و ;toc تو اخر کدتون پیادسازی‌ها با دو روش Vectorization و غیر Vectorization رو از نطر زمانی باهم مقایسه کنید .

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

استاندارد


احتمالا شده بخواید از داخل اپلیکیشنتون امکان ارسال ایمیل رو به کاربرانتون بدید تا بتونند نظرات و پیشنهاداتشون رو به صورت مستقیم با شما درمیون بذارند . این ارسال میتونه مثلا از طریق فرم درباره ما توى اپلیکیشنتون باشه  .
روش معمول این کار اینه که شما از intent استفاده کنید تا یه اپلیکیشنى رو که قابلیت ارسال ایمیل داره رو فراخونى کنید و ادامه ماجرا .
حالا راه باحال تر چیه !؟ اینکه شما خودتون این ایمیل رو بدون درگیر کردن کاربراتون با استفاده از سرویس های خودتون یا سرویس های اماده  ارسال کنید. یه سرویس معروفى که کسایی که برنامه نویسى وب انجام میدن قطعا باهاش اشنایى دان سرویسی هست که سایت  mandrill در اختیار شما میذاره . من هم اینجا میخوام براى این کار از این سرویس استفاده کنم .
حالا نحوه کار با این سرویس چیه ؟

  1. خب اول فقط کافیه یه اکانت تو سایت بسازید. سایت در ابتدا یه اکانت رایگان در اختیارتون میذاره که احتمالا کارتون باهمون راه می‌افته (  واسه من که همیشه راه می‌افته :دى ) .
  2. بعدش باید یه api key برای ارسال ایمیل بسازیم . این کار رو میتونید از داخل منوی setting در زیرمنوی SMTP & API Info انجام بدین .Screenshot_2015-09-16-10-33-57

    حالا میریم سر اصل مطلب .
  3. کاری که باید انجام بدیم اینه که یک request با متد POST یه URL ذکر شده توی سایت (https://mandrillapp.com/api/1.0/messages/send.json) ارسال کنیم، این رکوست باید شامل ورودی با فرمت json باشه که با فیلدهای مورد قبول توی سایت ساخته میشه .

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

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

برای اینکار قدم اول استفاده از gradle هست .که باید فایل build.gradle توی زیر فولد app رو به شکل زیر تغیر بدین .

 

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

 

چطوری فونت تمام Widget های موجود توی اپلیکیشنمون رو کنترل کنیم

استاندارد

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

من این مشکل رو با استفاده از یه کتابخونه دم دستی به اسم CustomFontWidget که خودم نوشتم حل میکنم. این کتابخونه به شما این امکان رو میده که برای Widget هاتون فوفت‌های مختلفی رو ست کنید . ست کردن فونت‌ها از طریق xml هست و attribute ای به اسم customFont . همچنین شما میتونید یک فونت پایه برای پروژتون ست کنید که تمامی widget هاتون درصورتی که هیچ فونتی براشون ست نشده بود از اون استفاده کنن . فونت iran_sans هم برای استفاده در متن های فارسی به صورت default توی این کتابخونه وجود داره . به خواندن ادامه دهید