برای ایجاد یک ماژول در استودیو اندروید انتخاب کنید

File > New > New Module

سپس 2 گزینه وجود دارد. اگر قصد دارید یک کتابخانه جاوا خالص ایجاد کنید، نوع آن را مشخص کنید کتابخانه جاوا ، در نتیجه کد چنین کتابخانه ای در آن کامپایل می شود شیشهفایل. این راحت است، زیرا می توانید از آن نه تنها در برنامه های Android استفاده کنید. اگر می خواهید از چیزهای خاص اندروید استفاده کنید و به کلاس هایی از بسته های android.* نیاز دارید، پس ایجاد کنید کتابخانه اندروید ، که در کامپایل شده است AARفایل. در این صورت به گزینه دوم نیاز خواهید داشت.

مهم: minSDKVersion (فایل‌های build.gradle ماژول‌ها) برنامه باید مطابق یا بزرگ‌تر از آنچه در ماژول کتابخانه مشخص شده است باشد. buildToolsVersion مشخص شده باید در Android SDK تنظیم شود. هر ماژول کتابخانه کلاس منبع خود را تولید می کند (*.R.class). هنگامی که کتابخانه های اندروید به پروژه اضافه می شود و آن ساخته می شود، منابع آنها ادغام می شوند که می تواند منجر به درگیری شود. بنابراین، قراردادهای زیر در مستندات تعریف شده است:

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

اتصال کتابخانه اندروید

کتابخانه‌های اندروید به‌عنوان وابستگی گنجانده شده‌اند (اگر کتابخانه به‌عنوان یک پروژه جداگانه در AndroidStudio ایجاد شده باشد). در اینجا 2 گزینه نیز وجود دارد:

1. یا فایل AAR (یا JAR) کامپایل شده را اضافه کنید:

File > New Module - Import .JAR/.AAR Package > Next - مسیر فایل ARR (یا JAR) را وارد کنید > Finish

2.یا کتابخانه را از منبع وارد کنید:

File > New > Import Module - مسیر دایرکتوری که منابع کتابخانه در آن قرار دارند را وارد کنید > Finish

مهم:مطمئن شوید که نام کتابخانه اندروید به آن اضافه شده است settings.gradle

شامل ":app"، ":core"، ":personal"، ":client"

و در بلوک وابستگی های فایل ظاهر شد build.gradleبرنامه های کاربردی

وابستگی ها (کامپایل پروژه(":هسته") کامپایل پروژه(":شخصی") کامپایل پروژه(":مشتری") )

کتابخانه‌های Android می‌توانند شامل منابع، کتابخانه‌های JAR دیگر باشند AndroidManifest.xml.

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

کتابخانه کامپایل شده اندروید یک بایگانی فشرده معمولی با پسوند .arr است که شامل فایل ها و دایرکتوری های مورد نیاز زیر است:

  • /AndroidManifest.xml
  • /classes.jar
  • /res/
  • /R.txt

و اختیاری:

  • /دارایی های/
  • /libs/ نام.شیشه
  • /jni/ abi_name/نام.پس کجا abi_nameیکی از ABI های پشتیبانی شده اندروید)
  • /proguard.txt
  • /lint.jar


Android Studio: ماژول در "ویرایش پیکربندی" نمایش داده نمی شود (13)

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

من یک پروژه با چندین زیر پروژه به اندروید استودیو وارد کرده ام.

من می خواهم یک پروژه فرعی را شروع کنم.

من با موفقیت آن را به عنوان یک ماژول به زیر پروژه های build.gradle تبدیل کردم.

برای اجرای آن به مسیر Run > Edit Configurations > Android Application رفتم.

مسئله. وقتی می‌خواهم یک ماژول را انتخاب کنم، هیچ یک از آن‌ها در کشویی ظاهر نمی‌شوند.

چرا این هست؟

ویرایش: به عنوان یک ماژول در Groovy نشان داده می شود، اما نه در یک برنامه اندروید. چگونه می توانم آن را در برنامه اندروید دریافت کنم؟

Goto Android >> Gradle Scripts >> Build Gradle (ماژول: برنامه)

مطمئن شوید که خط اول آن فایل به این صورت است.

اعمال افزونه: "com.android.library"

برای من با راه اندازی مجدد اندروید استودیو درست شد. درست مثل روزهای خوب قدیمی Eclipse

