Skip to main content

· 3 min read
Michael

Android 15 (API v35) includes some changes that are intended to create a more consistent, intuitive user experience.

note

You can read the official release of this information here: https://developer.android.com/about/versions/15/behavior-changes-15

Window inset changes

There are two changes related to window insets in Android 15: edge-to-edge is enforced by default, and there are also configuration changes, such as the default configuration of system bars.

Edge-to-edge enforcement

Apps are edge-to-edge by default on devices running Android 15 if the app is targeting Android 15 (API level 35).

An app that targets Android 14 and is not edge-to-edge on an Android 15 device. The application is contained within the window insets.

After updating your target sdk to 35 you will find that your application is now expected to handle the window insets and is rendered edge-to-edge. However, many elements are now hidden by the status bar, 3-button navigation bar, or display cutout due to the Android 15 edge-to-edge enforcements.

You will need to update your application to correctly handle rendering within the window insets and render within these bounds so UI elements are not hidden.

Handling window insets

To get the safe area to render you can use the Application extension to retrieve the display cutout information:

var displayCutout:DisplayCutout = Application.service.display.getDisplayCutout();

This object contains 4 properties: safeInsetBottom, safeInsetTop, safeInsetLeft, safeInsetRight, each indicating the number of pixels from the edge of the screen that system bars or cutouts may affect.

There is also an boundingRects property containing detailed areas for any cutouts that may affect rendering.

You can use this to apply bounds to your root content "safe area", eg using a starling _safeArea object for rendering UI elements you can use something like the following :

if (Application.isSupported)
{
var cutout:DisplayCutout = Application.service.display.getDisplayCutout();
var topInset:Number = cutout.safeInsetTop / _scale;
var bottomInset:Number = cutout.safeInsetBottom / _scale;
var leftInset:Number = cutout.safeInsetLeft / _scale;
var rightInset:Number = cutout.safeInsetRight / _scale;

_safeArea.setTo(leftInset, topInset,
_stageWidth - leftInset - rightInset,
_stageHeight - topInset - bottomInset);
}
note

If you use immersive mode or change display modes at any time in your application you should ensure to reapply these corrections afterwards.

Cutouts

If your app targets SDK 35 and is running on an Android 15 device, LayoutMode.CUTOUT_ALWAYS is the default behavior. This means that if you were previously relying on setting the LayoutMode eg via calling

Application.service.display.setDisplayMode( 
DisplayMode.FULLSCREEN,
LayoutMode.CUTOUT_NEVER );

this will be interpretted as "always" and your content will be drawn into cutout regions.

Opt-out

As a temporary workaround you can opt-out of this edge-to-edge enforcement in v35.

caution

This option to opt-out will be removed once you update to target v36, so this workaround should only be treated as temporary.

Firstly, create a custom resources folder in your application and package it according to the guide here.

Under your resources folder create a values-v35 folder and add a file styles.xml into this folder with the following content:

styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="Theme.NoShadow" parent="android:style/Theme.NoTitleBar">
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>

</resources>

The android:windowOptOutEdgeToEdgeEnforcement option is the critical one that will disable this edge-to-edge enforcement for Android 35.

· 4 min read
Michael

Play Billing v7 (Android 35), Adverts

We've had a big month of updates! From crucial billing upgrades to smoother sign-ins and better mediation support, this round of releases helps you stay compliant, improve user experience, and keep things running smoothly.

We'd also like to take a moment to thank everyone who has migrated to our new payment provider and started using the new website. We hope the transition has been smooth and that you're finding the new site easier to use. If you run into any issues or have any questions, don't hesitate to reach out - we're always happy to help!

· 7 min read
Michael

New website release, extension updates!

Over the past few months, we've been working intensively to rebuild airnativeextensions.com, primarily to integrate a new payment provider and ensure we can continue delivering extensions to developers worldwide. It’s been a significant undertaking, but we’re confident the improvements to the platform will be well worth it.

What this means for you:

  • Nothing will change in the near future
  • All new purchases will be done through our new payment provider
  • We are asking all clients to migrate to the new payment provider

We've made migration easy and allows you to combine your subscriptions into a single payment if you want. More information below.

Also there are lots of extension updates that have been released.

· 2 min read
Michael

Linux support

APM Now Supports Linux: Expanded Capabilities and Key Updates

Great news for developers! APM has been updated to fully support Linux operating systems. This means you can now use APM to install and manage libraries, extensions, and application descriptors in Linux-based development environments. This long-awaited feature enhances APM’s versatility and makes it even more accessible to a broader range of developers.

· 4 min read
Michael

A Major Upgrade for AIR Extensions! New Payment System and Custom Development Work

