1. Thư viện phụ thuộc
1.1 SDK AKS
Thêm SDK vào build.gradle.kts cấp ứng dụng:
dependencies {
implementation("com.github.Pentabit-Labs-LLC:appskitsdk-android:${LATEST_VERSION}")
}Thay ${LATEST_VERSION} bằng tag mới nhất từ các bản phát hành appskitsdk-android (hoặc huy hiệu JitPack trong README của kho mã đó), ví dụ: v6.4.0.0.
AKS được phát hành dưới dạng tập hợp các tệp .aar riêng lẻ (không phải mô-đun Maven có khai báo thông tin phụ thuộc), nên không có thư viện phụ thuộc bên thứ ba nào được tự động kéo vào theo cơ chế phụ thuộc bắc cầu. Bạn phải khai báo tường minh tất cả thư viện bên dưới trong mô-đun ứng dụng. Ngoại lệ duy nhất là SupportAKS (com.pentabit.aks_android_support_lib) — các lớp này đã được đóng gói trực tiếp trong artifact appskitsdk-android, nên bạn không cần thêm riêng com.pentabit:aks-android-helpers.
1.2 Thư viện bắt buộc (luôn cần)
Mã đã biên dịch của AKS tham chiếu trực tiếp đến các thư viện này, nên chúng luôn bắt buộc bất kể bạn bật mạng quảng cáo nào:
dependencies {
// Firebase (Remote Config drives almost all AKS behavior; Analytics is used for AKS events)
implementation(platform("com.google.firebase:firebase-bom:34.3.0"))
implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-config")
implementation("com.google.android.gms:play-services-measurement-api:23.0.0")
// Coroutines / serialization / datetime — used throughout AdsManager and AppsKitSDK
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0")
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.7.1")
// Ktor — AKS's internal network client for fetching ad/config data
implementation("io.ktor:ktor-client-core:3.3.3")
implementation("io.ktor:ktor-client-okhttp:3.3.3")
implementation("io.ktor:ktor-client-content-negotiation:3.3.3")
implementation("io.ktor:ktor-serialization-kotlinx-json:3.3.3")
implementation("io.ktor:ktor-client-logging:3.3.3")
// Local storage AKS uses for its own preferences/session/ad-state tracking
implementation("com.russhwolf:multiplatform-settings:1.1.1")
implementation("com.russhwolf:multiplatform-settings-serialization:1.1.1")
// Jetpack Compose — AKS's Feature/Cross-Promotion ad screens, the Configuration
// Dashboard, and the Test Suite (§10) are all built with Compose. Pull these in via
// the Compose BOM so versions stay aligned with whatever else in your app uses Compose.
implementation(platform("androidx.compose:compose-bom:2025.08.01"))
implementation("androidx.compose.runtime:runtime")
implementation("androidx.compose.foundation:foundation")
implementation("androidx.compose.material3:material3")
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-tooling-preview")
// Image loading used by AKS's built-in cross-promotion / feature-promotion ad screens
implementation("io.coil-kt.coil3:coil:3.3.0")
implementation("io.coil-kt.coil3:coil-compose:3.3.0")
implementation("io.coil-kt.coil3:coil-compose-core:3.3.0")
implementation("io.coil-kt.coil3:coil-network-ktor3:3.3.0")
implementation("media.kamel:kamel-image:0.9.5")
// Used by enableAppAutoUpdate() in the AKS base Activities
implementation("com.google.android.play:app-update:2.1.0")
// Powers AppsKitSDKUtils.askForRating() — AKS's built-in in-app review flow
implementation("com.google.android.play:review:2.0.1")
implementation("androidx.recyclerview:recyclerview:1.4.0")
// IronSource core — AKS's base Activity classes call IronSource.onResume()/onPause()
// unconditionally on every screen, so this is required even if you never select
// IronSource as an ad network in the AKS portal.
implementation("com.ironsource.sdk:mediationsdk:8.5.0")
}Giữ phiên bản Ktor đồng nhất trên mọi artifact
ktor-*— việc kết hợp các artifact Ktor 2.x và 3.x trên cùng classpath sẽ gây sự cố ứng dụng do không tương thích nhị phân khi chạy.Đồng thời, hãy đồng bộ phiên bản coroutines (
1.7.3), serialization (1.9.0) và Firebase BOM (34.3.0) với AKS trong toàn bộ ứng dụng, thay vì để phiên bản cũ tồn tại ở nơi khác trong đồ thị phụ thuộc. BOM của Firebase đã có những thay đổi phá vỡ tính tương thích giữa các phiên bản chính (33.x→34.x), và việc Gradle âm thầm chọn phiên bản "thắng" khi phân giải phụ thuộc không đảm bảo các luồng thực thi của AKS gọi đến những thư viện này vẫn tương thích nhị phân — đây là yêu cầu bắt buộc, không phải khuyến nghị chỉ cần làm khi có thể.
1.3 SDK của đối tác đo lường di động (MMP) (luôn cần)
AKS tự động khởi tạo ba SDK này dựa trên các khóa được thiết lập trong cổng quản trị AKS / Firebase Remote Config — bạn không gọi trực tiếp đến chúng, nhưng mã đã biên dịch của AKS luôn tham chiếu đến các lớp SDK này mà không kiểm tra điều kiện, nên chúng phải có trên classpath:
dependencies {
// AppsFlyer
implementation("com.appsflyer:af-android-sdk:6.13.0")
implementation("com.appsflyer:adrevenue:6.9.0")
implementation("com.miui.referrer:homereferrer:1.0.0.6")
implementation("com.android.installreferrer:installreferrer:2.2")
// Adjust
implementation("com.adjust.sdk:adjust-android:4.38.3")
// Solar Engine (Reyun)
implementation("com.reyun.solar.engine.oversea:solar-engine-core:1.3.1.4")
}Nếu bạn chưa có khóa cho một trong các SDK này trong cấu hình trên cổng quản trị AKS thì cũng không sao — AKS chỉ bỏ qua việc khởi tạo SDK đó khi chạy. Tuy nhiên, thư viện phụ thuộc vẫn phải có để ứng dụng có thể biên dịch.
1.4 SDK mạng quảng cáo / hòa giải quảng cáo (mediation)
AKS đóng gói mã xử lý cho AdMob, AppLovin MAX và Chartboost Mediation (Helium) trong cùng một AAR, ngoài IronSource (đã liệt kê ở trên). Mạng thực sự phân phối quảng cáo được quyết định từ xa (theo từng định dạng quảng cáo, có cơ chế chuyển sang mạng dự phòng), nên cách an toàn nhất — cũng là cách ứng dụng tham chiếu của Pentabit sử dụng — là thêm tất cả các SDK này:
dependencies {
// ---- AdMob / Google Mobile Ads + mediation adapters ----
implementation("com.google.android.gms:play-services-ads:24.4.0")
implementation("com.google.ads.mediation:applovin:13.0.1.0")
implementation("com.google.ads.mediation:ironsource:8.5.0.1")
implementation("com.google.ads.mediation:chartboost:9.8.2.0")
implementation("com.google.ads.mediation:vungle:7.4.2.0")
implementation("com.google.ads.mediation:facebook:6.18.0.0")
implementation("com.google.ads.mediation:mintegral:16.9.71.0")
implementation("com.google.ads.mediation:pangle:6.4.0.4.0")
implementation("com.google.ads.mediation:unity:4.12.5.0") {
exclude(group = "com.google.android.gms", module = "play-services-cronet")
}
// ---- AppLovin MAX + adapters ----
implementation("com.applovin:applovin-sdk:13.3.0")
implementation("com.applovin.mediation:google-adapter:+")
implementation("com.applovin.mediation:google-ad-manager-adapter:+")
implementation("com.applovin.mediation:ironsource-adapter:8.7.0.0.0")
implementation("com.applovin.mediation:facebook-adapter:+")
implementation("com.applovin.mediation:vungle-adapter:+")
implementation("com.applovin.mediation:mintegral-adapter:+")
implementation("com.applovin.mediation:bytedance-adapter:6.5.0.8.1")
implementation("com.applovin.mediation:unityads-adapter:+") {
exclude(group = "com.google.android.gms", module = "play-services-cronet")
}
// ---- Chartboost Mediation (Helium) + adapters ----
implementation("com.chartboost:chartboost-mediation-sdk:4.7.1")
implementation("com.chartboost:chartboost-mediation-adapter-admob:4.22.3.0.4")
implementation("com.chartboost:chartboost-mediation-adapter-applovin:4.12.0.0.0")
implementation("com.chartboost:chartboost-mediation-adapter-ironsource:4.7.5.2.0.0")
implementation("com.chartboost:chartboost-mediation-adapter-vungle:4.7.1.0.0")
implementation("com.chartboost:chartboost-mediation-adapter-meta-audience-network:4.6.16.0.0")
implementation("com.chartboost:chartboost-mediation-adapter-pangle:4.5.5.0.3.0")
}Nếu chắc chắn một mạng cụ thể (ví dụ: Helium) sẽ không bao giờ được bật trong cấu hình trên cổng quản trị AKS, bạn có thể bỏ khối khai báo tương ứng — nhưng lưu ý rằng logic chuyển sang mạng dự phòng AdNetwork nội bộ của AKS có thể định tuyến đến bất kỳ mạng nào trong số ADMOB, GAM, MAX, IRON_SOURCE hoặc HELIUM theo từng định dạng quảng cáo, nên việc rút gọn danh sách này sẽ hạn chế tính linh hoạt khi cấu hình từ xa.