برای مورد من، یک تازه کار، من پروژه ام را فریاد زدم، نمی دانستم چگونه، اما دیگر کار نمی کند و از manifest، R، همه چیز شکایت کردم. من برخی از موارد مشابه را در تنظیمات خود کشف کردم. Gradle شامل ":app" نیست، فقط من این را اضافه کردم، دوباره در راه بودم.

در نهایت متوجه شدم که چرا وقتی پیکربندی AndroidTests را به ماژول com.android.library اضافه می کنم، ماژول نشان داده نمی شود.

اگر ماژول کتابخانه خود را در build.gradle برنامه build.gradle کنید به این صورت:

کامپایل پروژه (":yourlibrary")

از آنجایی که یک ماژول کتابخانه به طور پیش‌فرض با حالت انتشار کامپایل شده است، نمی‌توانید تست‌های Android را روی آن اجرا کنید، بنابراین در لیست ماژول نشان داده نمی‌شود. با اصلاح زیر درستش کردم:

پیکربندی زیر را به build.gradle ماژول کتابخانه خود اضافه کنید:

PublishNonDefault true

پس از تغییرات build.gradle، می توانید با ویرایش build.gradle ماژول برنامه خود، کامپایل کتابخانه خود را اشکال زدایی کنید، به عنوان مثال:

کامپایل پروژه (": کتابخانه شما") + اشکال زدایی پروژه کامپایل (مسیر: ":کتابخانه شما"، پیکربندی: "اشکال زدایی") + انتشار پروژه کامپایل (مسیر: ": کتابخانه شما"، پیکربندی: "انتشار")

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

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

من مشکل مشابهی داشتم، وقتی فهرست والد پروژه خود را انتخاب کردم، اجازه دادم بستن پروژه -> حذف پروژه از Android Studio -> Import Projectبا انتخاب سمت راست فایل build.gradle .

مطمئن شوید که فایل build.gradle صحیح را در حین واردات انتخاب کرده اید.

مطمئن شوید که build.gradle

اعمال افزونه: "com.android.application"

پس از تغییر، دوباره همگام سازی کنید.

این عمدتاً هنگام کپی کردن یک پروژه کتابخانه و ساخت آن اتفاق می افتد. راه حل اضافه کردن خواهد بود

اعمال افزونه: "com.android.application"

در فایل build.gradle، به جای

اعمال افزونه: "com.android.library"

سپس یک همگام سازی گرادیان انجام دهید

orderEntry type="library" exported="" name="appcompat-v7-19.1.0" level="project" />

من آن را با اضافه کردن لبه ها درست کردم تنظیمات ماژول. گم شدند. > تنظیمات ماژول را باز کنید > مرز ها > چهره ها را اضافه کنید(علامت + در بالا)> اندروید. پس از افزودن چهره ها، ماژول هایی خواهید داشت.

به روز رسانی:

برای آخرین نسخه gradle وجوه حذف شده است، اکنون می توانید ماژول ها را مستقیماً اضافه کنید. روی پروژه کلیک راست کنید > تنظیمات ماژول را باز کنید > یک ماژول اضافه کنید(در بالای علامت "+")> برنامه تلفن و تبلت(اکنون می توانید یک ماژول جدید بسازید و آن را سفارشی کنید).

مدل خود را به برنامه های خود اضافه کنید. فایل iml مانند: orderEntry type="module" module-name="yourmoudlename" exported=""

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

به جای مقدمه

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

اندروید ماشین مجازی جاوا و کلاس ClassLoader ندارد، اما همتای آن DexClassLoader دقیقاً همین کار را انجام می دهد، اما با توجه به بایت کد Dalvik (و فایل های .dex به جای فایل های .class). و بر خلاف جاوا دسکتاپ، که در آن راحت‌تر می‌توان فایل jar مورد نظر را در CLASSPATH قرار داد و بارگذاری پویا را به هم نخورد، در اندروید این رویکرد واقعاً مزایای زیادی به همراه دارد که اصلی‌ترین آنها این است که عملکرد برنامه قابل گسترش است. و بدون اینکه کاربر متوجه شود و بدون اینکه چیزی از او بپرسد آپدیت شد. در هر زمان، برنامه شما می تواند یک فایل را با یک کلاس از سرور دانلود، دانلود و سپس فایل را حذف کند.

