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

3 ماه پیش | 77 مشاهده شده

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

تا قبل از معرفی اندروید ایکس و تغییر نیم اسپیس مخازن maven گوگل برای فراخوانی لایببرری های گوگل در فایل گریدل از سینتکس com.android.support:libraryname-v1.1 استفاده می کردیم.

com.android.support:cardview-v7

com.android.support:appcompat-v7

اما با انتقال لایببرری هایی از گوگل به جت پک نامگذاری آن ها در گریدل به صورت زیر تغییر پیدا کرده است. یعنی باید به ابتدای آن ها androidx اضافه گرد. برای جزییات بیشتر بهاین لینک مراجعه شود.

androidx.cardview:cardview:1.0.0

androidx.appcompat:appcompat:1.0.0

ادامه خواندن



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

3 ماه پیش | 124 مشاهده شده

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

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

داشتن طراحی کمپونت های آماده برای سه پلتفرم وب، اندروید، ای او اس

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

داشتن ویو زیبا و شیک

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

 

Material Design Lite
Materialize
Material-UI
MUI CSS
Polymer
Ionic Material
Material Foundation
Surface
Essence
LumX
Paper
Material Design for Bootstrap
Angular Material
Material
Phonon
Framework7



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

1 سال پیش | 78 مشاهده شده

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

معکوس مهندسی برنامه های آندروید

ماهیت جاوا (زبان برنامه نویسی غالب برای برنامه های آندروید، به استثنای کد بومی) این است که کد به کد ماشین کامپایل نمی شود؛ آن را به یک فرمت متوسط که آماده است بر روی انواع سیستم عامل های سخت افزاری اجرا شود. در حالی که این اجازه می دهد تا قابل حمل  برای روی سخت افزارهای مختلف باشد،  در حال حاضر در APK این امکان برای استخراج فایل ها و بررسی فایل ها شامل xml و dex فایل ها و منابع مورد استفاده  برنامه های اندرویدی را میدهد.

در حالی که من این مباحث را پوشش نخواهم داد، ابزارهایی برای تجزیه فایل DEX (بایگانی کد) از APK به یک آرشیو JAR به طور گسترده در دسترس هستند. من پیشنهاد می کنم به APK خود خود نگاه کنید تا ببینید چه چیزی می تواند استخراج شود. این کمی شگفت آور است که می تواند  منابع تصویر به آسانی در آرشیو APK قابل مشاهده است و تنها با چند ثانیه کار، کد اصلی نیز دیده می شود، با نام متغیر و متدهای که استفاده شده  است.

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



Expected a string but was BEGIN_OBJECT?

1 سال پیش | 80 مشاهده شده

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

java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT

برای رفع مشکل چون به ای پی ای رست وردپرس قابل تغییر نیست برای برنامه اندروید خود باید یک کلاس Adapter بنویسم که در این کلاس باید از کلاس List  در اندروید استفاده کنم. کلام آخر اینکه نباید از کلاس String  استفاده کرد.

[java]
if (key.equals(“id”)) { // Check if desired key
// Fetch the value as a String
String value = jsonReader.nextString();
Log.d(TAG, value);
// break; // Break out of the loop
}

[/java]

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

[java]
jsonReader.beginObject();
while( jsonReader.hasNext() ) {
key = jsonReader.nextName(); // Fetch the next key

if (key.equals(“rendered”)) { // Check if desired key
// Fetch the value as a String
String value = jsonReader.nextString();
Log.d(TAG, value);
}
else{ jsonReader.skipValue(); // Skip values of other keys
}
}
jsonReader.endObject();
[/java]



تفاوت throw و throws در جاوا

1 سال پیش | 90 مشاهده شده

در این پست به تفاوت throw  و throws در جاوا خواهم پرداخت. قبل از خواندن این آموزش، به آموزش قبلی در مورد مدیریت استثنا در جاوا مراجعه کنید.

 کلمات کلیدی throw و throws مورد استفاده در اداره استثنا است. کلمه کلیدی throw برای انتقال نمونه ای از استثنا ایجاد شده توسط برنامه نویس به JVM به صورت دستی استفاده می شود. کلمه کلیدی throws برای انتقال مسئولیت پاسخ  استثنا در متد به روش فراخوانی انجام می شود. تفاوت اصلی بین throw و throws این است که کلمه کلیدی throw از شیء استثنای استفاده کرده  در حالی که کلمه کلیدی throws از نام کلاس های استثنایی استفاده می کند.



throws IOException در جاوا

1 سال پیش | 80 مشاهده شده

جاوا زبانی است که در تعریف تابع ها و شرط ها باید چک کردن استثنا را در آن حتما رعایت کنیم در این پست به بحث throws IOException  خواهم پرداخت.

و اما throw یعنی چی؟ throw از لحاظ لغوی به معنی پرتاب هست. اما چه ربطی به بحث ما داره ؟

