<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های شادمان ادمن</title>
        <link>https://virgool.io/feed/@adman.shadman</link>
        <description>توسعه دهنده اندروید هستم. دوس دارم تجربیاتم رو با نوشتن به اشتراک بزارم.</description>
        <language>fa</language>
        <pubDate>2026-07-06 13:45:18</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/59657/avatar/89wTq9.jpeg?height=120&amp;width=120</url>
            <title>شادمان ادمن</title>
            <link>https://virgool.io/@adman.shadman</link>
        </image>

                    <item>
                <title>فلاتر(بال‌بال‌زدن): این داستان، ساخت طرح کشویی (دراور)</title>
                <link>https://virgool.io/@adman.shadman/%D9%81%D9%84%D8%A7%D8%AA%D8%B1%D8%A8%D8%A7%D9%84%D8%A8%D8%A7%D9%84%D8%B2%D8%AF%D9%86-%D8%A7%DB%8C%D9%86-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%B7%D8%B1%D8%AD-%DA%A9%D8%B4%D9%88%DB%8C%DB%8C-%D8%AF%D8%B1%D8%A7%D9%88%D8%B1-yzmv51tu0fuc</link>
                <description>Flutterفلاتر یک محیط توسعه برای گوشی های هوشمند است که توسط گوگل ارئه شده. توسط فلاتر میشه هم برای اندروید و هم برای ای‌او‌اس با یک کد (تقریبا) برنامه‌های مدرن توسعه داد. برخلاف دیگر محیط‌های توسعه کراس پلت فرم، مانند ریکت نیتیو، فلاتر از جاوا اسکریپت استفاده نمی‌کنه و یک زبان مخصوص به خودش رو داره به اسم دارت (Dart). طبق آمار استک‌اور‌فلو‌ فلاتر پیش رونده ترین تکنولوژی برنامه نویسی در حال حاضر است.این نکته رو هم بگم که من زیاد با فلاتر آشنایی ندارم و فقط چون این آموزش برام جالب بود اون رو نوشتم. منبع رو هم اینجا می‌تونید ببینید.ساخت دراوردراور چیست؟دراور تقریبا یک صفحه نمایش نامرئی ست که معمولا یک لیست یا منو در داخل خود دارد. وقتی نمایش داده می‌شود معمولا نصف صفحه نمایش یا بیشتر را پر می‌کند. چیزی شبیه به تصویر زیر:ساخت یک دراور خالیاول یک دراور خالی درست کنیم. برای استفاده از متریال دیزاین از MaterialApp استفاده می‌کنیم. کد زیر:class MyApp extends StatelessWidget {
  @override
  Widget build (BuildContext ctxt) {
 return new MaterialApp(
      home: new DWidget()
    );
  }
}تابع DWidget رو پایین تر می‌نویسیم. باید به این نکته اشاره کنم که چون drawers بخشی از Scaffold و appBar هست به محظ اضافه شدن دراور به برنامه، یک آیکون سه خطی به قسمت بالا و سمت چپ برنامه اضافه می‌شه که با لمس اون دراور باز میشه. کد پایین تابع DWidget هست که در بالا از اون استفاده کردیم:class DWidget extends StatelessWidget {
  @override
  Widget build (BuildContext ctxt) {
 return new Scaffold(
      drawer: new Drawer(
        child: new Text(&quot;\n\n\nDrawer Is Here&quot;),
      ),
      appBar: new AppBar(
        title: new Text(&quot;Drawer Demo&quot;),
      ),
      body: new Text(&quot;Drawer Body&quot;),
    );
  }
}خروجی برنامه:دراوراگر در کد بالا دقت کنید ما به جای :children از :child استفاده کردیم. استفاده از :child یعنی ما فقط می‌تونیم  از یک ویجت داخل دراور استفاده کنیم. برای استفاده از ویجت های بیشتر باید از ویجت‌هایی استفاده کنیم که قادر به نگه داشتن چندین ویجت به صورت ستونی هستند. کد دراور در صورت استفاده از حالت ستونی به صورت زیر خواهد بود:drawer: new Drawer(
  child: new Column(
    children: &lt;Widget&gt;[
 new Text(&quot;\n\n\n\Drawer Is Here =&gt; 1&quot;),
 new Text(&quot;Drawer Is Here =&gt; 2&quot;),
 new Text(&quot;Drawer Is Here =&gt; 3&quot;),
    ],
  )
),این کد سه عدد تکست رو در دراور به ما نشون میده.اضافه کردن هدرمعمولا هر دراور در قسمت بالایی خود شامل یک هدر است. اندازه هدر تقریبا ۲۰٪ از کل اندازه دراور رو در بر می‌گیره. در فلاتر ما می‌تونیم از ویجت DrawerHeader استفاده کنیم که می‌تونه دارای زیر مجموعه هم باشه. در اینجا ما از BoxDecoration استفاده می‌کنیم که راحت‌تر بتونیم مرز کامل هدر رو تشخیص بدیم. drawer: new Drawer(
  child:new DrawerHeader(
    child: new Text(&quot;DRAWER HEADER..&quot;),
    decoration: new BoxDecoration(
      color: Colors.orange
 ),
  )
),و خروجی برنامه:هدری که ساختیم ۱۰۰٪ از فضای دراور رو در بر گرفته. در حالی که انتظار داشتیم اندازه هدر ۲۰٪ باشه. این اتفاق وقتی رخ میده که ما فقط هدر داخل دراور داشته باشیم. در واقع دراور انتظار داره به غیر از هدر یک یا چند ویجت دیگه داخلش داشته باشه.نمایش صحیح هدربرای نمایش صحیح هدر باید از ویجت هایی استفاده کنیم که خودشون می‌تونند شامل چند ویجت دیگه باشن. برای نمونه Column یا ListView. اینجا ما از ListView استفاده می‌کنیم. چون Column کل محیط رو پر نمی‌کنه.طبق کد زیر ListView رو به دراور اضافه می‌کنیم:drawer: new Drawer(
  child: new ListView(
    children: &lt;Widget&gt;[
 new DrawerHeader(
        child: new Text(&quot;DRAWER HEADER..&quot;),
        decoration: new BoxDecoration(
            color: Colors.orange
 ),
      )
    ],
  )
),خروجی برنامه :دراور با ویجت لیست ویواین چیزی بود که از اول دنبالش بودیم. حالا دراوری که درست کردیم استاندارد به نظر میاد.اضافه کردن آیتم به دراورمعمولا دراورها شامل یک سری آیتم هستند که با لمس اون‌ها اعمالی انجام می‌شه. مثلا باز کردن یک اکتیویتی یا صفحه. ما باید از ویجت هایی استفاده کنیم که از تابع onTap پشتیبانی کنند.یکی از ویجت هایی که ما می‌تونیم در ListView استفاده کنیم ListTile هست.حالا بیاید با استفاده از ListTile و تابع onTap چندتا آیتم به دراور اضافه کنیم. تابع onTap همون کار کلیک‌لیسنر در اندروید رو برای ما انجام می‌ده البته با انعطاف پذیری بیشتر.نمایش صفحاتکد زیر دو صفحه به برنامه ما اضافه می‌کنه که کاربر با لمس هر آیتم در دراور می‌تونه اون‌هارو ببینه.class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext ctxt) {
 return new Scaffold(
      appBar: new AppBar(title: new Text(&quot;First Page&quot;),),
      body: new Text(&quot;I belongs to First Page&quot;),
    );
  }
}
class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext ctxt) {
 return new Scaffold(
      appBar: new AppBar(title: new Text(&quot;Second Page&quot;),),
      body: new Text(&quot;I belongs to Second Page&quot;),
    );
  }
}
حالا با استفاده از تابع onTop در ListTile صفحاتی که درست کردیم رو به کاربر نشون می‌دیم.drawer: new Drawer(
  child: new ListView(
    children: &lt;Widget&gt;[
 new DrawerHeader(
        child: new Text(&quot;DRAWER HEADER..&quot;),
        decoration: new BoxDecoration(
            color: Colors.orange
 ),
      ),
 new ListTile(
        title: new Text(&quot;Item =&gt; 1&quot;),
        onTap: () { 
          Navigator.push(ctxt,
 new MaterialPageRoute(builder: (ctxt) =&gt; new FirstPage()));
        },
      ),
 new ListTile(
        title: new Text(&quot;Item =&gt; 2&quot;),
        onTap: () {
          Navigator.push(ctxt,
 new MaterialPageRoute(builder: (ctxt) =&gt; new SecondPage()));
        },
      ),
    ],
  )
),در اینجا با استفاده از ListTile ما دو آیتم به دراور اضافه کردیم. بعد با استفاده از تابع onTop  هر کدوم از اون‌ها رو به صفحاتی که می‌خوایم ربط می‌دیم.خروجی برنامه رو ببینید:دراور با ایتمناپدید کردن دراورتقریبا کارمون تموم شد. اما اگر دقت کنید وقتی می‌خوایم از صفحه ای که داخلش هستیم برگردیم به صفحه اصلی، به جای بازگشت، دراور دوباره باز میشه. برای حل این مشکل ما باید کاری کنیم که دراور تا قبل از بارگذاری صفحه جدید، نمایش داده نشه. برای این کار از ()Navigator.pop استفاده می‌کنیم. متدهای ()onTop رو طبق کد زیر تغییر بدید:onTap: () {
  Navigator.pop(ctxt);
  Navigator.push(ctxt,
 new MaterialPageRoute(builder: (ctxt) =&gt; new FirstPage()));
},و خروجی برنامه:ناپدید کردن دراورموفق باشید (;</description>
                <category>شادمان ادمن</category>
                <author>شادمان ادمن</author>
                <pubDate>Mon, 29 Jul 2019 18:46:01 +0430</pubDate>
            </item>
                    <item>
                <title>فوت و فن‌های شیء-گرایی: استفاده از Starter در اندروید</title>
                <link>https://virgool.io/MobileLab/%D9%81%D9%88%D8%AA-%D9%88-%D9%81%D9%86-%D9%87%D8%A7%DB%8C-%D8%B4%DB%8C%D8%A1-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-starter-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-svp2ilzzii3o</link>
                <description>می‌خوام این نوشته رو ساده و کوتاه بنویسم که راحت‌تر اون رو بخونید. چون کاربرد زیادی داره و تقریبا تو هر پروژه ای استفاده میشه.تقریبا از روز اولی که شروع کردم به توسعه برای اندروید تا همین چند وقت پیش، برای شروع یک اکتیویتی از کد زیر استفاده می‌کردم:شروع یک اکتیویتیتو نگاه اول شناختینش نه؟ تقریبا همه ما برنامه‌نویس‌های اندروید از این کد برای شروع یک اکتیویتی استفاده می‌کنیم. اما این کد مشکلاتی به همراه داره.اول اینکه هر جا احتیاج داشتم یک اکتیویتی رو شروع کنم باید کد بالا رو کپی می‌کردم و اکتیویتی هدف رو تغییر می‌دادم و داده‌هایی که قرار بود ارسال بشه رو دوباره ست می‌کردم.بعدش مجبور بودم تو اکتیویتی هدف، همه داده‌هایی که قرار بود دریافت کنم رو تعریف می‌کردم. تقریبا مثل تصویر زیر:خوب اینجا شاید بگید که این چیزی نیست و خیلی هم راحت میشه ازش استفاده کرد و چرا ...شعر میگی.اما باور کنید تو پروژهای بزرگ اگه از این روش استفاده کنید خیلی رو اعصاب‌تونه. چندتا از مشکلاتی که ممکنه براتون پیش بیاد:ممکنه بعدا برای یک اکتیویتی داده های بیشتری ارسال کنید.اینکه فراموش کنید داده ها رو به اکتیویتی ارجاع بدید.ممکنه لازم بشه تو خیلی از جاها یک اکتیویتی رو اجرا کنید.ممکنه اصلا یادتون بره داده های جدید رو جایگزین داده های قبلی کنید.تابع Starterبرای جلوگیری از مشکلات بالا، خیلی بهتر هست اگر از یک تابع استاتیک در اکتیویتی هدف استفاده کنید:Starterحتی خود اندروید استدیو هم یک تابع داخلی برای این کار داره:تابع استارتر استفاده از این روش تو پروژه‌هام خیلی به من کمک کرده و کدهام قابل فهم‌تر شدن. امیدوارم که به شما هم کمک بکنه. منبع</description>
                <category>شادمان ادمن</category>
                <author>شادمان ادمن</author>
                <pubDate>Sat, 27 Jul 2019 00:35:23 +0430</pubDate>
            </item>
                    <item>
                <title>نحوه استفاده از Shared Element در اندروید</title>
                <link>https://virgool.io/MobileLab/%D9%86%D8%AD%D9%88%D9%87-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-shared-element-%D8%AA%D9%88-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-silq5bote6k2</link>
                <description>Shared Elementشاید تو یک سری از اپلیکشین های اندرویدی مثل نسخه قبلی گوگل پلی، با shared element برخورد کرده باشید. Shared Elementفک کنم از تصویر بالا کلیات رو فهمیده باشید. Shared Element در واقع یعنی انتقال یک شیء از یک اکتیویتی به یک اکتیویتی دیگر با انیمیشن، در صورتی که اون شیء بین هر دو اکتیویتی مشترک باشه.  عنصر مشترک یا Shared Element در واقع در اندروید ۵ معرفی شد. و فقط گوشی های هوشمند با اندروید ۵ به بالا از اون پشتیبانی می‌کنند.در ادامه یک پروژه کوچیک با هم‌دیگه انجام می‌دیم که بهتر متوجه بشید.عنصر مشترکامیدوارم با کلیات توسعه اندروید آشنا باشید. چون نمی‌خوام زیاد وارد جزئیات بشم. تو این پروژه ما یک اسپلش اسکرین یا صفحه معرفی و یک صفحه اصلی داریم. داخل صفحه معرفی، لوگو برنامه هست که بعد از سه ثانیه صفحه معرفی تموم میشه و صفحه اصلی باز می‌شه. صفحه اصلی شامل لوگو برنامه و یک متن هست. بیاید شروع کنیم.یک پروژه جدید با یک اکتیویتی خالی در اندروید استدیو ایجاد کنید. اسمشم بزارید Shared Element یا هر چی که دوست داشتید.حالا توی پروژه یک اکتیویتی دیگه به اسم SplashScreenActivity ایجاد کنید.توی layout کلاس SplashScreenActivity یک امیج ویو بزارید. مثله کد زیر:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;android.support.constraint.ConstraintLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:background=&quot;@android:color/white&quot;
    tools:context=&quot;.SplashScreenActivity&quot;&gt;

    &lt;ImageView
        android:id=&quot;@+id/logo&quot;
        android:layout_width=&quot;80dp&quot;
        android:layout_height=&quot;80dp&quot;
        android:tint=&quot;@color/colorAccent&quot;
        app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
        app:layout_constraintRight_toRightOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot;
        app:layout_constraintLeft_toLeftOf=&quot;parent&quot;
        android:src=&quot;@drawable/ic_shop&quot;
        android:transitionName=&quot;logo&quot;  &lt;!-- here is the transitionName for shared Element--&gt;
        /&gt;

&lt;/android.support.constraint.ConstraintLayout&gt;می‌رسیم به قسمت مهم ماجرا. شما باید به غیر از تعریف ایدی برای ابجکت یا المنت‌تون یک ایدی هم به عنوان اسم عنصر مشترک اختصاص بدید. این ایدی با transitioneName تعریف می‌شه. همون قسمتی که با توضیح مشخص کردم. من transitioneName رو برابر &quot;logo&quot; قرار دادم. شما می‌تونید هر چی دلتون خواست بزارید. خروجی مورد انتظار چیزی شبیه به تصویر پایین باید باشه:activity_splash_screen.xmlحالا در layout اکتیویتی اول یعنی کلاس MainActivity یک تکست‌ویو و یک امیج‌ویو برای نمایش لوگو و متن ایجاد کنید. شبیه به کد زیر:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;android.support.constraint.ConstraintLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;&gt;

    &lt;LinearLayout
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:gravity=&quot;center&quot;
        android:orientation=&quot;vertical&quot;
        app:layout_constraintLeft_toLeftOf=&quot;parent&quot;
        app:layout_constraintRight_toRightOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot;&gt;

        &lt;ImageView
            android:id=&quot;@+id/logo&quot;
            android:layout_width=&quot;80dp&quot;
            android:layout_height=&quot;80dp&quot;
            android:layout_marginTop=&quot;16dp&quot;
            android:src=&quot;@drawable/ic_shop&quot;
            android:tint=&quot;@color/colorAccent&quot;
            android:transitionName=&quot;logo&quot; /&gt; &lt;!--here is the transition name.  --&gt;

        &lt;TextView
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;This is a project for learn how to use Shared Element.&quot;
            android:textAlignment=&quot;center&quot;
            android:textColor=&quot;@android:color/background_dark&quot;
            android:textSize=&quot;18dp&quot; /&gt;
    &lt;/LinearLayout&gt;
&lt;/android.support.constraint.ConstraintLayout&gt;اینجا هم قسمت مهم همون transitionName هست. در اینجا باید همون اسمی رو اختصاص بدید که در layout کلاس SplashScreenActivity به امیج ویو اختصاص داده بودید. خروجی باید چیزی شبیه به تصویر پایین باشه:activity_main.xmlخوب کارمون با قسمت طراحی تموم شد. برگردیم سراغ اکتیویتی ها. کلاس SplashScreenActivity  رو باز کنید. در اینجا می‌خوایم یک تایمر بزاریم که بعد از دو ثانیه اکتیویتی اصلی اجرا بشه.من از ترید(thread) استفاده کردم. ولی شما می‌تونید فقط یک تایمر بزارید. طبق کد زیر پیش برید:Thread splash = new Thread() {
    @Override
    public void run() {
        try {
            sleep(2000);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    
                }
            });

        } catch (Exception e) {

        }
    }
    };امیج ویویی که لوگو داخل اون قرار داره رو شناسایی کنید:ImageView imageViewLogo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    imageViewLogo=findViewById(R.id.logo);
}حالا داخل متد run کدهای زیر رو وارد کنید. این کدها برای اجرای اکتیویتی اصلی هستن:Intent i = new Intent(SplashScreenActivity.this, MainActivity.class);
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(SplashScreenActivity.this, imageViewLogo, &quot;logo&quot;);
startActivity(i, optionsCompat.toBundle());
finish();چیزی که در اینجا مهمه این خط از کد هست: ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(SplashScreenActivity.this, imageViewLogo, &quot;logo&quot;);  در اینجا ما به اینتنت می‌فهمونیم هم قراره یک اکتیویتی رو اجرا کنه و هم اینکه یک چیزی به اون ارسال کنه. اون چیز در واقع makeSceneTransitionAnimation هست. این تابع در اندروید ۵ معرفی شد. با این تابع هست که امکان Shared Element مهیا می‌شه. البته استفاده های دیگه‌ای هم داره که من دقیقا نمی‌دونم.قسمت اول این تابع اسم اون اکتیویتی هست که الان داخلش هستیم. قسمت دوم اسم اون المنتی هست که ما می‌خوایم به عنوان عنصر مشترک استفاده کنیم. که در اینجا امیج ویویی هست که لوگوی برنامه رو نشون میده. قسمت سوم اسم transitionName هست که قبلا به هر دو عنصر اختصاص دادیم. در اینجا من از &quot;logo&quot; استفاده کرده بودم. شما اگر ایدی دیگه‌ای نوشتید همون رو وارد کنید.حالا تایمر یا تردی که نوشتید رو تو قسمت oncreate اکتیوتی اجرا کنید. کدهای کلاس SplashScreenActivity باید چیزی شبیه به تصویر پایین باشه:SplashScreenActivity.javaحالا طبق تصویر زیر فایل styles.xml رو باز کنید:styles.xmlو کد زیر رو در داخل بلوک AppTheme وارد کنید:&lt;item name=&quot;android:windowContentTransitions&quot;&gt;true&lt;/item&gt;این خط از کد به هر دو اکتیویتی میفهمونه که دارن از shared element استفاده می‌کنند.حالا برنامه رو اجرا کنید:عه! پس چرا اینجوری شد؟!!!!!در واقع هر اکتیویتی بعد از تموم شدن دارای یک انیمیشن هست. حالا این انیمیشن با انیمیشنی که ما درست کردیم تداخل پیدا کرده. (آخرسر اندروید با این دردسرهاش مارو می‌کشه)برای حل این مشکل یک راه حل ساده داریم. شما باید سه تا کار انجام بدید:۱. اول اینکه خط کد زیر رو به قسمت onCreate در کلاس SplashScreenActivity  اضافه کنید:getWindow().setExitTransition(null);فک کنم کد واضح باشه. این خط از کد انیمیشن خروج اکتیویتی رو حذف می‌کنه.۲. خط کد زیر رو هم به قسمت onCreate در کلاس MainActivity اضافه کنید:getWindow().setEnterTransition(null);این کد هم انیمیشن ورود رو حذف می‌کنه.۳. به جای اینکه بلافاصله بعد از شروع اکتیویتی جدید، اکتیویتی قبلی رو تموم یا finish کنیم، بیایم تو تابع آن_ستاپ اونو finish کنیم. امیدوارم فهمیده باشید. بیاید یک نگاه به تصویر پایین بندازیم:SplashScreenActivity,javaدر کلاس SplashScreenActivity من اومدم تابع آن_ستاپ رو override کردم و در اون اکتیویتی رو finish کردم. یعنی وقتی چرخه اکتیویتی رفت روی آن_ستاپ، بعد از اون بیاد اکتیویتی رو تموم کنه. اینجوری مشکل تداخل هم حل  میشه. البته این یک راه حل بود که خودم پیدا کردم. شاید شما راه حل بهتری داشته باشید.حالا برنامه رو اجرا کنید:مشکل حل شد. امیدوارم که قابل فهم بوده باشه. تا جایی که تونستم سعی کردم ساده توضیح بدم. سورس پروژه رو هم می‌تونید از طریق لیک زیر از گیت هاب دانلود و استفاده کنید.  https://github.com/shadmanadman/SharedElement/  </description>
                <category>شادمان ادمن</category>
                <author>شادمان ادمن</author>
                <pubDate>Thu, 25 Jul 2019 02:59:47 +0430</pubDate>
            </item>
                    <item>
                <title>کابوس من اکلیپس و رویای من اندروید استدیو</title>
                <link>https://virgool.io/@adman.shadman/%DA%A9%D8%A7%D8%A8%D9%88%D8%B3-%D9%85%D9%86-%D8%A7%DA%A9%D9%84%DB%8C%D9%BE%D8%B3-%D9%88-%D8%B1%D9%88%DB%8C%D8%A7%DB%8C-%D9%85%D9%86-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A7%D8%B3%D8%AA%D8%AF%DB%8C%D9%88-k5sxe5fwvuyt</link>
                <description>شروع اندرویدروز اولی رو یادمه که خودم شروع کردم. مثله این فیلما که تصویر مات میشه و میرن به خاطرات گذشته. (:تقریبا هفت سال پیش تو دانشگاه بود. ترم سوم نرم افزار بودم. سر کلاس طراحی سایت بود که استادمون گفت:&quot;دانشگاه چیزی بهتون یاد نمیده که به درد بازار کار بخوره. برید یه زبان برنامه‌نویسی رو شروع کنید و تخصصی یاد بگیرید. من پیشنهاد می‌کنم برید سراغ برنامه‌نویسی اندروید. آینده خوبی داره.&quot;همین حرفهای استادمون باعث شد که منم برم سراغ اندروید.اس‌دی‌کی و جی‌دی‌کیبعد از کلاس رفتم خوابگاه و با لپ‌تاپم درباره اینکه چطوری شروع کنم، سرچ کردم. چندتا سایت خوب پیدا کردم و شروع کردم به خوندن. طبق مطالب باید اول جی‌دی‌کی (JDK) رو نصب می‌کردم. جی‌دی‌کی در واقع شامل کتابخانه های جاواست که توسعه برای جاوا رو ممکن می‌کنه.بعد از اون باید اس‌دی‌کی (SDK) رو دانلود می‌کردم. اس‌دی‌کی شامل یکسری کتابخانه‌های استاندارد هست که توسط گوگل ارایه می‌شه. با اس‌دی‌کی توسعه برای اندروید از طریق جاوا ممکن می‌شه. حجم اس‌دی‌کی اون‌موقع برای من خیلی زیاد بود. با اینترنتی که داشتم نتونستم دانلودش کنم. فرداش سر کلاس به استادمون گفتم، اونم گفت یه فلش برام بیار من شب برات دانلود میکنم. خدا خیرش بده. تو کلاس بعدی فلش رو برام آورد. هم جی‌دی‌کی هم اس‌دی‌کی و هم اکلیپس رو برام دانلود کرده‌ بود.خلاصه بعد از چند روز مشغول پیکربندی اولیه این ابزارها شدم. اول باید جی‌دی‌کی رو نصب می‌کردم. بعد باید ‌فایل اس‌دی‌کی رو از حالت زیپ استخراج می‌کردم. فرقی نمی‌کنه که فایل اس‌دی‌کی رو کجا می‌زارید. اما اگر از ویندوز استفاده می‌کنید، بهتره اونو تو مسیر  C:/user/%username%/.Android قرار بدید. اگر هم از سیستم عامل لینوکس استفاده می‌کنید فایل رو تو مسیر root/opt/ استخراج کنید. در اخر مقاله لینک‌های دانلود هر کدوم از این ابزارها رو قرار میدم.اکلیپسمحیط توسعه اکلیپسبعد از اینکه دو ابزار جی‌دی‌کی و اس‌دی‌کی آماده شدن باید اکلیپس رو نصب می‌کردم. اکلیپس یک محیط توسعه بود که توسعه برای جاوا رو ممکن می‌کرد. اون موقع تنها ابزاری بود که توسعه‌دهنده‌ها باهاش اندروید رو توسعه می‌دادن. البته شاید هم ابزاره دیگه‌ای هم بوده باشه ولی من خیلی گشتم و چیزی جز اکلیپس پیدا نکردم.اکلیپس واقعا یک کابوس بود. کلی باگ داشت و تقریبا ده روز زمان برد تا فقط پیکربندی اولیه رو انجام دادم. جوری شده بود که شبها کابوس می‌دیدم. خلاصه بعد از یه مدت تونستم اولین برنامه خودمو بسازم و ران کنم. الان اکلیپس تقریبا منسوخ شده و کسی ازش استفاده نمی‌کنه. به همین خاطر تا اینجا درباره اکلیپس کافیه.اندروید استدیومحیط توسعه اندروید استدیاندروید استدیو واقعا یک رویا بود. یک انقلاب در زمینه توسعه اندروید. اندروید استدیو اولین بار تو همایش Google I/O سال ۲۰۱۳ معرفی شد. اولین نسخه اون تو سال ۲۰۱۴ بیرون اومد. یک محیط توسعه جاوا بر پایه محیط IntelliJ (یک محیط توسعه جاوا که توسط کمپانی جت برینز ارایه می‌شد) که توسط خود گوگل پشتیبانی می‌شد و فقط برای توسعه اندروید بود. دیگه چی از این بهتر. برای توسعه دهندگان اندروید در سراسر دینا خبر خیلی خوبی بود.یک محیط ساده و زیبا با کلی امکانات و ویژگی‌های جدید که توسعه برای اندروید رو لذت بخش می‌کرد.پیکربندی و نصب اندروید استدیواخرین نسخه جی‌دی‌کی رو از این مسیر دانلود و نصب کنید.اخرین نسخه اس‌دی‌کی رو هم از این مسیر دانلود کنید و فایل فشرد شده رو استخراج کنید. بعد فایل استخراج شده رو تو یکی از مسیرهایی که بالاتر گفتم، قرار بدید.اخرین نسخه اندروید استدیو رو از اینجا دانلود کنید. فایلی که دانلود کردید رو اجرا کنید و طبق ویدیو زیر پیش برید:ویدیو در آپاراتنکته: ممکنه بعد از نصب اندروید استدیو با ارور sdk not found مواجه بشید. فقط کافیه ادرس محل اس‌دی‌کی رو عوض کنید.موفق باشید ;)</description>
                <category>شادمان ادمن</category>
                <author>شادمان ادمن</author>
                <pubDate>Mon, 22 Jul 2019 15:11:28 +0430</pubDate>
            </item>
                    <item>
                <title>بهترین زبان برنامه نویسی برای اندروید</title>
                <link>https://virgool.io/coderlife/%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-jbdrvequkhwq</link>
                <description>شاید با خودتون بگید که الان خیلی برای یادگیری اندروید دیر هست. شاید بگید با این‌همه توسعه دهنده و برنامه نویس دیگه جایی واسه من نیست. اما کاملا اشتباهه. بازم تاکید می‌کنم کاملا اشتباهه. هیچوقت واسه یاد گرفتن دیر نیست، هیچوقت. مخصوصا برای برنامه نویسی اونم برنامه نویسی اندروید که به نظرم آینده بسیار خوبی در انتظارشه.برنامه نویسی اندروید بازار خوبی داره؟  ۲.۵ میلیارد کاربر فعال اندرویدی! همین برای جواب این سوال کافیه. برنامه نویسی اندروید آینده داره؟ چیزی که گوگل پشتش باشه قطعا آینده داره.  چطوری شروع کنم؟ خیلی راحت. یه نفس عمیق بکشید، انگشتهای دستتون رو گرم کنید، یک زبان برنامه نویسی انتخاب کنید و سفر رو شروع کنید.بهترین زبان برای توسعه اندرویدهیچکس نمی‌تونه بگه بهترین زبان برنامه نویسی برای اندروید چی هست. بستگی به علاقه خودتون داره و این که قبلا با چه زبان‌هایی کار کردید(اگر تو برنامه نویسی تجربه دارید). خوشبختانه شما چندتا گزینه دارید. در ادامه چندتا از پر استفاده‌ترین زبان های اندرویدی رو براتون توضیح می‌دم.۱ . جاواباور کنید اگر از جاوا برای توسعه اندروید استفاده کنید هیچوقت پشیمون نمی‌شید. این زبان رسمی سیستمه. زبان رسمی گوگل برای توسعه اندروید.جاوا دومین زبان فعال در گیت هاب هست و تقریبا ۲۰ سال قدمت داره.همچنین از سال ۲۰۰۷ تا سال ۲۰۱۸ جاوا فعال ترین زبان در سایت استک‌اور‌فلو بود. همه این‌ها به معنی منابع بسیار زیاد جاوا است. یعنی هر مشکلی که داشتید به راحتی با یک جستجو می‌تونید حلش کنید. البته اینم اضافه کنم که جاوا به دلیل قدیمی بودنش ظرافت ها و ویژگی‌های خوب زبان‌های جدید رو نداره. اگر شما تو برنامه نویسی تازه کار هستید، جاوا واسه شما بسیار مناسبه اما اگر قبلا با زبان دیگه ای مثل سویفت کار کردید شاید یادگیری جاوا واستون‌ خوش‌آیند نباشه.۲. کاتلینکاتلین یک زبانه جدیده که طراحی شده تا بر روی ماشن مجازی جاوا اجرا بشه. این یعنی برنامه های کاتلین با کدهای جاوا کامپایل میشن. پس هر دستگاهی که بتونه برنامه های جاوا رو اجرا کنه، برنامه های کاتلین رو هم اجرا می‌کنه. این یعنی کاتلین هم قدرت جاوا و هم ظرافت و ویژگی های زبان های جدید رو داره. کاتلین یک زبان برنامه نویسی مدرن، سریع، تمیز هست و به شما یک تجربه برنامه نویسی کاملا عالی میده. کاتلین هم برای تازه کارها و هم برای کسانی که قبلا با زبان‌هایی مثله سویفت کار کردن عالیه. خلاصه اینکه کاتلین یک زبان ایده عال برای توسعه اندروید هست و میتونه بهترین انتخابتون باشه.۳. سی شارپسی شارپ یک زبان برنامه نویسی فوق العاده‌ست. یادگیریش آسونه و کار کردن باهاش راحته. برای مدتی بزرگترین مشکل سی‌شارپ این بود که فقط بر روی سیستم‌های تحت ویندوز اجرا می‌شد. اما بعد از اینکه مایکروسافت در سال ۲۰۱۴ فریم ورک دات‌نت رو متن-باز اعلام کرد همه چیز عوض شد. در سال ۲۰۱۶ مایکروسافت از پروژه زامارین (Xamarin) رونمایی کرد که تحت سی‌شارپ بود و می‌تونست تقریبا روی هر سیستمی اجرا بشه.شما میتونید با Xamarin.Android و Xamarin.IOS و با استفاده از ویژوال استدیو یا زامارین استدیو برای هر کدام از پلتفرم های اندروید و ای او اس برنامه بسازید.۴. پایتوناندروید به طور پیش فرض پایتون رو پشتیبانی نمی‌کنه. اما نگران نباشید، ابزارهایی هستند که برنامه هایی که به زبان پایتون نوشتید رو تبدیل به فایل های apk می‌کنند که قابل اجرا بر روی گوشی های اندروید باشه. این در واقع یک خبر خوب برای طرفداران پایتون هست که دوست دارن اپلیکیشن بسازن اما نمیتونن با جاوا کنار بیان.Kivyکیوی (kivy) در واقع پرطرفدارترین ابزار برای این کار هست. جدا از اینکه متن-باز هست، ویندوز، لینوکس، مک و ای او اس رو هم پشتیبانی میکنه.اما از اونجا که جزوه زبان های بومی اندروید نیست پس همه ویژگی های اندروید رو نداره و معمولا خروجی برنامه سنگین و مقداری کند میشه. اما با قدرتی که امروزه گوشی های هوشمند دارن این مشکلات زیاد اهمیتی نداره پس ناامید نشید.۵. اچ‌تی‌ام‌ال + سی‌اس‌اس + جاوا اسکریپتاین سه زبان برنامه‌نویسی که معمولا برای توسعه وب‌سایت‌ها و برنامه های تحت وب استفاده می‌شن مدتی‌ست که تبدیل به یک چیز عالی شدن. شما می‌تونید تقریبا هر اپلیکیشنی با این سه زبان تولید کنید. چه برای گوشی های هوشمند و چه برای دستگاه های رومیزی. شما با این سه زبان یک برنامه بسازید و تمام، برنامه شما بر روی همه پلتفرم ها قابل اجراست.برای توسعه اندروید با این سه زبان می‌تونید از  Adobe Cordova استفاده کنید که متن-باز هم هست. همچنین از ای او اس، ویندوز موبایل و بلک بری هم پشتیبانی میکنه. اما باید گفت که توسعه با این فریم ورک کار ساده ای نیست و برای ساخت یک برنامه ساده به کلی مشکل برمی‌خورید. به خاطر همین هم معمولا خیلی ها به فریم ورک  Ionic مهاجرت می‌کنند که کار کردن باهاش آسونتره.برنامه‌های  Untappd و  TripCase با این فریم ورک توسعه داده شدن.یکی دیگه از گزینه ها استفاده از  React Native هست که کلی هم طرفدار داره. بسیار قدرتمنده و کمپانی های بزرگی مثل فیسبوک و اینستاگرام ازش استفاده می‌کنن. شما می‌تونید با ریکت‌نیتیو هم برای اندروید و هم برای ای او اس برنامه بسازید.۶. سی و سی پلاس پلاسدر واقع گوگل دو کیت یا ابزار برای توسعه برنامه های اندرویدی فراهم کرده: - اس‌دی‌کی (SDK) که از جاوا استفاده می‌کنه. - ان‌دی‌کی (NDK) که از زبان های بومی مانند سی  و سی پلاس پلاس استفاده می‌کنه. مهمه که بدونید شما نمی‌تونید فقط با ان‌دی‌کی و بدون به کار بردن اس‌دی‌کی یک برنامه کامل بسازید. ان‌دی‌کی به شما اجازه میده یک کتابخانه در برنامه خود ایجاد کنید و بعدا در کدهای جاوا از اون کتابخانه استفاده کنید. در اکثر مواقع شما از ان‌دی‌کی استفاده نمی‌کنید.  معمولا بهتره در مواردی که کدها و کارهایی که انجام دادنشون با جاوا برنامه رو سنگین می‌کنه، از ان دی کی استفاده کنید.چند نکته کوتاهاول اینکه خروجی گرفتن از react native برای ای‌او‌اس حتما نیاز به یک سیستم مک داره. این کار رو برای کسانی که سیستم مک ندارن، مشکل می‌کنه. البته می‌تونید از Expo هم استفاده کنید اما حجم خروجی برنامه معمولا زیاد می‌شه.پیام رسان‌ها، فروشگاه‌های انلاین، شبکه‌های مجازی و ... ،گستردگی برنامه‌ها بی‌پایان هست و همه این‌ها با زبان‌ها و فریم ورک‌های بالا توسعه داده شدن.نیازی نیست که شما همه این زبان ها رو یاد بگیرید، فقط یکی رو انتخاب کنید و شروع کنید.و اینکه چون تو نوشتن تازه کار هستم اگر مشکل نگارشی دیدید دیگه ببخشید(:</description>
                <category>شادمان ادمن</category>
                <author>شادمان ادمن</author>
                <pubDate>Sun, 21 Jul 2019 23:41:55 +0430</pubDate>
            </item>
            </channel>
</rss>