اجرا و دیباگ پروژه اندروید بر روی دیوایس واقعی

به نام خدا. در مباحث گذشته با مفهوم شبیه ساز آشنا شدیم. از شبیه ساز اندروید استودیو (AVD) و شبیه سازهای ثانویه مانند Genymotion می توان جهت اجرا (Run) و همچنین خطایابی یا دیباگ (Debug) پروژه های اندرویدی استفاده کرد که قبلا با شبیه ساز جنی موشن به طور کامل آشنا شدیم. مزیت شبیه سازها این بود که نیاز به تهیه سخت افزار و دیوایس جداگانه را برای توسعه دهنده مرتفع ساخته و در یک محیط شبیه سازی شده اندروید این امکان را مهیا می کرد تا پروژه خود را روی تمامی نسخه های اندروید تست و دیباگ کنیم. با این حال توسعه دهنده ممکن است بنا به دلایلی در برخی مواقع مایل به اجرا و دیباگ اپلیکیشن خود بر روی دیوایس های واقعی گوشی و یا تبلت باشد.
احتمالا اولین راهی که به ذهن اکثر ما می رسد، ساخت پکیج نصبی apk، انتقال فایل به دیوایس و سپس نصب آن می باشد. مسلما این فرایند زمان زیادی را از ما می گیرد. یعنی اگر لازم باشد ۱۰ بار تغییراتی را در پروژه ایجاد و سپس مجدد روی دیوایس واقعی اجرا یا دیباگ کنیم، این پروسه باید ۱۰ بار تکرار شود.

فعالسازی USB Debugging

گوگل راه ساده تری را پیش روی توسعه دهندگان اندروید قرار داده. به اینصورت که با اتصال دیوایس از طریق کابل USB به کامپیوتر به طور مستقیم در محیط اندروید استودیو امکان Run و Debug پروژه وجود دارد که این قابلیت USB Debugging نام دارد. برای استفاده از این قابلیت ابتدا باید آن را در قسمت تنظیمات دیوایس اندرویدی خود فعال کنیم. در قسمت Settings یا تنظیمات اندروید گزینه ای با عنوان Developer Options وجود دارد که مربوط به تنظیمات USB Debugging می شود. توجه داشته باشید اگر سیستم عامل دیوایس اندروید ۴٫۲ و به بالا می باشد، گزینه Developer Options به صورت پیش فرض مخفی است که برای فعال سازی و نمایش آن لازم است به قسمت About phone رفته و ۷ بار روی قسمت Build number ضربه بزنیم (Build number معمولا در قسمت Software info قرار دارد). حالا Developer Options فعال شده و با برگشت مجدد به Settings این گزینه مشاهده می شود:

فعالسازی قابلیت USB Debugging

فعالسازی قابلیت USB Debugging

وارد Developer Options شده و USB Debugging را فعال می کنم:

فعالسازی قابلیت USB Debugging

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

نصب درایور دیوایس اندرویدی

در مرحله بعد باید درایور دیوایس را روی کامپیوتر نصب کنم. البته نصب درایور فقط در سیستم عامل ویندوز انجام می شود و در سیستم عامل های مک و لینوکس نیازی به نصب درایور نیست (لینک توضیحات مربوط به سیستم عامل های مک و لینوکس در انتهای مبحث قرار گرفته).
درایور دیوایس های سری Nexus (بجز Galaxy Nexus) که توسط گوگل تهیه و منتشر شده، مشترک هستند و Google USB Driver نام دارد. این درایور در SDK Manager در قسمت SDK Tools لیست شده که می بایست دانلود و نصب شود (و یا برای دریافت فایل نصب آفلاین به فصل دوم مراجعه کنید).
نکته: مسیر قرارگیری Google USB Driver (ابتدا فولدر usb_driver از حالت فشرده خارج و سپس به مسیر زیر منتقل گردد):

<sdk location>\extras\google\

نکته: در اکثر موارد دیوایس های غیر نکسوس نیز با Google USB Driver سازگار بوده و نیازی به دانلود و نصب درایور اختصاصی شرکت مربوطه نیست و برای راحتی کار می توانید ابتدا با USB Driver تست کنید. با این حال اگر جواب نگرفتید پاراگراف بعد را مطالعه کنید.