حتما دیدید همیشه می گن java بهترین زبون هست و از لحاظ امنیت حرف اول رو می زنه(وارد مبحث python نشید فعلا).یکی از دلایل اینکه جاوا امنیتی بسیار خوبی داره همینه که با استفاده از دستور throw می تونیم مدیریت خطا کنیم و دیگه نذاریم خطای رخ داده سیگنالش به کامپایلر یا مفسر برسه. می یایم به دستور throw خطاهای رخ داده رو پرتاب می کنیم به یه سمت دیگه. یا در اصطلاح پاس می دیم به بخشی داخل کدهای خودمون و این خطا رو می یایم تجزیه تحلیل می کنیم(با دستورات و توابع یا متدهای تعریف شده ی زبون جاوا).

ما خطاهای مختلفی داریم و برای مدیریت خطاهای مختلف کلاس های خاص وجود داره . مثلا IOException برای مدیریت استثنا(خطا)های ورودی خروجی هست.(دستوارت try catch هم داریم اینجا بحث نمی کنم)

دستور throw e خودش خودکار به کامپایلر دستور می ده اگه خطایی رخ داد به خروجی نبر ، پرتش کن توی جایی از حافظه که به متغیر e اختصاص دادیم. توی کدها هم می تونیم این e رو مدیریت کنیم مثلا e بذاریم بعدش نقطه بذاریم و ببینیم چیا داره.مثل کد خطا،مثل متن خطا،سطر و ستونی که خطا رخ داده و … .

 

ادامه خواندن



کلاس concrete در جاوا

1 سال پیش | 88 مشاهده شده

تمام کلاس ها را می توان به صورت انتزاعی یا کنکرت تعریف کرد. پیش فرض  ساخت کلاس کنکرت است. این به این معنی است که کلاس کنکرت می تواند (مستقیم) متغیر و متد  داشته باشد. در مقابل، انتزاعی بدان معنی است که یک کلاس نمیتواند متغیر و متدهای  خود را (مستقیم) داشته باشد.

کلاسهای ابسترکت و کنکرت
شکل 1: کلاسهای ابسترکت و کنکرت

در نمودار بالا یک کلاس انتزاعی به نام Employee وجود دارد. در UML، نام این کلاس کلاس انتزاعی در یک فونت ایتالیک نوشته شده است. این کلاس شامل یک روش انتزاعی به نام calculatePay است که در یک فونت ایتالیک نوشته شده است. یک کلاس و متد انتزاعی پیاده سازی مستقیم ندارد به طور معمول یک کلاس انتزاعی شامل یک یا چند متد انتزاعی  است. نمودار همچنین سه زیر کلاس را نشان می دهد که رفتار و ویژگی های داده را از کلاس Employee به ارث می برند. این کلاس های بتنی هستند که می توان از آنها اشیا ساخت. کلاس های انتزاعی به طور مستقیم نمی تواند نمونه ای از شی  از آنها ساخت. کلاسهای انتزاعی برخی از رفتارهای عمومی را ارائه میدهند، در حالی برخی رفتارها را به یک زیر کلاس منتقل میکنند.



کلید واژه final در جاوا

1 سال پیش | 60 مشاهده شده

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

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

مثالی از استفاده از کلید واژه final  در تعریف یک متد:

class Bike{
final void run(){System.out.println(“running”);}
}

class Honda extends Bike{
void run(){System.out.println(“running safely with 100kmph”);}

public static void main(String args[]){
Honda honda= new Honda();
honda.run();
}
}

مشاهده می شود که خروجی خطا خواهد داشت:

Output:Compile Time Error



روش های دسترسی به اشیا گرافیکی اکتیویتی اصلی در یک کلاس ای سینک تسک

1 سال پیش | 58 مشاهده شده

در برنامه نویسی اندروید برای اینکه پشت پس زمینه برنامه یک سری کارها انجام دهیم و مانع ایجاد پیغام ANR شویم از این کلاس باید استفاده کرد. در این پست در مورد نحوه دسترسی به عناصر UI اکتیویتی اصلی از کلاس ای سینک تسک بحث خواهم کرد. بعد از کمی جستجو از سایت استک اور فلو روش هایی پیدا کردم که در اینجا خلاصه وار آن ها را بیان می کنم. استفاده از کلاس WeakReference  یکی از راه حل های پیش رو است. در کلاس AsyncTask کلاس WeakReference را تعریف کرده و اکتیویتی اصلی را به آن ارجاع می دهیم.

ادامه خواندن



کلاس های استاتیک تو در تو در جاوا

1 سال پیش | 63 مشاهده شده

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

ادامه خواندن



Timed out waiting for process to appear on emulator

1 سال پیش | 60 مشاهده شده

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

ادامه خواندن



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

1 سال پیش | 78 مشاهده شده

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

ادامه خواندن



RSAکد جاوا رمزنگاری

2 سال پیش | 60 مشاهده شده
RSA Java Code

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

ادامه خواندن