# ARCore 64-bit requirement

In August 2020, *Google Play Services for AR* (ARCore) removed support for
32-bit-only apps on some 64-bit devices. Support for 32-bit-only ARCore enabled
apps on the remaining 64-bit devices may be removed without notice in an
upcoming ARCore release. 32-bit-only ARCore enabled apps running on 32-bit
devices are unaffected and continue to be supported.

If you published a 32-bit-only (e.g., `armeabi-v7a`) version of your
ARCore-enabled app without publishing a corresponding 64-bit (`arm64-v8a`)
version for 64-bit devices, you must update your app with a compatible 64-bit
version for 64-bit devices.

**32-bit-only ARCore-enabled apps that aren't updated will fail to create an
ARCore session and might crash when attempting to start an augmented reality
(AR) session on affected 64-bit devices**.

If you set the `android:use32bitAbi="true"` attribute in your
app's `AndroidManifest.xml`, your app will only use 32-bit libraries. Any AR
experiences in your app will attempt to use ARCore in 32-bit mode. However, the
32-bit libraries will not be present in the *Google Play Services for AR*
service on some 64-bit devices. Without these libraries, your app will fail to
create an ARCore session and might crash when attempting to start an augmented
reality (AR) session on those affected 64-bit devices. This affects both native
AR experiences and WebXR-based AR experiences inside a WebView component.

## Google Play Store 64-bit requirement

The ARCore 64-bit requirement described in the preceding section applies to all
64-bit devices, regardless of Android version and API level. This requirement is
separate and not related to the Google Play
[64-bit requirement](https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html)
that went into effect on August 1, 2019, which is
[evaluated at the app release level](https://developer.android.com/games/optimize/64-bit#multi-apk-compliance)
and applies only to APKs or app bundles that are distributed to devices running
Android 9 Pie (API level 28) or later.

## Understanding ARCore ABI support

ARCore lets you build apps that support the following
[Android ABIs](https://developer.android.com/ndk/guides/abis):

- 32-bit (e.g., `armeabi-v7a`) and 64-bit (`arm64-v8a`) apps that target
  physical
  [ARCore supported devices](https://developers.google.com/ar/devices)

- 32-bit (`x86`) and 64-bit (`x86_64`) apps that run inside an
  [Android Emulator](https://developers.google.com/ar/develop/java/emulator)

When you build an ARCore-enabled app, the Android build system includes one or
more ARCore native libraries (`lib/.../libarcore_sdk*.so`) for the Android ABIs
targeted by your app.

32-bit-only ARCore-enabled apps were previously able to run on both 32-bit
and 64-bit devices. In August 2020 *Google Play Services for AR* (ARCore)
stopped including 32-bit native libraries on some 64-bit devices, at which time
32-bit only ARCore-enabled apps were no longer able to run on affected 64-bit
devices. In a future release, support for 32-bit-only ARCore-enabled apps may
also be removed without notice from the remaining 64-bit devices.

**32-bit-only ARCore-enabled apps that aren't updated will fail to create a
session and might crash when attempting to start an augmented reality (AR)
session on affected 64-bit devices**, specifically:

| ARCore SDK | Session creation failure details |
|---|---|
| **ARCore SDK for Android (NDK)** | [`ArSession_create`](https://developers.google.com/ar/reference/c/group/session#arsession_create) and [`ArSession_createWithFeatures`](https://developers.google.com/ar/reference/c/group/session#arsession_createwithfeatures) will return `AR_ERROR_FATAL`. |
| **ARCore SDK for Android (Java)** | The Session constructors, [`Session(Context)`](https://developers.google.com/ar/reference/java/com/google/ar/core/Session#Session-context) and [`Session(Context, Set<Session.Feature>)`](https://developers.google.com/ar/reference/java/com/google/ar/core/Session#Session-context-features), will throw a [`FatalException`](https://developers.google.com/ar/reference/java/com/google/ar/core/exceptions/FatalException). |
| **ARCore SDK for Unity** | When you enable the [`ARCoreSession`](https://developers.google.com/ar/reference/unity/class/GoogleARCore/ARCoreSession) component, which is usually found on the [ARCore Device](https://developers.google.com/ar/reference/unity/prefab/ARCore_Device) prefab, ARCore will fail to create an ARCore session and [`Session.Status`](https://developers.google.com/ar/reference/unity/class/GoogleARCore/Session#status) will be `SessionStatus.FatalError`. |
| [**AR Foundation (Unity)**](https://unity.com/unity/features/arfoundation) + [**ARCore XR Plugin**](https://docs.unity3d.com/Packages/com.unity.xr.arcore@latest) | The app will stop rendering (black screen) when the app tries to start an AR session, due to a crash on the main thread while trying to load non-existent 32-bit ARCore native libraries. |

## Determining whether your app must be updated

To check whether your published app includes the required native ARCore
libraries to support 64-bit devices:

1. Open the [Google Play Console](https://play.google.com/console).

2. Select your ARCore-enabled app.

3. Expand the app's active release to verify that the **Native platforms**
   includes 64-bit (`arm64-v8a`) support.

## Updating your app to support 64-bit devices

To update an existing 32-bit-only ARCore-enabled app to include 64-bit native
libraries:

1. Update your project to use the latest [ARCore SDK](https://developers.google.com/ar/develop/downloads).

2. Build your app and publish it using the
   [Google Play Console](https://play.google.com/console).

Google Play will verify that your app meets the Google Play Store
[64-bit requirement](https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html)
that previously went into effect on August 1, 2019. To ensure that your
ARCore-enabled app includes 64-bit (`arm64-v8a`) support for all 64-bit devices,
regardless of Android version or API level.