علاوه بر این، کلاس ها را می توان مستقیماً در بسته APK ذخیره کرد و در زمان راه اندازی برنامه بارگیری کرد. مزیت در اینجا این است که کد کلاس های بارگذاری شده از کد خود برنامه جدا می شود و در APK "در آدرس اشتباه" قرار می گیرد. ابزارهایی مانند apktool که معکوس کننده ها دوست دارند از آن استفاده کنند، به سادگی آنها را نمی بینند. از سوی دیگر، این بیشتر یک اشتباه است، زیرا یک معکوس معمولی به سرعت متوجه می شود که چیست.

به هر حال، بارگذاری کلاس پویا هنگام نوشتن برنامه های نه کاملاً "سفید" یک چیز بسیار مفید است، بنابراین هر متخصص امنیتی باید بداند این مکانیسم چگونه کار می کند و چگونه در تروجان ها استفاده می شود.

ساده ترین مثال

// مسیر بایگانی jar با کلاس ما String modFile = "/sdcard/myapp/module.jar"; // مسیر دایرکتوری خصوصی برنامه String appDir = getApplicationInfo().dataDir; // بارگیری فایل از دیسک DexClassLoader classLoader = new DexClassLoader(modFile, appDir, null, getClass().getClassLoader()); // کلاس را بارگیری کنید، یک شی ایجاد کنید و سعی کنید متد run() را با استفاده از بازتاب فراخوانی کنید try ( Class c = classLoader.loadClass("com.example.modules.simple.Module"); Method m = c.getMethod( "run"، null؛ m.invoke(c.newInstance()، null؛ ) catch (Exception e) (e.printStackTrace();)

به طور کلی، همه چیز در اینجا ساده است: کد بایگانی jar /sdcard/myapp/module.jar را با کلاس ما بارگیری می کند، کلاس com.example.modules.simple.Module را از آن بارگیری می کند، یک شی ایجاد می کند و run() را فراخوانی می کند. روش. به سه نکته توجه کنید:

  • DexClassLoader می‌تواند هم فایل‌های .dex «ساده» و هم بایگانی‌های jar را بارگیری کند، که دومی به دلیل فشرده‌سازی و قابلیت استفاده از امضای دیجیتال ترجیح داده می‌شود.
  • آرگومان دوم سازنده DexClassLoader دایرکتوری است که برای ذخیره بایت کد بهینه شده (odex) استفاده می کند، برای سادگی، دایرکتوری خصوصی خود برنامه را مشخص می کنیم.
  • به عنوان آرگومان متد loadClass، همیشه باید آدرس کلاس را همراه با نام بسته مشخص کنید.

برای آزمایش عملکرد این کد، اجازه دهید یک ماژول ساده ایجاد کنیم:

بسته com.example.modules.simple.Module; وارد کردن android.util.Log. ماژول کلاس عمومی ( public void run() (Log.d("Module"، "I am Alive!!!"); ))

وقت خود را صرف ایجاد یک پروژه جدید در Android Studio کنید، می توانید این کد را در notepad تایپ کنید و آن را مستقیماً از خط فرمان در یک بایگانی jar کامپایل کنید:

Javac -classpath /path/to/sdk/platforms/android-23/android.jar Module.java /path/to/sdk/build-tools/23.0.3/dx --dex --output=module.jar Module. کلاس

مطمئن شوید که دایرکتوری های platforms/android-23 و build-tools/23.0.3 وجود دارند، در مورد شما ممکن است نام آنها متفاوت باشد.

اگر همه چیز به خوبی پیش برود، باید با یک فایل module.jar خاتمه دهید. تنها چیزی که باقی می ماند این است که کد لودر را به برنامه اضافه کنید، module.jar را روی کارت حافظه قرار دهید، برنامه را بسازید و اجرا کنید.

پایین با انعکاس

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

