admanagekit-mcp-server 1.2.4 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/content/README.md CHANGED
@@ -5,7 +5,9 @@
5
5
 
6
6
  AdManageKit is a comprehensive Android library designed to simplify the integration and management of Google AdMob ads, Google Play Billing, and User Messaging Platform (UMP) consent.
7
7
 
8
- **Latest Version `4.4.5`** is a **patch release**. No API changed. It fixes a `BannerAdView` bug that renders a **blank banner slot inside Jetpack Compose**: swapping the shimmer placeholder for the loaded `AdView` raises an ordinary `requestLayout()`, which cannot cross Compose's `AndroidView` interop boundary once any ancestor already carries a pending layout flagso Compose never re-measured the subtree and the freshly attached `AdView` was left at 0×0. The ad loaded, `onAdLoaded`/`onAdImpression` fired and the impression was **logged and billed**, but the slot stayed blank until a rotation or resize forced a full traversal. Both the AdMob and `BannerWaterfall` success paths now force the measure/layout pass themselves. Also picks up the Next-Gen GMA SDK **1.4.0**, AGP **9.3.2** and Firebase BOM **34.18.0**. See [Release Notes v4.4.5](docs/release-notes/RELEASE_NOTES_v4.4.5.md).
8
+ **Latest Version `4.4.6`** is a **maintenance release**. No API changed and no library source file changed the whole diff is dependencies and docs. It **downgrades** `androidx.work:work-runtime` **2.11.2 2.9.1**: WorkManager **2.10 and 2.11** call `JobScheduler.forNamespace` whenever `SDK_INT >= 34`, and modified or spoofed ROMs that report API 34 over an older framework have no such method the `NoSuchMethodError` then kills the **whole process during bind** (`Unable to get provider androidx.startup.InitializationProvider`), because `androidx.startup` builds WorkManager in a `ContentProvider` installed before `Application.onCreate` runs. 2.9.1 is the last release without that call. AdManageKit has no WorkManager code of its own; the pin only steers the version the ads SDK pulls in, and since Gradle resolves the **highest** version in the graph, an app that declares 2.10/2.11 itself keeps the crash — pin `androidx.work:work-runtime:2.9.1` in your app too. Also picks up AGP **9.4.0**, Firebase BOM **34.19.0**, Compose BOM **2026.09.00** and Yandex Mobile Ads **8.4.0**. See [Release Notes v4.4.6](docs/release-notes/RELEASE_NOTES_v4.4.6.md).
9
+
10
+ **Version `4.4.5`** is a **patch release**. No API changed. It fixes a `BannerAdView` bug that renders a **blank banner slot inside Jetpack Compose**: swapping the shimmer placeholder for the loaded `AdView` raises an ordinary `requestLayout()`, which cannot cross Compose's `AndroidView` interop boundary once any ancestor already carries a pending layout flag — so Compose never re-measured the subtree and the freshly attached `AdView` was left at 0×0. The ad loaded, `onAdLoaded`/`onAdImpression` fired and the impression was **logged and billed**, but the slot stayed blank until a rotation or resize forced a full traversal. Both the AdMob and `BannerWaterfall` success paths now force the measure/layout pass themselves. Also picks up the Next-Gen GMA SDK **1.4.0**, AGP **9.3.2** and Firebase BOM **34.18.0**. See [Release Notes v4.4.5](docs/release-notes/RELEASE_NOTES_v4.4.5.md).
9
11
 
10
12
  **Version `4.4.4`** is a **critical billing hotfix**. No API changed. It repairs a regression introduced in 4.4.3, where the Play Billing connection was never started at all: `connectToGooglePlayBilling()` guarded on `billingClient.isReady()`, which reports `true` the instant a client is built, so `startConnection(...)` was skipped on every fresh client. Setup never ran, no product details or entitlement were ever fetched, and there was **no failure callback and no error log** to explain it. **If you ship the billing module on 4.4.3, upgrade.** Also fixes a long-standing bug where a timed-out setup reported itself as initialized — permanently suppressing the host app's `if (!initBillingFinish) initBilling()` retry — and adds `DEBUG` logging across the billing connection lifecycle. See [Release Notes v4.4.4](docs/release-notes/RELEASE_NOTES_v4.4.4.md).
11
13
 