اما سایر دیوایس ها مانند سامسونگ، ال جی، سونی و… درایور مجزا دارند که هر کمپانی برای دیوایس های خود یک درایور بر روی وب سایت خود منتشر می کند (عموما هر کمپانی برای تمامی دیوایس های خود یک درایور مشترک ارائه می دهد). دیوایسی که در این آموزش استفاده شده مربوط به کمپانی LG می باشد که با جستجوی عبارت LG Mobile Driver در گوگل، اولین نتیجه مربوط به وب سایت ال جی و دانلود درایور بود. درایور را دانلود می کنم. حجم درایور زیاد نیست (درایوری که من دانلود کردم ۱۶ مگابایت است).

دانلود درایور گوشی یا تبلت اندرویدی

قبل از نصب درایور لازم است دیوایس توسط کابل USB به کامپیوتر متصل شود. پس از شناسایی دیوایس توسط ویندوز، فایل درایور را اجرا و فرایند نصب را شروع می کنم. پس از اتمام عملیات نصب، احتمالا پنجره ای ظاهر می شود که نشان دهنده نصب درایور دیوایس روی سیستم عامل است (مشابه آنچه هنگام اولین اتصال یک USB Flash به کامپیوتر اتفاق می افتد).منتظر می‌مانم تا به اتمام برسد (ممکن است چند دقیقه زمان ببرد).

نصب درایور گوشی یا تبلت اندرویدی

اگر اتصال USB به درستی برقرار بوده و مشکل دیگری روند نصب درایور را مختل نکرده باشد، عملیات نصب با موفقیت به پایان برسد.
به سراغ اندروید استودیو می روم. پروژه ی Intent که مربوط به آموزش قبل بود را باز می کنم. می خواهم پروژه ما بدون نیاز به ساخت پکیج apk و انتقال دستی به دیوایس، اجرا شود. پروژه را Run می کنم. اگر مراحل را به درستی انجام داده باشم باید دیوایسی که توسط کابل USB به کامپیوتر متصل شده در لیست Connected Devices نمایش داده شود:

نصب درایور گوشی یا تبلت اندرویدی

نکته: در سیستم عامل ویندوز اگر در پنجره بالا دیوایس نمایش داده نمی شود به احتمال زیاد در نصب درایور مشکلی بوجود آمده است. در حینی که دیوایس به کامپیوتر متصل است به Device Manager ویندوز رفته و نام دیوایس خود را در زیرشاخه Other Devices بیابید. سپس روی آن راست کلیک کرده و گزینه Update Driver Software را انتخاب کنید. در مرحله بعد گزینه Browse my computer for driver software را انتخاب کرده و در مرحله نهایی مسیری که درایور را نصب کرده اید انتخاب کنید.
دیوایس را انتخاب می کنم. در این لحظه اگر گوشی یا تبلت در حالت قفل قرار دارد لازم است آن را از حالت قفل خارج کنم. ممکن است قبل از اجرای پروژه روی دیوایس پیغامی با این مضمون که “آیا اجازه استفاده از دیوایس توسط این کامپیوتر به عنوان دیباگر می دهید؟” نمایش داده شود که آنرا تایید می‌کنیم. پس از تایید این پیغام پروژه اجرا می شود:

اجرای اپ اندروید روی دیوایس

پروژه اندروید من روی گوشی به درستی اجرا شد و قادر به تست قسمت های مختلف اپلیکیشن هستم.
یادآوری: اگر minSdkVersion پروژه از نسخه API دیوایس بالاتر باشد امکان اجرا و یا دیباگ میسر نخواهد بود و لازم است موقتا آن را تغییر دهیم.

دیباگ پروژه اندروید

علاوه بر Run کردن پروژه، امکان دیباگ نیز وجود دارد. تفاوت Run و Debug در این است که در دیباگ می توان اشکالات برنامه را مشاهده و بررسی کرد.

دیباگ اپ اندروید

گزینه Debug در سمت راست گزینه Run و یا از طریق منوی Run

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

برای دیباگ کردن پروژه لازم است این قابلیت در پروژه فعال گردد که به دو روش امکان پذیر است:
۱- اضافه شدن ویژگی debuggable با مقدار true به فایل build.gradle درون buildTypes :