با اعمال این رویکرد در مثال بالا، سه فایل زیر را دریافت می کنیم:

  1. فایل ModuleInterface.java با توضیحات API: بسته com.example.modules. رابط عمومی ModuleInterface ( public void run();
  2. فایل Module.java با اجرای ماژول ما: بسته com.example.modules.simple.Module; وارد کردن android.util.Log. ماژول کلاس عمومی ModuleInterface را پیاده سازی می کند ( public void run() (Log.d("Module", "I am Alive!!!"); ) )
  3. لودر ماژول جدید (محل در برنامه شما): String modFile = "/sdcard/myapp/module.jar"; رشته appDir = getApplicationInfo().dataDir; DexClassLoader classLoader = DexClassLoader جدید(modFile, appDir, null, getClass().getClassLoader()); // کلاس را بارگذاری کنید و یک شی با رابط ModuleInterface ModuleInterface ایجاد کنید. امتحان کنید(کلاسclass = classLoader.loadClass("com.example.modules.simple.Module"); module = (ModuleInterface) class.newInstance(); ) catch (Exception e) (e.printStackTrace(); ) module.run()

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

وقتی ماژول های زیادی وجود دارد

ما یک ماژول را کشف کردیم، اما اگر تعداد زیادی از آنها وجود داشته باشد چه؟ چگونه می توان رکورد این ماژول ها را نگه داشت و در بین آنها گم نشد؟ در واقع، همه چیز ساده است - می توانید از یک نقشه برای این استفاده کنید. بیایید دوباره بوت لودر را تغییر دهیم:

ادامه فقط برای اعضا در دسترس است

گزینه 1. برای خواندن تمام مطالب سایت به انجمن "سایت" بپیوندید

عضویت در انجمن در طول دوره مشخص شده به شما امکان می دهد به همه مطالب هکر دسترسی داشته باشید، تخفیف تجمعی شخصی شما را افزایش می دهد و به شما امکان می دهد امتیاز حرفه ای Xakep را جمع آوری کنید!

ماژول‌ها محفظه‌ای برای کد منبع، فایل‌های منبع و تنظیمات سطح برنامه شما، مانند فایل ساخت سطح ماژول و فایل مانیفست Android ارائه می‌کنند. هر ماژول را می‌توان به‌طور مستقل ساخته، آزمایش و اشکال زدایی کرد.

Android Studio از ماژول‌هایی استفاده می‌کند تا اضافه کردن دستگاه‌های جدید به پروژه شما را آسان کند. با دنبال کردن چند مرحله ساده در Android Studio، می‌توانید ماژولی ایجاد کنید که حاوی کدهایی باشد که مختص یک نوع دستگاه است، مانند Wear OS یا Android TV. یک فایل build.gradle پیش‌فرض مناسب برای نوع دستگاه. همچنین، Android Studio ماژول‌های دستگاه را با پیکربندی‌های ساخت توصیه‌شده، مانند استفاده از کتابخانه Leanback برای ماژول‌های Android TV ایجاد می‌کند.

در این صفحه نحوه اضافه کردن یک ماژول جدید برای یک دستگاه خاص توضیح داده شده است.

Android Studio همچنین اضافه کردن یک کتابخانه یا ماژول Google Cloud را به پروژه خود آسان می کند. برای جزئیات در مورد ایجاد یک ماژول کتابخانه، به ایجاد ماژول کتابخانه مراجعه کنید.

یک ماژول جدید ایجاد کنید

برای افزودن یک ماژول جدید به پروژه خود برای یک دستگاه جدید، به صورت زیر عمل کنید:

  1. کلیک فایل > جدید > ماژول جدید.
  2. در ماژول جدید ایجاد کنیددر پنجره ای که ظاهر می شود، Android Studio ماژول های دستگاه زیر را ارائه می دهد:
    • ماژول تلفن و تبلت
    • ماژول OS را بپوشید
    • ماژول Android TV
    • ماژول شیشه ای
    ماژول دستگاه مورد نظر را انتخاب کنید و سپس کلیک کنید بعد.
  3. در ماژول جدید خود را پیکربندی کنیدفرم، مشخصات زیر را وارد کنید:
    • نام نرم افزار: این نام به عنوان عنوان نماد راه‌انداز برنامه شما برای ماژول جدید استفاده می‌شود.
    • نام ماژول: این متن به عنوان نام پوشه ای استفاده می شود که کد منبع و فایل های منابع شما در آن قابل مشاهده است.
    • نام بسته: این فضای نام جاوا برای کد موجود در ماژول شما است. به عنوان ویژگی بسته در فایل مانیفست اندروید ماژول اضافه شده است.
    • حداقل SDK: این تنظیم پایین ترین نسخه پلتفرم Android را که ماژول برنامه پشتیبانی می کند نشان می دهد. این مقدار ویژگی minSdkVersion را در فایل build.gradle تنظیم می کند که می توانید بعداً آن را ویرایش کنید.

    سپس کلیک کنید بعد.

  4. بسته به ماژول دستگاهی که انتخاب کرده اید، صفحه زیر مجموعه ای از الگوهای کد مناسب را نشان می دهد که می توانید برای استفاده به عنوان فعالیت اصلی خود انتخاب کنید. روی الگوی فعالیتی که می‌خواهید با آن شروع کنید کلیک کنید و سپس کلیک کنید بعد. اگر به فعالیتی نیاز ندارید، کلیک کنید بدون فعالیت اضافه کنید، کلیک پایان، و سپس کارتان تمام شد.
  5. اگر یک الگوی فعالیت را انتخاب کردید، تنظیمات مربوط به فعالیت خود را در آن وارد کنید سفارشی کردن فعالیتصفحه اکثر الگوها درخواست یک نام فعالیت, نام طرح, عنوان، و زبان مبدأ، اما هر الگو دارای تنظیمات مربوط به فعالیت است. کلیک پایان. هنگامی که یک ماژول برنامه را با یک الگوی فعالیت ایجاد می کنید، می توانید بلافاصله ماژول را در دستگاه خود اجرا و آزمایش کنید.

اندروید استودیو تمام فایل‌های لازم را برای ماژول جدید ایجاد می‌کند و پروژه را با فایل‌های gradle ماژول جدید همگام‌سازی می‌کند. افزودن یک ماژول برای یک دستگاه جدید همچنین هر گونه وابستگی مورد نیاز برای دستگاه مورد نظر را به فایل ساخت ماژول اضافه می کند.

هنگامی که همگام سازی پروژه Gradle کامل شد، ماژول جدید در قسمت ظاهر می شود پروژهپنجره سمت چپ اگر پوشه ماژول جدید را نمی‌بینید، مطمئن شوید که پنجره نمای Android را نشان می‌دهد.

ماژول را وارد کنید

برای وارد کردن یک ماژول موجود به پروژه خود، به صورت زیر عمل کنید:

  1. کلیک File > New > Import Module.
  2. در دایرکتوری منبعکادر، دایرکتوری ماژول(هایی) را که می خواهید وارد کنید تایپ یا انتخاب کنید:
    • اگر یک ماژول را وارد می کنید، دایرکتوری ریشه آن را مشخص کنید.
    • اگر چندین ماژول را از یک پروژه وارد می‌کنید، پوشه پروژه را مشخص کنید. برای هر ماژول داخل پوشه، یک کادر ظاهر می شود و نشان می دهد محل منبعو نام ماژول. مطمئن شوید که وارد كردنکادر برای هر ماژولی که می خواهید وارد کنید علامت زده می شود.
    اگر ماژول(های) شما وابستگی های دیگری دارند، برای وارد کردن در زیر فهرست می شوند ماژول های اضافی مورد نیاز.
  3. نام(های) ماژول مورد نظر خود را در آن تایپ کنید نام ماژولزمینه های).
  4. کلیک پایان

