ایمپورت (import) سورس پروژه در اندروید استودیو
برای ما به عنوان برنامه نویس و توسعه دهنده اندروید، استفاده از سورسها و پروژههایی که قبلا توسط سایر افراد و یا تیمهای برنامه نویس نوشته و منتشر شده، اجتناب ناپذیر است. بنابراین لازم است نحوه ایمپورت (import) سورس پروژه در اندروید استودیو را بیاموزیم.
همچنین ممکن است در آینده، لازم شود پروژهی اندرویدی که خودمان مدتها قبل آن را نوشتیم را مجدد ویرایش کرده و نسخه جدید اپلیکیشن را به کاربران عرضه کنیم. در این مبحث نحوه باز کردن یا ایمپورت کردن سورس پروژههای اندرویدی را به طور کامل بررسی میکنیم.
به نام خدا. برای استفاده مجدد از سورس یک پروژه در محیط اندروید استودیو ابتدا باید پروژه را ایمپورت (وارد) کنیم.
اندروید استودیو را اجرا میکنم. نحوه نصب و راه اندازی این IDE را قبلا در مبحث آموزش دانلود و نصب اندروید استودیو به طور کامل بررسی کردهایم. صفحه ورودی به این صورت نمایش داده میشود:
اگر قبلا هم تجربه کار با محیط توسعه اندروید استودیو را داشتهاید حتما متوجه تغییرات در چینش گزینههای صفحه ورودی آن شدهاید.
برای استفاده از سورس پروژهها در اندروید استودیو چند گزینه مختلف وجود دارد که ابتدا به طور کلی به آنها اشاره کرده و سپس هر مورد را به صورت کامل و جامع بررسی میکنیم.
البته چنانچه قبلا پروژه(هایی) را روی سیستم خودتان کار کرده باشید در دفعات بعدی چینش گزینهها در صفحه Welcome اندروید استودیو به صورت زیر تغییر میکند، مگر آنکه پروژههای اخیر را از لیست حذف کرده و مجددا اندروید استودیو را اجرا کنید.
Open: از این گزینه برای ایمپورت و باز کردن پروژههایی استفاده میشود که قبلا هم در محیط توسعه اندروید استودیو ساخته شده است.
Get from VCS: کارکرد این گزینه مشابه مورد قبلی یعنی Open بوده با این تفاوت که برای ایمپورت پروژه از مخازن VCS مانند مخازن آنلاین GitHub و GitLab مورد استفاده قرار میگیرد.
Import project (Gradle, Eclipse ADT, etc): چنانچه پروژهای که قصد استفاده از آن را داریم در محیط دیگری غیر از Android Studio (بخصوص Eclipse) ساخته شده میبایست از این گزینه برای ایمپورت و تبدیل آن به پروژهای با ساختار اندروید استودیو استفاده کنیم.
Import an Android code sample: از این گزینه برای وارد کردن Sample code یا نمونه کدهای اندروید استفاده میشود که خارج از این مبحث بوده و به همین اشاره کلی اکتفا میکنیم.
تفاوت پروژهی ساخته شده در محیط اکلیپس و اندروید استودیو
قبل از پرداختن به گزینههای فوق بهتر است ابتدا به بررسی تفاوت پروژههای ساخته شده در دو محیط اکلیپس و اندروید استودیو بپردازیم.
احتمالا اولین سوالی که به ذهنتان رسید این است که تفاوت یک پروژه ساخته شده در محیط توسعه Eclipse با پروژهای که توسط Android Studio ایجاد شده در چیست و چطور باید تشخیص بدهیم پروژهای که از یک وب سایت دانلود کردهایم در کدام محیط توسعه ساخته شده است؟
تشخیص این دو از یکدیگر بسیار ساده است. کافی است به ساختار پروژه نگاه بیندازید. به دو تصویر زیر دقت کنید:
تصویر نخست مربوط به یک پروژه اکلیپس است در حالی که تصویر دوم یک پروژه ساخته شده در اندروید استودیو را نشان میدهد. واضحترین تفاوت این دو، وجود فولدر و فایلهایی است که در نامگذاری آنها کلمه gradle بکار رفته.
با بیلد سیستم گریدل در مباحث ابتدایی آشنا شدیم و میدانیم این بیلد سیستم در اندروید استودیو بکار رفته بنابراین پروژهای که حاوی فایلهای مرتبط با gradle باشد در محیط اندروید استودیو ساخته شده و در غیر اینصورت مربوط به اکلیپس است.
روشهای import (ایمپورت) سورس پروژه در اندروید استودیو
همانطور که در قسمت قبل بیان شد، برای ایمپورت کردن پروژه اندرویدی ۳ گزینه متفاوت در Android Studio وجود دارد که بسته به نوع سورسی که در اختیار داریم میبایست گزینه مناسب را انتخاب کنیم. حالا گزینهها را به ترتیب مشخص شده در تصویر ابتدایی آموزش بررسی میکنیم.
import کردن پروژهی اندروید استودیو
گزینههای شماره ۱ و ۲ مربوط به پروژههایی میشود که در محیط اندروید استودیو ساخته و توسعه داده شدهاند.
۱٫ Open: این گزینه برای باز کردن (ایمپورت کردن) پروژههایی استفاده میشود که قبلا در محیط اندروید استودیو ساخته شده و یک نسخه از آن را در اختیار داریم. اینکه پروژه مربوط به خودمان باشد یا آنرا از منبع دیگری دانلود کرده باشیم اهمیتی ندارد.
با کلیک بر روی این گزینه و انتخاب پوشه مربوط به پروژه، فرایند Build (ساخته شدن) پروژه آغاز میشود:
همانطور که در تصویر بالا مشاهده میکنید تمامی سورس پروژههای لیست شده، دارای آیکون و نماد اندروید استدیو هستند که نشان میدهد این پروژهها قبلا در همین IDE ساخته شده اند. در صورتی که پروژه مربوط به محیط Eclipse یا سایر موارد باشد، بجای نماد اندروید استودیو، آیکون یک پوشه عادی نمایش داده میشود.
در حال حاضر و با توجه به اینکه حدود ۷ سال از انتشار اولین نسخه پایدار اندروید استودیو گذشته تقریبا تمامی سورسهای قابل استفاده موجود در سطح وب توسط این IDE ساخته شده است. سورسهای قدیمی که در محیط اکلیپس ساخته شده احتمالا آنقدر قدیمی هستند که به دلیل بروز تغییرات متعدد در کتابخانههای اندرویدی و کدها، دیگر قابل استفاده نخواهند بود (مگر با درد و خونریزی فراوان!).
من در حدود ۶ ماه قبل از تهیه آموزش فعلی، پروژهای با نام ReceiveSMS ساخته بودم که مربوط به آموزش دریافت SMS در برنامه نویسی اندروید میشود. حالا فرض میکنیم قصد دارم این پروژه را دوباره باز کرده و تغییراتی را روی آن اعمال کنم. این پروژه را انتخاب کرده و سپس با زدن OK عملیات ساخت پروژه در محیط اندروید استودیو آغاز میگردد.
ابتدا دیالوگی مانند تصویر زیر ظاهر میشود که از ما میخواهد ایمن بودن سورس را تایید یا رد کنیم:
من از ایمن بودن سورس پروژه و اینکه حاوی کدهای مخرب نیست، اطمینان دارم بنابراین گزینه Trust Project را انتخاب میکنم. چنانچه به هر دلیل این اطمینان را نداشته باشیم، با انتخاب گزینه Stay in Safe Mode پروژه در محیط امن و ایزوله اجرا خواهد شد.
پس از ورود به محیط اصلی اندروید استودیو، بلافاصله عملیات دریافت ابزار و کتابخانههای مورد نیاز پروژهای که ایمپورت کردهایم آغاز میشود.
مطابق تصویر فوق مشاهده میکنید در تب Build اروری ظاهر شده که میگوید فرایند نصب ابزار gradle-6.7.1-bin.zip قابل انجام نیست. علت دریافت این ارور عدم اتصال سیستم من به اینترنت بود.
بنابراین اگر اتصال اینترنت را برقرار و پروژه را سینک کنم (گزینه Sync project with Gradle files در نوار تولبار اندروید استودیو) فرایند دریافت فایل gradle-6.7.1-bin.zip آغاز خواهد شد.
علت نیاز به دریافت این نسخه از بیلد سیستم Gradle در تفاوت نسخه نصب شده در اندروید استودیو فعلی من با نسخهای است که قبلا این پروژه توسط آن ساخته شده است. در حال حاضر Gradle 7.0.2 روی اندروید استودیو من نصب شده که از Gradle 6.7.1 جدیدتر است.
در اینجا ۲ انتخاب داریم. انتخاب اول این است که اتصال اینترنت را برقرار کرده و اجازه دهم گریدل و سایر ابزار و کتابخانههای موجود در سورس با همان نسخهای که قبلا تعریف شده دانلود شود. و انتخاب دوم اینکه قبل از ایمپورت کردن پروژه، گریدل و سایر ابزار را بر اساس نسخه موجود در اندروید استودیو خودمان ویرایش کنیم.
به دو دلیل، انتخاب دوم منطقیتر خواهد بود. دلیل اول اینکه بهتر است پروژه با ابزار و کتابخانههای جدید Build شود تا بیشترین سازگاری را با دستگاههای اندرویدی جدید داشته باشد. و دلیل دوم عدم نیاز به دریافت چند ده مگابایت فایل برای ایمپورت هر پروژه است که صد البته دلیل اول از اهمیت بسیار بالاتری برخوردار خواهد بود.
بنابراین فعلا اندروید استودیو را میبندم و به سراغ پوشه سورس پروژه میروم. قصد دارم اصلاحات لازم بر روی پروژه را توسط یک ویرایشگر ساده مانند Notepad++ انجام دهم.
این کاملا به سلیقه شما بستگی دارد که ویرایش را قبل از ایمپورت پروژه و در محیطی دیگر انجام دهید یا بعد از ایمپورت و در محیط اندروید استودیو.
ساده ترین راه برای اینکه بدانیم در حال حاضر چه نسخهای از ابزار در اندروید استودیو نصب هستند، ساخت یک پروژه جدید و سپس مقایسه فایلهای دو پروژه با یکدیگر است.
مطابق آموزش ساخت پروژه جدید در اندروید استودیو یک پروژه جدید با نام دلخواه Test میسازم. البته اگر به تازگی پروژهای ساختهاید میتوانید از فایلهای آن کمک بگیرید و نیازی به ساخت پروژه دیگری نیست.
– فایل build.gradle(project): در قدم نخست، فایل build.gradle دو پروژه را با یکدیگر مقایسه میکنم:
همانطور که در تصاویر مشاهده میکنید، عدد نسخه مربوط به پلاگین گریدل (com.android.tools.build:gradle) در دو پروژه متفاوت است. این عدد برای پروژه قدیمی که قصد ایمپورت آن را دارم ۴٫۲٫۱ و برای پروژه جدید ۷٫۰٫۳ است. بنابراین تنها کاری که در این فایل انجام میدهم، جایگزین کردن عدد ۷٫۰٫۳ با ۴٫۲٫۱ در build.gradle پروژه ReceiveSMS خواهد بود.
تغییر دیگری که در build.gradle این دو پروژه مشاهده میشود، حذف بلاک allprojects در پروژه جدید است. بودن یا نبودن این بلاک تاثیری در عملکرد این پروژه ندارد اما با اینحال ترجیح میدهم ساختار پروژه بیشترین شباهت را به پروژهای داشته باشد که به تازگی در اندروید استودیو ساختهام. بنابراین این بلاک را هم حذف میکنم.
در واقع با جایگزین کردن عدد مربوط به نسخه پلاگین گریدل و حذف بلاک allprojects، فایل build.gradle دو پروژه کاملا شبیه یکدیگر شده و درست مانند این است که فایل موجود در پروژه Test را جایگزین فایل موجود در پروژه ReceiveSMS کرده باشم.
اما به دلیل جلوگیری از بروز اشتباه، از جایگزین کردن کامل فایلها صرف نظر میکنم. بخصوص در فایلهای دیگرِ پروژه که حاوی جزئیات و کدهای مختص به هر پروژه بوده (مانند نام پکیج پروژه) که جایگزینی کامل فایل سبب بروز مشکلات متعددی خواهد شد.
به همین دلیل لازم است هنگام مقایسه ساختار سورس پروژه قدیمی که قصد استفاده از آن را دارید با پروژهای که جدیدا روی اندروید استودیو ساختهاید تمامی جزئیات را با دقت بررسی نمائید. برای مثال در نسخههای قبلی در بلاک repositories یک مخزن دیگر با نام jcenter() وجود داشت که به تازگی حذف شده و مخزن mavenCentral() جایگزین آن شده است.
البته حذف مخزن آنلاین jcenter() را برای توسعه دهندگان ایرانی باید به فال نیک گرفت زیرا این مخزن به شدت بر روی IP های ایران حساس بود و سالها برنامه نویسان ایرانی را زجر میداد!
اگر در جایی ابهام دارید ابتدا صفحه مشکلات و پرسشهای رایج و سپس دیدگاههای موجود در انتهای همین صفحه را بررسی کرده و چنانچه باز هم به جواب نرسیدید، سوال خود را مطرح کنید.
– فایلgradle-wrapper.properties: در قدم بعد، فایل gradle-wrapper.properties در مسیر gradle > wrapper دو پروژه را با یکدیگر مقایسه میکنم:
تصویر اول مربوط به پروژه قدیمی و تصویر دوم مربوط به پروژه جدید است. اگر بخاطر داشته باشید در ابتدای جلسه که قبل از ویرایش سورس، پروژه را ایمپورت کردیم بلافاصله با اخطار عدم دسترسی به مخزن آنلاین جهت دریافت gradle-6.7.1-bin.zip مواجه شدیم.
آدرس دریافت این فایل که مربوط به بیلد سیستم گریدل است اینجا تعریف شده. کافیست لینک فایل موجود در فایل مربوط به پروژه جدید را جایگزین لینک موجود در فایل سورس قدیمی کنیم تا از شر آن ارور راحت شویم و نیازی به دانلود گریدل نسخه قدیمی نباشد.
البته با توجه به اینکه در این دو فایل نیز تنها تفاوت مربوط به نسخه گریدل موجود در لینک دریافت فایل هست، میشد به راحتی فایل را جایگزین کرد. اما شاید یک ماه بعد از تهیه این آموزش، توسعه دهندگان Android Studio تصمیم بگیرند در این فایل تغییر دیگری هم لحاظ کنند که در اینصورت احتمالا با جایگزین کردن فایل با مشکل مواجه خواهیم شد.
– فایلbuild.gradle(app): در مرحله بعد باید فایل build.gradle درون فولدر app پروژه را اصلاح کنم. این همان build.gradle (Module:app) است. فایل هردو پروژه را باز میکنم:
جزئیات مربوط به این فایل را قبلا در مبحث آموزش ساخت فایل نصبی APK توضیح دادهام. چه تفاوتهایی را در این دو تصویر مشاهده میکنید؟ علاوه بر اعداد مربوط به نسخه ابزار SDK، عناوین مربوط به آنها نیز تغییر کرده است.
آیتم compileSdkVersion در سورس پروژه قدیمی تبدیل به compileSdk در پروژه جدید شده است. همچنین buildToolsVersion به کلی از این فایل حذف شده و در فایل پروژه جدید وجود ندارد. البته این به معنای عدم استفاده از ابزار Build Tools نیست.
ظاهرا توسعه دهندگان اندروید استودیو اخیرا به این نتیجه رسیدهاند که به صورت پیش فرض از آخرین نسخه بیلد تولز موجود در SDK برای بیلد شدن پروژه استفاده شود؛ بدون ذکر نسخه آن در سورس پروژه.
یعنی چنانچه در تنظیمات پروژه (File > Project Structure و یا گزینه Project Structure در نوار ابزار اصلی اندروید استودیو) نسخه مشخصی از Build Tools را برای پروژه جدید خود تعریف کنید، این آیتم به فایل build.gradle اضافه خواهد شد:
با انجام این کار، buildToolsVersion به بلاک android (البته انتهای بلاک) اضافه شد:
android { compileSdk 31 defaultConfig { applicationId "ir.android_studio.tesssst" minSdk 16 targetSdk 31 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildToolsVersion '31.0.0' }
دو مورد minSdkVersion و targetSdkVersion هم مانند compileSdk خلاصه شده و کلمه Version از انتهای آنها حذف شده است.
البته چیزی که ما در اینجا باید تغییر دهیم نام آیتمها نیست و خود اندروید استودیو در هنگام ایمپورت پروژه این تغییرات را اعمال میکند. مگر آنگه مثل من مقداری وسواسی باشید و دلتان بخواهد قبل از وارد کردن پروژه به محیط اندروید استودیو این تغییرات را هم خودتان به صورت دستی اعمال نمائید!
بنابراین اگر حوصله انجام کار اضافی را ندارید به تغییر عدد مقابل هرکدام اکتفا کنید. یعنی عدد ۳۰ مربوط به آیتم compileSdkVersion را به ۳۱ تغییر میدهم. و به همین ترتیب برای دو آیتم دیگر یعنی minSdkVersion و targetSdkVersion.
عدد مقابل compileSdk نسخهای از API که پروژه با آن کامپایل خواهد شد را تعیین میکند بنابراین عموما آنرا بر روی جدیدترین API منتشر شده تنظیم میکنیم تا بیشترین سازگاری را با دستگاههای اندرویدی جدید داشته باشد.
نسخه targetSdk هم معمولا با نسخه compileSdk به صورت برابر تعیین میشود. بنابراین برای این آیتم هم عدد ۳۱ را جایگزین ۳۰ میکنم.
البته حتما میدانید آیتم minSdk مربوط به حداقل نسخهای از اندروید است که میخواهیم برنامه ما از آن پشتیبانی کند و بر خلاف دو مورد قبل، در اینجا ما به عدد موجود در پروژه جدید کاری نداریم و آنرا بر اساس ساختار پروژه خود تعیین میکنیم.
برای مثال ممکن است در پروژه خود از کد یا کتابخانهای استفاده کنیم که فقط در API 19 و به بالا پشتیبانی میشود.
بلاک release موجود در بلاک buildTypes مربوط به تنظیمات کاهش حجم خروجی برنامه و مبهم سازی کدها میباشد که در جلسه آموزش بهینه سازی و محافظت از سورس پروژه اندرویدی به طور مفصل به این مقوله پرداخته شده.
در بلاک compileOptions نسخهای از Java که پروژه توسط آن کامپایل میشود تعریف شده. همانطور که مشاهده میکنید در هردو پروژه جاوا ۱٫۸ (JavaVersion.VERSION_1_8) استفاده شده بنابراین تغییری نیاز نیست.
و آخرین قسمت این فایل یعنی بلاک dependencies که شامل کتابخانههای استفاده شده در پروژه میشود. شاید مثل قسمتهای قبل، این قسمت را نتوان به طور کامل اصلاح نمود.
برای مثال در هر پروژه از کتابخانههای متفاوتی استفاده میشود. ممکن است سورس پروژهای که قصد ایمپورت آنرا دارید از کتابخانه Retrofit برای اتصال به وب سرویس استفاده کرده باشد در حالی که در پروژه جدید و خامی که صرفا برای مقایسه ساختار اصلی دو پروژه ساختهاید این کتابخانه وجود ندارد.
همچنین چنانچه سورس پروژه قبلی بر پایه support نوشته شده باشد، صرف اصلاح نام کتابخانهها در بلاک dependencies موجب ارتقاء به androidX نمیشود و لازم است این ارتقاء و مهاجرت به صورت خودکار و در خود اندروید استودیو انجام شود که در جلسه آموزش مهاجرت به AndroidX به این مسئله مفصل پرداخته شده است.
بنابراین ویرایش این قسمت را میتوان محدود به نسخه کتابخانههای پیش فرض و مشترک دانست. برای مثال در پروژه ReceiveSMS برای کتابخانه androidx.appcompat:appcompat نسخه ۱٫۳٫۰ قید شده که در پروژه جدید به ۱٫۳٫۱ ارتقاء پیدا کرده است.
همچنین کتابخانه androidx.constraintlayout:constraintlayout از ۲٫۰٫۴ به ۲٫۱٫۲ تغییر کرده است. اگر با کتابخانه ConstraintLayout آشنایی ندارید توصیه میکنم آموزش طراحی رابط کاربری اندروید با ConstraintLayout را مطالعه کنید.
چنانچه این اعداد را ویرایش نکنم، هنگام باز کردن پروژه، اندروید استودیو ابتدا سعی در دریافت نسخه قدیمی این کتابخانهها را خواهد داشت و پس از دریافت آن، اخطاری نمایش خواهد داد مبنی بر اینکه شما در حال استفاده از نسخه قدیمی این کتابخانهها هستید!
پس چه بهتر که همینجا گربه را دم حجله بکشیم و با ویرایش نسخه این کتابخانه و سایر کتابخانههای پیش فرض پروژههای اندرویدی، از اتلاف زمان بعد از ایمپورت پروژه جلوگیری کنیم.
تفاوت دیگری که البته در این دو پروژه وجود ندارد و مربوط به سورسهای حدود ۲ سال قبل از بروزرسانی این آموزش (یعنی حدود سال ۱۳۹۸) میشود، جایگزینی واژه compile با implementation برای کتابخانههاست.
یک کتابخانه را مثال میزنم:
compile 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.appcompat:appcompat:1.3.1'
خط اول برای پروژههای بسیار قدیمی است که در نسخه ۳ اندروید استودیو compile با implementation جایگزین شد. البته در عمل تقریبا هیچ اتفاقی صورت نگرفته و صرفا تغییر عنوان است و نیازی هم نیست اینها را خودمان اصلاح کنیم.
اگر به طور کل قصد استفاده از ابزار تست را برای پروژه خود ندارید بهتر است این چند خط را کاملا حذف کنید:
testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
قطعا حذف این ۳ خط ساده تر از ویرایش نسخه هرکدام خواهد بود.
خروجی نهایی این فایل به اینصورت شد:
build.gradle(Module:app)
plugins { id 'com.android.application' } android { compileSdk 31 defaultConfig { applicationId "ir.android_studio.receivesms" minSdk 16 targetSdk 31 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.2' }
خب! تا اینجای کار هردو فایل build.gradle و همچنین gradle-wrapper.properties پروژه را اصلاح کردیم. حالا دوباره اندروید استودیو را اجرا کرده و توسط گزینه Open پروژه ReceiveSMS را انتخاب میکنم.
اینبار بدون معطلی و عدم نیاز به دریافت گریدل و سایر ابزاری که نسخهای متفاوت از ابزار نصب شده بر روی سیستم ما داشته باشند، پروژه ایمپورت و آماده کار شد:
۲٫ Get from VCS: پرداخت به VCS (Version Controlling System) از حوصله این آموزش خارج است. خلاصه اینکه برای ایمپورت کردن مستقیم سورس پروژههایی که روی مخازن VCS میزبانی میشود از این گزینه میتوان استفاده کرد.
مخازن Git از پرکاربردترین مخازن VCS هستند که GitHub و GitLab از معتبرترین مخازن گیت آنلاین به شمار میروند.
بنابراین چنانچه بخواهیم سورس پروژهای را استفاده کنیم که بر روی یکی از این مخازن موجود هست، نیازی به دانلود دستی و سپس ایمپورت آن توسط گزینه Open نبوده و به طور مستقیم از طریق این گزینه از مخزن مربوطه دریافت و ایمپورت میشود.
با کلیک روی گزینه Get from VCS پنجره زیر باز میشود:
در منوی سمت چپ سه گزینه وجود دارد که Repository URL در حالت پیش فرض انتخاب شده. دو گزینه دیگر مربوط به مخزن GitHub است که با ورود به حساب کاربری در گیت هاب میتوان به سورسهایی که در اکانت خودمان میزبانی شده دسترسی سادهتر داشت.
با گزینههای گیت هاب کاری نداریم. فرض میکنیم میخواهیم سورس پروژه اندرویدی که توسط شخص یا تیم دیگری توسعه داده شده و بر روی یک مخزن VCS موجود هست را استفاده کنیم.
در قسمت Version Control به صورت پیش فرض Git انتخاب شده که سه گزینه دیگر شامل Google Cloud، Mercurial و Subversion هم قابل استفاده است.
من قصد دارم یک پروژه اندرویدی که توسط شخص دیگری توسعه داده شده و آنرا بر روی اکانت GitHub خود منتشر کرده را ایمپورت کنم.
این سورس مربوط به برنامهای است که تصاویر را به فایل PDF تبدیل میکند. این پروژه با نام Images to PDF و در آدرس زیر منتشر شده است:
https://github.com/Swati4star/Images-to-PDF
تصویر زیر مربوط به صفحه این سورس در گیت هاب است:
همانطور که ساختار پروژه نشان میدهد، این سورس توسط بیلد سیستم گریدل ساخته شده بنابراین مربوط به محیط توسعه اندروید استودیو میباشد.
برای ایمپورت پروژه کافیست URL مربوط به Git پروژه که به پسوند .git ختم شده را کپی کرده و در فیلد Git در اندروید استودیو قرار دهیم:
در فیلد Directory محل مربوط به ذخیره پروژه تعیین میشود. در پایان روی دکمه Clone کلیک میکنم تا پروژه کلون و محیط پروژه باز شود.
همانطور که در تصویر فوق مشاهده میکنید پروژه در حال کلون شدن است و فایلهای پروژه به صورت مستقیم از مخزن دریافت و بر روی سیستم من ذخیره میگردد. با پایان فرایند دریافت سورس از مخزن گیت، محیط پروژه آماده میشود:
البته بعد از اتمام فرایند دریافت سورس از مخزن و هنگام شروع فرایند دریافت ابزار مورد نیاز پروژه میتوان آنرا متوقف و سپس پروژه را اصلاح نمود تا از دانلود فایلهای اضافی جلوگیری بعمل آید.
اکثر خطاها قبلا در وب سایتهایی مانند Stackoverflow.com مطرح و توسط افراد با تجربه پاسخ داده شده است.
برای مثال یکی از خطاهایی که من اخیرا در ایمپورت یک پروژه دریافت کردم ارور زیر بود:
Manifest merger failed : android:exported needs to be explicitly specified for . Apps targeting Android 12 and higher are required to specify an explicit value for 'android:exported' when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details
در متن این ارور گفته شده برای اپلیکیشنهایی که برای اندروید ۱۲ و یا بالاتر ساخته شده یا به عبارتی targetSdk 31 به بالا تعریف شده، لازم است در تگهای activity موجود در مانیفست پروژه که دارای intent filter هستند، یک ویژگی با نام android:exported و با یک مقدار true یا false اضافه شود.
یک لینک هم در انتهای متن اخطار قید شده که مربوط به توضیحات بیشتر این مساله است.
در برخی موارد توضیحات موجود در مستندات اندروید برای غیر حرفهای ها مقداری گنگ خواهد بود که شاید با جستجوی ارور در گوگل و مطالعه بحثهای پیرامون آن در stackoverflow و سایر نتایجی که در گوگل نمایش داده میشود بهتر به نتیجه برسید.
import کردن پروژهی اکلیپس (ADT) در اندروید استودیو
در اواخر سال ۲۰۲۱ که در حال بروزرسانی این آموزش هستم، کمتر پروژهای را میتوان یافت که مربوط به محیط توسعه اکلیپس یا ADT باشد. با اینحال لازم میدانم یک اشاره کلی هم به این مساله داشته باشم. بنابراین گزینه سوم را در این بخش بررسی میکنیم.
۳٫ Import project (Gradle, Eclipse ADT, etc.): برای این قسمت من از یک پروژه تحت اکلیپس استفاده میکنم که حدود ۶ سال قبل آنرا دانلود کرده بودم. روی گزینه Import project کلیک کرده و پوشه مربوط به پروژه را انتخاب میکنم:
ملاحظه میکنید بر خلاف قسمت قبل که پروژه ReceiveSMS با نماد اندروید استودیو نمایش داده شده بود، در اینجا آیکون یک پوشه عادی را نشان میدهد.
از آنجایی که ساختار این پروژه با ساختار پروژه اندروید استودیو متفاوت است، در فرایند ایمپورت، این ساختار به طور کامل دگرگون میشود. لذا برای از بین نرفتن نسخه اصلی پروژه، هنگام ایمپورت پروژههای ADT، اندروید استودیو یک مسیر جداگانه برای ذخیره نسخه جدید ایجاد میکند و پوشهی اصلی پروژه بدون تغییر باقی میماند.
با انتخاب و تایید پروژه، به صفحه بعد منتقل میشود که در اینجا محل ذخیره نسخه ایمپورت شده پروژه را باید در قسمت Import Destination Directory تعیین کنیم:
اندروید استودیو در حین ایمپورت، تغییرات لازم برای سازگاری پروژه قدیمی با محیط توسعه جدید را بطور خودکار انجام میدهد. مانند اضافه کردن فایلهای مربوط به بیلد سیستم گریدل و… .
در این مرحله چند آپشن وجود دارد که همگی به صورت پیش فرض تیک خورده و بهتر است به همین صورت باقی بماند. به عنوان مثال گزینه اول، فایل محلی کتابخانهها را حذف و نسخه دریافتی از مخزن آنلاین گوگل را جایگزین میکند.
در نهایت با کلیک روی دکمه Finish فرایند ایمپورت پروژه در مسیر تعیین شده آغاز میشود. البته با توجه به قدیمی بودن سورس، درگیریهای زیادی برای رفع خطاها و سازگار کردن پروژه با محیط اندروید استودیو خواهید داشت.
این قسمت ممکن است آنقدر زجر آورد باشد که کاملا قید استفاده از سورس یک پروژه قدیمی را بزنید!
توجه داشته باشید تغییراتی که طی فرایند تبدیل پروژه Eclipse ADT به یک پروژه سازگار با محیط توسعه جدید انجام شده در فایل import-summary.txt موجود در پوشه پروژه لیست شده است و میتواند راهنمای خوبی برای آگاهی از شیوه اعمال تغییرات در ساختار پروژه باشد.
تعداد صفحات : ۲۹
حجم : ۲ مگابایت
قیمت : رایگان
تاریخ بروزرسانی آموزش : ۱۴۰۰/۰۹/۲۲
دانلود رایگان با حجم ۲ مگابایت لینک کمکی
من وقتی می خوام apk بگیرم این خطا می دهد
Failed to install the following Android SDK packages as some licences have not been accepted.
build-tools;30.0.2 Android SDK Build-Tools 30.0.2
To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.
Alternatively, to transfer the license agreements from one workstation to another, see http://d.android.com/r/studio-ui/export-licenses.html
Using Android SDK: C:\Users\F.Rezakhani\AppData\Local\Android\Sdk
نسخه جدید Build Tools رو نصب کنید ببینید مشکل حل میشه؟ لطفا نتیجه رو هم اینجا اعلام کنید بقیه دوستان استفاده کنن
سلام مهندس خسته نباشین/این بخش رو خوندم و تمامی اصلاحات رو انجام دادم ولی بازم داره ارور میده مشکل گریدل و کتابخانه به احتمال زیاد داره/
https://s4.uupload.ir/files/1_l1ln.png
https://s4.uupload.ir/files/2_ldfy.png
بزرگوار اگه بخواید هر اروری که میگیرید رو اینجا یا جای دیگه ای مطرح کنید و یکی دو روز منتظر جواب بمونید که تا ۵ سال هم به جایی نمیرسید. هر اروری که شما میگیرید قبلا برای ۰زاران نفر دیگه هم اتفاق افتاده که کافیه داخل گوگل سرچ کنید تا به جواب برسید. معمولا نتیجه اول جستجوها مربوط به stackoverflow.com هستن
سلام ببخشید چطور میتونم اندرویدx رو در ورژن های ۳ به بالا غیرفعال کنم؟
منظورتون در اندروید استودیو ۳ به بالا هست؟
سلام،من تو متریال دیزاین طرحی رو درست کردم و بعد ذخیره اش کردم،اما وقتی اسم فایل متریال دیزاین رو در کد ها وارد میکنم،اعمال نمیشه و صفحه سیاه میاد بالا،یه ارور هم به کد میده،کد ها مشکل نداره فقط ایراد میتونه از متریال باشه،لطفا راهنمایی کنید،باتشکر
چه اروری می گیرید؟
سلام..
من یه پروژه تقریبا سنگین دانلود کردم .پروژه یه فروشگاهه که با همین روش پیش رفتم sync میشه و قشنگ بالا میاد ولی یه بخش هایی ازش ارور داره و موقع اجرا کردنش ارور میده میخواستم بدونم آیا میشه پروژه رو بفرستم براتون اگه امکانش هست شما تستش کنید ببینید چجوری میتونم درست کامپایلش کنم ؟
حتی اگه لازم باشه و هزینه ای داشته باشه بازم قبول دارم اگه میشه راهنماییم کنید ممنون میشم
نیازی نیست پروژتون رو برای کسی ارسال کنید. ارورها رو یکی یکی سرچ کنید تا ببینید ایراد مربوط به چی هست و رفعش کنید. هر اروری که گرفتید قبلا هزاران نفر دیگه هم باهاش روبرو شدن و در وب سایتهایی مثل stackoverflow.com مطرح شده
واقعا مطالبتون کامل و بدون نقصه انصافا
باورتون نمیشه خیلی وقته همش مشکل ایمپورت کردن داشتم و همه جا داشتم در موردش جستجو میکردم چون خیلی ارور زیاد داشت. من قبل اینکه این روش رو بخونم همه چی رو آنلاین میزدم دانلود میشد ولی آخرش بازم یه ارور میداد که هر چی در موردش توی اینترنت میچرخیدم هیچی پیدا نمیشد. تا اینکه دوباره اومدم سراغ سایتتون مثه قبل کارم راه افتاد و یه دنیا ممنونم از این که وقتتون رو صرف این آموزشا برای علاقمندای این برنامه نویسی کردین.
واقعا این کامنتا نمیتونه جوابگوی زحماتتون باشه ولی حداقل کاریه که میتونیم بکنیم.
بازم یه دنیا ممنونم از شما و مطالب خوب و ارزشمندتون
با آرزوی موفقیت برای شما…
خوشحالم که تونستم زکات علمم رو بپردازم. موفق و پیروز باشید
باسلام وعرض خسته نباشید خدمت شما . راستش مشکلی که داشتم اینه که وقتی یه سورس اندروید استودیو رو ایمپورت می کنم عبارت “no render traget select ” رو نشون می ده و اون بالا گوشه به جای شمارهAPI نوشته “null ” حالا من می دونم که احتمالا مشکل ازمشخص نبودن API است حالا چطوری مشکل رو حل کنم یعنی به جای عبارت “null ” مثلا عبارت “API 19” جایگزین شود خواهشا کمک کنید…
طبق همین آ»وزش قبل از ایمپورت سورس، فایل build.gradle رو چک کنید و مطابق ابزارهای موجود در SDK خودتون اصلاحش کنید. بعد اصلاح نباید مشکلی داشته باشید
سلام
سورسی که از طریق دی کامپایل کردن فایل apk داریم میشه از این روش ویرایش و اجرا کرد؟
ساختار سورس رو بررسی کنید اگه با سورس عادی مطابقت میکنه نباید مشکلی باشه
سپاس
سلام و عرض ادب خدمت جناب استاد مطهری؛
آموزشها فوق العاده هستن، هیچ نکته مبهمی نمیمونه واقعا.
واقعا توصیه میکنم به دوستانی که تازه با این سایت آشنا شدن، حتما از مطالب آموزشی استفاده کنند و این سایت رو دنبال کنند، چون مدام در حال بروز رسانی و اضافه کردن مطالب بسیار مفیدِ.
تا اینجا خیلی کمکم کرده و قطعا در آینده هم کمکم خواهد کرد.
سپاسگزار…
خوشحالم که تونستم مفید باشم بزرگوار. موفق و پیروز باشید
واقعا تشکر می کنم از شما استاد گرانقدر. همانند مباحث گذشته مطلب بسیار مفیدی بود.
یک سوال دارم خدمتتان. چه موقع آموزش کاتلین را شروع می فرمایید. بی صبرانه منتظر هستیم
ممنون. ان شا الله بعد تکمیل شدن مباحث ضروری جاوا، کاتلین رو شروع میکنم
موفق باشید ????