android {
    buildTypes {
        debug {
            debuggable true
        }
    }
}

بلاک android پروژه ما پس از اضافه شدن دستور دیباگ:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
        applicationId "ir.android_studio.intent"
        minSdkVersion 10
        targetSdkVersion 24
        versionCode 6
        versionName "1.6"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
        }
    }
}

حالا توسط گزینه Sync Now پروژه را سینک می کنم.
۲- اضافه کردن debuggable به تگ باز درون مانیفست :

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:debuggable="true">

و در نهایت دیباگ پروژه با انتخاب گزینه Debug.
تذکر: قبل از تهیه نسخه نهایی اپلیکیشن جهت انتشار عمومی برای کاربران، حتما قابلیت debug را از پروژه حذف کنید. فعال بودن دیباگ در برنامه ها، کدهایی به برنامه اضافه می کند که موجب افزایش حجم نهایی اپلیکیشن می گردد.

توضیحات مربوط به سیستم عامل های لینوکس و مک :

https://developer.android.com/studio/run/device.html

دانلود فایل این آموزش با فرمت PDF
تعداد صفحات : ۱۱
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
این مطلب چقدر برایتان مفید بود؟ لطفا امتیاز دهید
دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

با دریافت این دوره به تمامی آموزش‌های غیر رایگان و رایگان موجود در وب سایت دسترسی دارید که تخفیفی برای آموزش‌های غیر رایگان نیز درنظر گرفته شده. این پکیج به دو صورت دانلودی و ارسال پستی ارائه می‌گردد.
آموزش‌های اندروید استودیو در دو دسته «پایه» و «تکمیلی» منتشر می‌شوند.
آموزش‌های پایه شامل مباحث اصلی و ضروری و آموزش‌های تکمیلی مطالبی است که می‌بایست در کنار مطالب اصلی بررسی شود.
با خرید این دوره، به تمامی آموزش‌های غیر رایگانی که در آینده منتشر می‌شود نیز به صورت رایگان دسترسی خواهید داشت!

یک دیدگاه بنویسید