مراحل بعدی

هنگامی که یک ماژول جدید اضافه کردید، می توانید کد و منابع ماژول را تغییر دهید، تنظیمات ساخت ماژول را پیکربندی کنید، و ماژول را بسازید. همچنین می توانید ماژول را مانند هر برنامه دیگری اجرا و اشکال زدایی کنید.

  • برای آشنایی با تنظیمات ساخت یک ماژول، به فایل ساخت سطح ماژول مراجعه کنید.
  • برای ساخت و اجرای یک ماژول خاص، به انتخاب و ساخت ماژول متفاوت مراجعه کنید.

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

  • برای ماژول های WearOS:
  • برای ماژول های Android TV:
  • برای ماژول های شیشه ای: GDK Quick Start

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

در اخیر Google I/O 2018در میان بسیاری از نوآوری ها، اضافه شدن یک فرمت اپلیکیشن جدید را نیز اعلام کرد.

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

مهم!در حال حاضر Android App Bundle فقط در نسخه پیش نمایش اندروید استودیو کار می کند. آخرین نسخه اندروید استودیو 3.2 قناریدر دسترس .

قالب Android App Bundle

Android App Bundle یک فایل (با پسوند .aab) که در گوگل آپلود می شود. هر بسته شامل کد و منابع کامپایل شده برای همه ماژول های برنامه و تنظیمات دستگاه پشتیبانی شده است.

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