@@ -37,7 +39,7 @@ Since **4.2.0** the library runs on the Google Mobile Ads **Next-Gen SDK** (`ads
37
39
 
38
40
  ## Next-Gen GMA SDK
39
41
 
40
- As of v4.2.0, AdManageKit runs on Google's **Next-Gen Google Mobile Ads SDK** (`com.google.android.libraries.ads.mobile.sdk`, stable `1.4.0` as of 4.4.5) instead of the legacy `com.google.android.gms:play-services-ads`. This isn't a branch or an opt-in — it's the only version of AdManageKit going forward.
42
+ As of v4.2.0, AdManageKit runs on Google's **Next-Gen Google Mobile Ads SDK** (`com.google.android.libraries.ads.mobile.sdk`, stable `1.4.0` as of 4.4.6) instead of the legacy `com.google.android.gms:play-services-ads`. This isn't a branch or an opt-in — it's the only version of AdManageKit going forward.
41
43
 
42
44
  ### Why the move
43
45
 
@@ -201,15 +203,15 @@ dependencyResolutionManagement {
201
203
  **Step 2:** Add dependencies to your app's `build.gradle`:
202
204
 
203
205
  ```groovy
204
- implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
205
- implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.5'
206
- implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
206
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.6'
207
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.6'
208
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.6'
207
209
 
208
210
  // For Jetpack Compose support
209
- implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.5'
211
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.6'
210
212
 
211
213
  // For Yandex Ads multi-provider support
212
- implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.5'
214
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.6'
213
215
  ```
214
216
 
215
217
  **Step 3:** Ensure your app's `compileSdk` is **37 or higher** (required transitively as of 4.2.0).
@@ -783,6 +785,7 @@ Register it **before** `initBilling`. Products land in `unfetched` when the id i
783
785
  - [Multi-Provider Waterfall](docs/MULTI_PROVIDER_WATERFALL.md)
784
786
  - [Yandex Integration](docs/YANDEX_INTEGRATION.md)
785
787
  - [Billing Integration Guide](docs/APP_PURCHASE_GUIDE.md)
788
+ - [Release Notes v4.4.6](docs/release-notes/RELEASE_NOTES_v4.4.6.md)
786
789
  - [Release Notes v4.4.5](docs/release-notes/RELEASE_NOTES_v4.4.5.md)
787
790
  - [Release Notes v4.4.4](docs/release-notes/RELEASE_NOTES_v4.4.4.md)
788
791
  - [Release Notes v4.4.3](docs/release-notes/RELEASE_NOTES_v4.4.3.md)
@@ -0,0 +1,110 @@
1
+ # Release Notes — v4.4.6
2
+
3
+ **Release Date:** 2026-09-14
4
+
5
+ ## Overview
6
+
7
+ v4.4.6 is a **maintenance release**. No API was added, removed or changed, and **no library source file changed** — the entire diff is `gradle/libs.versions.toml`, the five publication blocks, and documentation.
8
+
9
+ The one change worth reading is a deliberate **downgrade** of WorkManager to **2.9.1**. WorkManager 2.10 and 2.11 call `JobScheduler.forNamespace` on any device reporting `SDK_INT >= 34`; on modified or spoofed ROMs that report API 34 over an older framework the method is absent, and the resulting `NoSuchMethodError` kills the process at startup via `androidx.startup`'s `WorkManagerInitializer`. 2.9.1 is the last release without that call. It also picks up AGP **9.4.0**, Firebase BOM **34.19.0**, Compose BOM **2026.09.00** and Yandex Mobile Ads **8.4.0**.
10
+
11
+ Upgrading is a drop-in from 4.4.x.
12
+
13
+ ---
14
+
15
+ ## Changed
16
+
17
+ ### WorkManager pinned back to 2.9.1 (a downgrade, on purpose)
18
+
19
+ `androidx.work:work-runtime` moves **2.11.2 → 2.9.1**. This is the only dependency in the catalog moving backwards, and it is intentional.
20
+
21
+ **The defect.** WorkManager **2.10 and 2.11** call `android.app.job.JobScheduler.forNamespace` whenever `Build.VERSION.SDK_INT >= 34`. That method genuinely exists on API 34 — but modified and spoofed ROMs that *report* API 34 while running an older framework underneath do not have it. Constructing the WorkManager singleton on such a device throws `NoSuchMethodError`.
22
+
23
+ That throw is fatal rather than merely inconvenient because `androidx.startup` auto-initializes WorkManager through `WorkManagerInitializer`, which runs from `InitializationProvider` — a `ContentProvider`. `ActivityThread.handleBindApplication` installs content providers **after** `Application.attachBaseContext` but **before** `Application.onCreate`, so there is no user code on the stack to catch it and nothing in the app has run yet. The process dies during bind:
24
+
25
+ ```
26
+ Fatal Exception: java.lang.RuntimeException: Unable to get provider
27
+ androidx.startup.InitializationProvider: java.lang.NoSuchMethodError:
28
+ No virtual method forNamespace(Ljava/lang/String;)Landroid/app/job/JobScheduler;
29
+ in class Landroid/app/job/JobScheduler; or its super classes
30
+ (declaration of 'android.app.job.JobScheduler' appears in /system/framework/framework.jar)
31
+ at android.app.ActivityThread.installProvider(ActivityThread.java:7467)
32
+ at android.app.ActivityThread.installContentProviders(ActivityThread.java:6973)
33
+ at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6744)
34
+ ```
35
+
36
+ In a minified build the `StartupException` between the two appears under its obfuscated name (`y40:` or similar), so match on the `InitializationProvider` + `forNamespace` pair rather than on the middle frame. `declaration ... appears in /system/framework/framework.jar` is the confirmation that the device's framework really is older than the API level it advertises.
37
+
38
+ **2.9.1 is the last release without that call**, which is why the pin lands exactly there rather than at some newer 2.10.x or 2.11.x patch — the call is present throughout both lines.
39
+
40
+ **This is a host-device problem, not an ads problem.** No source file in any of AdManageKit's five modules references `androidx.work`. The dependency is declared purely to control which version lands in the graph — the Next-Gen GMA SDK asks for `work-runtime:2.7.0` transitively, and this entry is what decides where that resolves. The downgrade changes nothing about the library's behavior, surface, or minimum requirements; it only moves a pin.
41
+
42
+ **The pin does not override your app.** It is an `implementation` dependency, so it lands in the published POM at `runtime` scope, and Gradle's conflict resolution still picks the **highest** version across the whole graph. If your app declares 2.10 or 2.11 directly, or depends on anything that does, you resolve that version and you keep the crash. Check what you actually resolve:
43
+
44
+ ```bash
45
+ ./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep androidx.work
46
+ ```
47
+
48
+ If that shows 2.10.x or 2.11.x and you are seeing `NoSuchMethodError` on `JobScheduler.forNamespace` in your startup crash reports, pin it in the app as well:
49
+
50
+ ```kotlin
51
+ dependencies {
52
+ implementation("androidx.work:work-runtime:2.9.1")
53
+ }
54
+ ```
55
+
56
+ **If you need 2.10+ APIs**, do not downgrade your app to match the library. Take the auto-initializer out of the startup path instead, so a failure is catchable rather than fatal — remove `WorkManagerInitializer` in the manifest and initialize WorkManager yourself inside a guard:
57
+
58
+ ```xml
59
+ <provider
60
+ android:name="androidx.startup.InitializationProvider"
61
+ android:authorities="${applicationId}.androidx-startup"
62
+ tools:node="merge">
63
+ <meta-data
64
+ android:name="androidx.work.WorkManagerInitializer"
65
+ android:value="androidx.startup"
66
+ tools:node="remove" />
67
+ </provider>
68
+ ```
69
+
70
+ Then have your `Application` implement `androidx.work.Configuration.Provider`. WorkManager falls back to on-demand initialization at the first `WorkManager.getInstance(context)` call — which happens on your own thread, in your own code, where a `NoSuchMethodError` can be caught and degrade that one feature instead of killing the process. Nothing in AdManageKit depends on which version resolves, or on WorkManager being initialized at all.
71
+
72
+ ### Other dependency updates
73
+
74
+ - Android Gradle Plugin **9.3.2 → 9.4.0**
75
+ - Firebase BOM **34.18.0 → 34.19.0**
76
+ - Compose BOM **2026.08.00 → 2026.09.00**
77
+ - Yandex Mobile Ads **8.3.0 → 8.4.0**
78
+ - Robolectric (test only) **4.16.1 → 4.17**
79
+
80
+ Unchanged: Google Mobile Ads Next-Gen SDK **1.4.0**, Play Billing **9.1.0**, Kotlin **2.2.10**, UMP **4.0.0**, Compose compiler **1.5.8**.
81
+
82
+ ## Fixed
83
+
84
+ ### A stray leading space in the `workRuntime` catalog entry
85
+
86
+ The downgraded version was written as `" 2.9.1"` — with a leading space. Gradle does not trim version strings, so it treats that as a distinct and unresolvable coordinate rather than 2.9.1. Caught before tagging; the published 4.4.6 resolves `androidx.work:work-runtime:2.9.1` cleanly, verified against `:AdManageKit:dependencies`.
87
+
88
+ ## Notes
89
+
90
+ - No behavioral change in any ad, billing, consent or waterfall path. The existing 176 tests pass unchanged
91
+ - Robolectric stays pinned to SDK 35 via `robolectric.properties`; the 4.17 bump does not change that
92
+ - There is nothing to migrate — upgrading is a one-line version bump from 4.4.5
93
+
94
+ ---
95
+
96
+ ## Upgrading
97
+
98
+ ```gradle
99
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.6'
100
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.6'
101
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.6'
102
+
103
+ // For Jetpack Compose support
104
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.6'
105
+
106
+ // For Yandex Ads multi-provider support
107
+ implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.6'
108
+ ```
109
+
110
+ No code changes are required.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "admanagekit-mcp-server",
3
- "version": "1.2.4",
3
+ "version": "1.2.5",
4
4
  "description": "MCP server for AdManageKit Android library - documentation lookup and code generation",
5
5
  "main": "dist/index.js",
6
6
  "bin": {