پرسش‌های زیر تایید و پاسخ داده نـــخواهند شد:
۱: جزء موارد مطرح شده در صفحات مشکلات و پرسش‌های رایج و بروزرسانی‌های محتوای آموزشی باشد
۲: سوال قبلا توسط کاربران در دیدگاه‌ها مطرح و پاسخ داده شده باشد
۳: پرسش خارج از مبحث آموزشی موجود در این صفحه باشد

  • فرزاد عسکری گفت:

    سلام مهندس/ هنگام ران کردن روی دیوایس واقعی همچین اروری میده مشکل از کجاست/تبلتم هم شناسایی کرده ولی نمی دونم مشکل کجاست/ لطفا کمکم کنید/
    https://s4.uupload.ir/files/screenshot_2021-05-25_230657_li00.png

  • علیرضا گفت:

    سلام و وقت بخیر
    من تازه اندروید استدیو آشنا شدم و چیز خاصی بلد نیستم و نیاز به راهنمایی داشتم.
    ببخشید من تونستم همه کار هارو انجام بدم اما به چند تا مشکل برام پیش اومد.
    یک اینکه اون لیست کشویی که پیش دکمه run هست برای من نوشته app و یک علامت ضربه در بالای سرش هست.
    میدونید مشکل از چی هست؟
    دو اینکه برای اینکه پروژه رو روی گوشی بخوام اجرا کنم زمان زیادی طول میکشه که پروژه روی گوشی واقعی اجرا بشه؟
    و اینکه اگر بخوام پروژه رو اجرا کنم باید پنجره خاصی توی اندروید استدیو باز باشه (مثل پنجره main activty.. و..؟ )

  • ......... گفت:

    سلام
    وقت به خیر
    برای من اصلا به اون جایی که درایو و انخاب کنیم نمی رسه و تا ران می کنم Error running ‘app’: No target device found. این ارور می ده

  • یوسف زارع گفت:

    سلام بنده درایور گوشی خودم رو نمیتونم پیدا کنم توی گوگل همیشه سایت های جانبی میان بالا و داخل سایت خود شیامی قسمتی نداره برای درایور گوشی ردمی نوت ۹ پرو redmi note 9 pro من میخوام روی پوشی خودم اجرا کنم پروژم رو ممنون میشم کمکی کنید

  • مهران گفت:

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

  • nima گفت:

    سلام استاد گل مطهری
    اقای مطهری من minsdk =19 و target = 30 رو برای یک اپ دارم و موقع اجرا و دیباگ روی api = 23 یعنی اندروید ۶ و پایینتر ارور :
    time out waiting for process to appear on device
    رو میگیرم، میخواستم بدونم شما هم تجربه مشابه این داشتین یا میتونید راهنماییم کنید؟

  • سعید گفت:

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

  • ft گفت:

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

  • Flutter Developer گفت:

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

  • petros گفت:

    سلام ببخشید اجرا روی دیوایس واقعی روی سخت افزار دیوایس تاثیر میزاره؟ممکنه گوشی خراب بشه؟؟

  • علی حسامی گفت:

    نه اصلا به مرحله نصب دیوایس نمیرسه من فایل exe جنی موشنو که نصب میکنم میخوام واردش شم همینجوری صفحه سفید میاره برای دیوایس هم با یک سیستمه دیگه امتحان کردم (اون سیستم جنی موشنشم کار میکرد) همین که گوشی رو وصل میکردم تو خود اندروید استودیو تو قسمت تولبار اسم گوشی رو میاورد. بعد اخیرا یک چیزی کشف کردم که رو سیستمی که کار میکنم وقتی گوشی وصل میشهتو قسمت ایونت لاگ شرو میکنه به لاگ دادن ارورشو تو گوگل زدم تهش به یک فایل msu رسیدم که از خود مایکروسافت بود اما هرچی دنبالش گشتم که چطور نصبش کنم چیزی پیدا نکردم .

  • ali گفت:

    سلام اگر بخوام برنامه رو روی شبیه ساز اندروید MEmu ران کنم باید چیکار کنم تا android studio s برنامه رو بشناسه

  • علی حسامی گفت:

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

  • علی گفت:

    سلام. من برنامه را درست نوشتم موقع اجرای برنامه هیچ اروری نمیده ولی وقتی اون رو روی یه دیوایس اجرا میکنم ارور has stoped میده.
    خیلی بهش کلنجار رفتم به این پی بردم که هنگامی که دستور tostring.toint تایپ میکنم باعث بروز این مشکل میشه با وجود اینکه دستورات خط به خط کاملا درسته. لطفا راهنماییم کنید ممنونم

  • Erfan گفت:

    سلام
    ببخشید من درایور رو نصب کردم و کوشمو شناخت و حتی تیک نصب دیوایس رو هم زد اما اندروید استودیو نشناختش وقتی میرم تو دیسک منیج منت other device نیستش میشه راهنماییم کنین ؟

  • داریوش گفت:

    سلام من دیوایسو نصب کردم تو اندروید استودیوام میشناسه گوشیو ولی مشکله Run build دارم

  • masoud گفت:

    سلام.ببخشید من وقتی یک button میسازم وقتی میخوام با ای دی اون در activity main پیداش کنم ای دی button رو پیدا نمیکنه.و این ارور رو میده
    not find id.

    • سیدمهدی مطهری گفت:

      والا غیر اینکه بگم چک کنید آی دی رو درست وارد میکنید چیز دیگه ای به ذهنم نمیرسه. اگه درست بنویسیدش نیازی به وارد کردن کامل هم نیست و همون کاراکتر اول رو که وارد کنید بهتون گزینه های موجود رو پیشنهاد میده

    • رهگذر گفت:

      سلام
      من هم بعد از نصب نسخه های مختلف ۴ مشکل عدم شناسایی id رو داشتم
      بعد از چند روز عدم موفقیت در پیدا کردن راه حل مناسب آخر مجبور شدم نسخه ۳٫۶٫۳ رو نصب کنم که شکر خدا مشکل کاملا برطرف شد.
      الان بنا به دلایلی فکر کنم اگه هم به نسخه ۴ آپدیت کنم دیگه مشکل عدم شناسایی id رخ نده ولی فعلا نیازی به آپدیت پیدا نکرم که امتحانش کنم.
      امیدوارم مشکل شما هم به طریقی که گفتم برطرف بشه.

  • مبتدي گفت:

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

  • فاطمه گفت:

    سلام
    من تونستم برنامم رو روی گوشی اجرا کنم اما حالا که یه سری دستورات ذخیره اضافه کردم به برنامه و دوباره برنامه رو اجرا میکنم پیام میده که برنامه متوقف شده…وقتی دستورات مربوط به ذخیره و بازیابی رو حذف میکنم بازم خود صفحه رو باز میکنه رو گوشی
    نمیدونم مشکل کجاست؟؟
    ممنون میشم راهنمایی کنید

  • حسین گفت:

    سلام
    من وقتی پروژه رو روی گوشی خروجی میگیرم ارور has stoped ظاهر میشه
    اگه میشه راهنمایی کنین
    با تشکر

  • حسن گفت:

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

  • مرتضی گفت:

    سلام
    هنگام اجرای پروژه روی گوشی برنامه بدون ارور بسته میشه و متن has stopped ظاهر میشه.

    وقتی هم با Debug اجرا میشه این پیام در console ظاهر میشه
    ۰۱/۱۲ ۲۳:۵۷:۵۸: Launching app
    No local changes, not deploying APK
    $ adb shell am start -D -n “com.example.tks.sms/com.example.tks.sms.MainActivity” -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
    Waiting for application to come online: com.example.tks.sms | com.example.tks.sms.test
    Waiting for application to come online: com.example.tks.sms | com.example.tks.sms.test
    Waiting for application to come online: com.example.tks.sms | com.example.tks.sms.test
    Waiting for application to come online: com.example.tks.sms | com.example.tks.sms.test
    Connecting to com.example.tks.sms
    Connected to the target VM, address: ‘localhost:8602’, transport: ‘socket’
    Disconnected from the target VM, address: ‘localhost:8602’, transport: ‘socket’

  • حسن گفت:

    با سلام و تشکر از آموزش بسیار مفیدتان
    من برای کار با گوشی Sony Xperia SL درایورها را در پوشه extra کپی کردم. چون فایل نصبی نداشت. ولی کار نکرد. نمی دانم مشکل از کجاست؟
    باتشکر

    • سید مهدی مطهری (مدیر) گفت:

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

  • م.براتی گفت:

    سلام خسته نباشید
    اگر امکانش هست راجع به ماژول ها هم توضیح بدید…
    ماژول butterknife رو اگر آموزش بدید ممنون میشم…

  • Parsa Sedighi گفت:

    سلام من یه مشکلی دارم اونم اینه که وقتی برنامه در گوشی من اجرا نمی شود از دو ورژن اندروید استودیو هم استفاده میکنم یکی ۲٫۱٫۳ و یکی ۲٫۳ توی هر کدوم برنامه رو می سازم و بر روی گوشیم ران می کنم بدون هیچ اروری برنامه به گوشیم انتقال داده میشه ولی فقط یک صفحه سفید با نوار بالای برنامه معلومه همین…
    لطفا بگین چیکار کنم

  • دینا گفت:

    سپاسگزارم

    خیلی به دردم خورد

  • SADAF گفت:

    سلام
    من موقع باز کرده پروژه جدید در اندروید استودیو نسخه ۲٫۲٫۲ با ارور زیر مواجه میشم که یه مدته درگیرشم و کسی هم نتونسته کمکم کنه . ازتون خواهش میکنم منو راهنمایی کنید .
    Error:Unable to start the daemon process.
    This problem might be caused by incorrect configuration of the daemon.
    For example, an unrecognized jvm option is used.
    Please refer to the user guide chapter on the daemon at https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html
    Please read the following process output to find out more:
    ———————–
    Error occurred during initialization of VM
    Could not reserve enough space for 1572864KB object heap
    این ارور برای اینه که میگه فضای هیپ پر شده . رم سیستمم هم ۴ هست . ولی هرکاری کردم درست نشد . حافظه رم کامپیوتر رو هم پاک کردم ولی بازم درست نشد . خواهش میکنم یه راهی نشون بدین من از این مشکل بگذرم

  • سلام !
    خسته نباشید .
    وقتی با دیباگ برنامه رو اجرا میکنیم امکانش هست به برنامه لاگ بدیم . که مثلا وقتی روی یه دکمه کلیک میشه مثلا لاگ بده “Clicked” ؟