از این ماژول‌ها، Google Play فایل‌های APK مختلفی را تولید می‌کند که در اختیار کاربران قرار می‌گیرد، مانند: APKهای پایه، APKهای ویژگی پویا، APKهای پیکربندی، و (برای دستگاه‌هایی که از APKهای تقسیم‌شده پشتیبانی نمی‌کنند) چند APK. دایرکتوری های آبی رنگ نشان دهنده کد و منابعی است که Google Play برای ایجاد APK پیکربندی برای هر ماژول استفاده می کند.

توجه داشته باشید:یک بسته نرم افزاری باید برای هر برنامه منحصر به فرد ایجاد شود، یا شناسه برنامه. یعنی اگر از چندین طعم محصول در برنامه خود برای ایجاد APK های مختلف استفاده می کنید و هر یک از این شاخه ها از یک applicationID منحصر به فرد استفاده می کنند، باید برای هر شاخه یک بسته جداگانه ایجاد کنید.

کد و منابع برای هر ماژول مشابه APK های استاندارد سازماندهی شده است، که منطقی است زیرا هر یک از این ماژول ها می توانند به عنوان یک APK مستقل تولید شوند. در زیر می‌توانید توضیحات دقیق‌تری درباره برخی از فایل‌ها و فهرست‌های راهنمای Android App Bundle را مشاهده کنید:

  • پایه/، ویژگی1/، ویژگی2/. هر یک از این دایرکتوری ها نشان دهنده یک ماژول برنامه هستند. ماژول برنامه پایه همیشه در دایرکتوری پایه بسته نرم افزاری موجود است. دایرکتوری هایی با ویژگی های اضافی، که به هر یک از آنها یک نام خاص اختصاص داده شده است، به طور جداگانه قرار دارند.
  • فایل ها بافر پروتکل (.pb). این فایل‌ها حاوی متادیتا هستند که به توصیف محتویات بسته در فروشگاه‌های برنامه کمک می‌کند. مثلا، BundleConfig.pb، که در دایرکتوری ریشه بسته نرم افزاری قرار دارد، اطلاعاتی در مورد خود بسته نرم افزاری ارائه می دهد، مانند اینکه کدام نسخه ساخت ابزاربرای مونتاژ استفاده می شود فایل های دیگر مانند Recourse.pbو native.pb، توضیح دهید که چگونه کد و منابع خاص باید برای پیکربندی های مختلف دستگاه استفاده شود. Google Play از این اطلاعات برای ایجاد یک APK بهینه شده برای دستگاه کاربر استفاده می کند.
  • آشکار/. برخلاف APKها، بسته‌ها فایل AndroidManifest.xml هر ماژول را در فهرستی جداگانه ذخیره می‌کنند.
  • دکس/. برخلاف APKها، بسته‌ها فایل‌های DEX هر ماژول را در یک فهرست جداگانه ذخیره می‌کنند.
  • ریشه/. این دایرکتوری فایل هایی را که بعداً به دایرکتوری منتقل می شوند ذخیره می کند ریشههر APK که شامل ماژول حاوی این فهرست باشد. مثلا دایرکتوری پایه/ریشه/یک بسته می تواند شامل منابع جاوا باشد که توسط برنامه با استفاده از آن بارگذاری می شود Class.getResources(). این فایل‌ها بعداً به فهرست اصلی APK برنامه و هر چند APK که Google Play تولید می‌کند منتقل می‌شوند. مسیرهای این دایرکتوری نیز حفظ می شوند، یعنی زیر شاخه ها نیز به همراه root جابجا می شوند.
    توجه داشته باشید:اگر محتویات این دایرکتوری با سایر فایل‌ها و دایرکتوری‌های موجود در ریشه APK مغایرت داشته باشد، کنسول Play دانلود بسته را رد می‌کند. به عنوان مثال، نمی‌توانید دایرکتوری root/lib/ را وارد کنید زیرا با دایرکتوری lib موجود در APK تداخل دارد.
  • res/, lib/, assets/.این دایرکتوری ها با دایرکتوری های مورد استفاده در APK استاندارد یکسان هستند. هنگام دانلود یک برنامه، Google Play این فهرست‌ها و بسته‌ها را فقط برای فایل‌هایی بررسی می‌کند که با پیکربندی دستگاه مورد نظر مطابقت دارند.