Over the past six months, we’ve been working closely with Harman to bring a smarter, more efficient dependency system to AIR. Our new approach replaces embedded dependencies with Gradle dependencies, making extension management easier, faster, and more resilient.

What this means for you:

  • Smaller extension file sizes – Free up space & streamline your builds
  • Faster compilation times – Get things done in record time
  • Much simpler manual manifest additions – Spend less time on setup
  • Better dependency resolution – Seamless updates and fewer conflicts
  • Improved compatibility – Extensions work together more smoothly

These improvements happen behind the scenes, making everything more stable and maintainable. But you’ll definitely notice the difference with smaller files, fewer manifest changes, and much faster builds. 🚀

· 7 min read
Michael

Notifications, Game Services, InAppBilling, Firebase Dynamic Links, Adverts, ironSource

Recently we have released updates to several of our main extensions, key updates include:

  • Notifications on windows from non-UWP applications
  • Play Games Services v2 integration through GameServices and access through Google Play Games on PC
  • InAppBilling Play Billing update to v6.2.1
  • AdMob update to the latest SDK (Android and iOS)
  • ironSource update to the latest SDK (Android and iOS)

Lots of Android and specifically Google related updates ensuring your applications can meet the latest requirements for the Play Store.

As always, if you have any development needs for AIR, Unity, Flutter or Haxe, please feel free to contact us at airnativeextensions@distriqt.com.

· 4 min read
Michael

BugSnag, Android Splash Screens, Firebase, Facebook, Adverts

Over the past few months, we have been diligently updating our extensions. We are currently undertaking major rewrites of some of our oldest extensions, which were initially developed over a decade ago. By rebuilding these extensions from the ground up, we aim to integrate the latest functionalities and advancements into AIR.

It has been truly exciting to witness Harman's development of the AIR SDK. We've been actively supporting their efforts by providing insights, identifying and debugging issues, and offering feedback to enhance the development process. The collaboration with Harman has been incredibly productive, and it's fantastic to see such responsiveness and dedication from their team. Their willingness to address our concerns and implement suggestions has significantly contributed to the progress and refinement of the AIR SDK.

We hope all AIR developers are excited by the continuing development of the platform!

As always, if you have any development needs for AIR, Unity, Flutter or Haxe, please feel free to contact us at airnativeextensions@distriqt.com.

· 5 min read
Michael

Startup time of an application is often key in retaining your users so it can be critical to make start time as short as possible.

One factor that can contribute to the startup time of an AIR application is loading the definitions for the functionality in native extensions. This is normally done by AIR automatically however with the latest AIR release you can now specify an option on an extension in your application to delay load the extension functionality.

· 4 min read
Michael

ANE updates, AIR SDK Manager

This year has been remarkably busy and unfortunately news updates were pushed down the list, but as the year comes to a close I'd like to update on what we see as the major native extension news over the past months.

Major changes across all our extensions include:

  • iOS/macOS Xcode 14 update that required removal of bitcode support and increasing the minimum sdk to 12;
  • Android permissions overhaul for new Android 33+ requirements;
  • Android compatibility when running AIR in a background thread;
  • Apple Silicon support for our macOS extensions;

We have several major projects in the works including:

  • Scanner rewrite away from the deprecated library currently in use;
  • Migration to gradle dependencies in all our dependency extensions;
  • apm integration with IDEs;

Some of the key recent changes are listed below.

Looking forward to another year of amazing AIR development!

· 2 min read
Michael

If you are publishing games to the AppStore for iOS you may have recently received an notification along the following lines:

Upcoming Game Center entitlement requirement

Starting August 16, 2023, new apps and app updates that offer Game Center features need to include the Game Center entitlement and have Game Center features configured in App Store Connect before you can submit them to the App Store. Existing apps on the App Store are not affected by this new requirement.

We noticed that although the apps listed below have Game Center features configured in App Store Connect, their latest binary delivery doesn’t include the Game Center entitlement. In your next app update, please update your binary to include the entitlement.

There are two important things you need to do to your application in order to meet this new requirement.

Firstly, make sure the capability is enabled in "Certificates, Identifiers & Profiles" for your application in the developer portal. Then update and download your provisioning profiles to ensure they are updated with the new capability.

Then in your application descriptor you will need to add the entitlement. If you are using apm just ensure you are using the latest version and then generate your app descriiptor, apm will ensure the entitlement is correctly added.

If you are manually managing your app descriptor additions then you will need to add the following to the Entitlements node under iPhone:

<iPhone>
<Entitlements><![CDATA[

<key>com.apple.developer.game-center</key>
<true/>

]]></Entitlements>
</iPhone>

Once you have followed these steps your application will support this new requirement and you will be able to submit your application to the AppStore.