چندین کتابخانه اندروید را به عنوان یکی با Fused Library منتشر کنید

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

افزونه Fused Library همراه با افزونه Android Gradle به بسته‌بندی چندین ماژول کتابخانه Android در یک کتابخانه Android قابل انتشار کمک می‌کند. این به شما امکان می دهد کد منبع و منابع کتابخانه خود را همانطور که می خواهید در ساخت خود مدولار کنید، در حالی که از افشای ساختار پروژه خود پس از توزیع جلوگیری کنید.

توزیع به عنوان یک کتابخانه واحد می تواند مزایای زیر را داشته باشد:

  • وابستگی های ساده شده: چندین وابستگی کتابخانه را با یک AAR جایگزین می کند، راه اندازی پروژه و مدیریت نسخه را برای کاربران شما ساده می کند.
  • کاهش اندازه کتابخانه: ممکن است کوچک شدن کد را بهبود بخشد و منجر به AARهای کوچکتر شود
  • امنیت بهبود یافته: می تواند کنترل بهتری بر جزئیات پیاده سازی داخلی کتابخانه های منتشر شده ارائه دهد

یک کتابخانه ترکیبی ایجاد کنید

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

یک ماژول کتابخانه ترکیبی جدید اضافه کنید

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

در این مثال، ماژول کتابخانه ذوب شده myFusedLibrary نامیده می شود.

  1. با افزودن android.experimental.fusedLibrarySupport=true به فایل gradle.properties ، پشتیبانی از کتابخانه ذوب شده را فعال کنید.
  2. include(":myFusedLibrary") به فایل settings.gradle.kts اضافه کنید.
  3. android-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" } در قسمت [plugins] در فایل gradle/libs.versions.toml اضافه کنید.
  4. alias(libs.plugins.android.fusedlibrary) apply false در بلوک افزونه‌ها در فایل build.gradle.kts سطح بالا اعمال کنید.
  5. برای ایجاد ماژول myFusedLibrary ، یک دایرکتوری جدید به نام myFusedLibrary ایجاد کنید (روی «برنامه من» > جدید > فهرست کلیک راست کنید.
  6. یک فایل build.gradle.kts در ماژول myFusedLibrary ایجاد کنید (روی ماژول myFusedLibrary کلیک راست کنید > New > File).
  7. موارد زیر را در فایل myFusedLibrary/build.gradle.kts قرار دهید:

کاتلین

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

androidFusedLibrary {
    namespace = "com.example.myFusedLibrary"
    minSdk = 21
}

dependencies { }

شیار

plugins {
    id 'fused-library'
}

androidFusedLibrary {
    namespace 'com.example.myFusedLibrary'
    minSdk 21
}

dependencies {

}

وابستگی ها را اضافه کنید

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

به عنوان مثال:

کاتلین

dependencies {
    include(project(":image-rendering"))
    include("mycoolfonts:font-wingdings:5.0")
}

شیار

dependencies {
    include project(':image-rendering')
    include 'mycoolfonts:font-wingdings:5.0'
}

کتابخانه ترکیبی خود را منتشر کنید

قبل از انتشار یک کتابخانه ترکیبی، باید با انتشار یک کتابخانه اندرویدی آشنا شوید. انتشار یک کتابخانه ترکیبی شبیه به انتشار کتابخانه اندروید است، با این حال برخی تفاوت‌های کلیدی وجود دارد که برای انتشار صحیح کتابخانه ترکیبی باید در نظر بگیرید:

  • افزونه Maven Publish باید برای هر ماژولی که افزونه Fused Library اعمال شده است نیز اعمال شود.
  • انتشار باید از fusedLibraryComponent به ارث برسد زیرا این وابستگی های مورد نیاز برای کامپایل آرتیفکت کتابخانه ذوب شده را فراهم می کند.

در اینجا نمونه ای از پیکربندی انتشارات آمده است:

کاتلین

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

androidFusedLibrary {  }

dependencies {  }

publishing {
    publications {
        register<MavenPublication>("release") {
             groupId = "my-company"
             artifactId = "my-fused-library"
             version = "1.0"
             from(components["fusedLibraryComponent"])
        }
    }
}

شیار

plugins {
    id 'fused-library'
    id 'maven-publish'
}

androidFusedLibrary {  }

dependencies {  }

publishing {
    publications {
        release(MavenPublication) {
            groupId = "my-company"
            artifactId = "my-fused-library"
            version = "1.0"
            afterEvaluate {
            from components.fusedLibraryComponent
        }
    }
}

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

شما باید بسته به یک کتابخانه ترکیبی منتشر شده از یک برنامه Android یا کتابخانه Android آزمایش کنید. روش پیشنهادی انتشار در کتابخانه ادغام شده و وابستگی های پروژه آن به یک مخزن محلی Maven است.

برای انتشار مصنوعات کتابخانه ترکیب شده در یک مخزن محلی، پیکربندی مشابه موارد زیر را تعریف کنید:

کاتلین

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

repositories {
    maven {
        name = "myLocalRepo"
        url = uri(layout.buildDirectory.dir("myLocalRepo"))
    }
}

شیار

plugins {
    id 'fused-library'
    id 'maven-publish'
}

repositories {
    maven {
        name 'myLocalRepo'
        url layout.buildDirectory.dir('myLocalRepo')
    }
}

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

برای توزیع کتابخانه ترکیبی خود، به آپلود کتابخانه خود مراجعه کنید.

رفتار و حفاظت

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

  • کتابخانه‌های ترکیبی را فقط می‌توان به‌عنوان مصنوع کتابخانه Android AAR منتشر کرد تا به عنوان یک وابستگی اضافه شود.
  • ترکیب کتابخانه هایی که از اتصال داده استفاده می کنند پشتیبانی نمی شود.
  • شما نمی توانید چندین نوع ساخت و طعم محصول را در یک کتابخانه ذوب شده ترکیب کنید. کتابخانه های ذوب شده جداگانه برای انواع مختلف ایجاد کنید.

برای متعادل کردن مقدار پیکربندی مورد نیاز و سهولت استفاده، این افزونه یا در ایجاد تضادهای مبهم با شکست مواجه می‌شود یا هنگام ادغام آرتیفکت‌ها از اکتشافی استفاده می‌کند. جزئیات نحوه ادغام مصنوعات در جدول زیر آمده است:

تایپ کنید رفتار
کلاس ها کتابخانه‌هایی با مسیر کلاسی یکسان در هنگام ترکیب کردن کتابخانه باعث خرابی ساخت می‌شوند.
منابع اندروید ادغام منابع، ترتیب وابستگی های مشخص شده را هنگام انتخاب منبعی با نام مشابه در موارد مختلف در نظر می گیرد.
فراداده AAR نسخه های ابرداده AAR با اولویت بندی بالاترین مقدار از هر کتابخانه وابستگی ادغام می شوند. یک DSL برای نادیده گرفتن این مقادیر ارائه شده است.

کاتلین

 androidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } }
منابع جاوا فایل‌های منبع جاوا در چندین کتابخانه با مسیرهای یکسان مجاز نیستند و منجر به خرابی ساخت می‌شوند.

مسائل شناخته شده

Fused Library یک افزونه جدید است و مشکلات شناخته شده ای وجود دارد که برای انجام تمام موارد استفاده روی آنها کار می شود.

  • فایل‌های lint.jar در AAR ذوب‌شده گنجانده نشده‌اند
  • افزودن وابستگی فایل به سایر فایل‌های aar
  • هیچ پشتیبانی از ترکیب آرتیفکت های RenderScript و Prefab وجود ندارد

وابستگی های یک کتابخانه ترکیبی را درک کنید

کتابخانه ادغام شده هیچ منبعی ندارد و به طور موثر از کتابخانه های Android به عنوان تنها منبع خود استفاده می کند، مهم است که بفهمیم چه چیزی از کجا آمده است. برای فهرست کردن وابستگی هایی که در آرتیفکت حاصل ادغام می شوند و وابستگی های مورد نیاز برای ساخت مصنوع، وظیفه gradle :report در کتابخانه ذوب شده اجرا کنید. وظایف یک گزارش JSON ایجاد می‌کند که در فهرست build/reports کتابخانه ذوب شده ذخیره می‌شود.

برای اطلاعات بیشتر در رابطه با وابستگی‌های داخلی افزونه، وظیفه gradle :dependencies اجرا کنید تا وضعیت تنظیمات افزونه را مشاهده کنید.