ساختن اپ باندل با اندروید استودیو

ایجاد یک بسته نرم افزاری با اندروید استودیو بسیار شبیه به ایجاد یک APK است. برای مونتاژ، فقط از منو انتخاب کنید Build - Build Bundle(s)/APK(s) > Build Bundle(s)و IDE یک بسته نرم افزاری برای گزینه ساخت انتخاب شده ایجاد می کند و آن را در دایرکتوری قرار می دهد //build/outputs/bundle/.

اگر بسته ای برای نسخه اشکال زدایی یک برنامه ایجاد شود، Android Studio به طور خودکار باندل را با استفاده از کلید امضای اشکال زدایی امضا می کند. برای آپلود یک بسته در Google Play، باید امضا شود.

هنگامی که Android Studio ساخت بسته امضا شده را به پایان رساند، می توان آن را باز کرد و تجزیه و تحلیل کرد. تجزیه و تحلیل بسته به شما امکان می دهد محتوا را بررسی کنید و به طور مشابه کار می کند تحلیلگر APK.

برای ایجاد یک App Bundle، IDE از همان ابزار منبع باز به نام استفاده می کند ابزار بسته نرم افزاری، که Google Play از آن برای تبدیل بسته نرم افزاری به فایل های APK امضا شده استفاده می کند.

قبل از آپلود یک بسته در کنسول Google Play، باید آن را امضا کنید. برای ایجاد یک App Bundle امضا شده، این مراحل را دنبال کنید:


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

آپلود App Bundle در Google Play Console

پس از ایجاد بسته نرم افزاری، می توان آن را برای بررسی، آزمایش یا انتشار برنامه در Google Play آپلود کرد. قبل از شروع کار، شرایط زیر باید رعایت شود:

  1. برای برنامه ثبت نام کنید امضای برنامه Google Play.
  2. اگر برنامه شامل ماژول های ویژگی پویا باشد، می توان آن را از طریق مسیر تست داخلی کنسول Google Play دانلود و آزمایش کرد. با این حال، برای انتشار برنامه، باید برنامه Dynamic Feature را بپذیرید که در حال حاضر در نسخه بتا است.
  3. Google Play از دانلود برنامه هایی که بزرگتر از آن نیستند پشتیبانی می کند 100 مگابایت.

تجزیه APK با File Explorer

وقتی بسته بارگیری می‌شود، Google Play به‌طور خودکار فایل‌های APK و چند APK تقسیم‌شده را برای همه پیکربندی‌های دستگاه پشتیبانی‌شده توسط برنامه تولید می‌کند. در کنسول Play، می‌توانید از App Bundle Explorer برای مشاهده همه فایل‌های APK تولید شده توسط Google Play استفاده کنید. تجزیه و تحلیل داده ها مانند دستگاه های پشتیبانی شده و صرفه جویی در اندازه APK؛ آپلود فایل های APK تولید شده برای آزمایش.

به روز رسانی برنامه

پس از آپلود برنامه در کنسول Play، برای به روز رسانی برنامه کافی است کد نسخه را افزایش دهید و همچنین یک باندل جدید ایجاد و آپلود کنید. سپس Google Play فایل‌های APK به‌روزرسانی شده را با کد نسخه جدید تولید می‌کند و در صورت نیاز آنها را ارائه می‌کند.

نتیجه

استفاده از Android App Bundle مزایای زیادی برای بهینه سازی برنامه های APK دارد. با استفاده از این روش، یکی از برنامه‌های خود، مدیریت رمز عبور Wi-Fi را به‌روزرسانی کرده‌ایم و APK پیش‌فرض را با یک App Bundle جایگزین کرده‌ایم. بنابراین حجم فایل های APK یک مگابایت کاهش یافته است که نتیجه بسیار خوبی است.

علاوه بر این، گوگل در حال حاضر در حال آزمایش یک افزونه به App Bundle، ماژول‌های ویژگی Dynamic است که با آن می‌توانید APK پایه را به قسمت‌هایی تقسیم کنید که در صورت لزوم دانلود می‌شوند، تا کنون این فناوری در بتا است.

شاید تنها ایراد باندل ها در حال حاضر نیاز به استفاده از نسخه پیش نمایش اندروید استودیو باشد، اما این مشکل موقتی است.