Releases: google-ar/arcore-android-sdk
ARCore SDK for Android v1.9.1
Note: this is an ARCore APK-only release (version 1.9.1).
SDK version remains unchanged (version 1.9.0).
Bug fixes
- Updates ARCore APK to add support for Oneplus 3T and Samsung A60. For a complete list of supported devices, see the ARCore Supported Devices page.
ARCore SDK for Android v1.9.0
Breaking changes/behavioral changes
- When using a Session that is configured to use a front-facing (selfie) camera,
getSupportedCameraConfigs()
will return one or more supported camera configs. For apps built using ARCore SDK 1.7.0 or 1.8.0, three identical camera configs were returned when using the front-facing (selfie) camera. getMeshTriangleIndices(…)
now returns aShortBuffer
instead of aCharBuffer
.- Augmented Images are now tracked once they leave the camera frame. See "New APIs and capabilities" below for details.
New APIs and capabilities
- ARCore can now track moving Augmented Images. Previously, images were assumed to not move, and their pose would only be updated infrequently.
- ARCore can continue tracking images even though they are longer visible to the camera. Use
AugmentedImage#getTrackingMethod()
(Java) orArAugmentedImage_getTrackingMethod()
(NDK) to determine whether the image is currently being tracked by the camera (FULL_TRACKING
), or is being tracked based on its last known pose (LAST_KNOWN_POSE
). - Adds the Scene Viewer feature, which can be used to view 3D models in AR from most Android browsers with the
<model-viewer>
web component.
Other changes
- Removes the check for the device tracking state in augmented_image_c and augmented_image_java samples. Augmented Images now can track images when the device tracking state is not tracking.
Bug fixes
- Fixed a
NullPointerException
that was thrown when setting a nullAugmentedImageDatabase
in the session configuration. - Fixed issue causing face meshes to only render on Android O (API Level 26) and above devices, due to mesh data being returned with incorrect byte order.
ARCore SDK for Android v1.8.0
Behavioral changes
- Auto Focus has been enabled by default in augmented_image_c and augmented_image_java samples, to improve with tracking of small, nearby image targets on devices where the ARCore camera supports Auto Focus.
Bug fixes
- Issue #683, Issue #729:
- Fixed CPU Image Access on Xiaomi devices: Mi 8, Mi 8 SE, Mi Mix 2S, Mi Mix 3 and Pocophone F1.
ARCore SDK for Android v1.7.0
User privacy requirements
- Updated
README.md
to clarify ARCore's User Privacy Requirements.
Breaking changes
None.
New APIs and capabilities
- New
Camera.getTrackingFailureReason()
(Java) andArCamera_getTrackingFailureReason()
(NDK) method that returns the reason for AR tracking failure when tracking state isPAUSED
. - New
Frame.transformCoordinates2d(…)
(Java) andArFrame_transformCoordinates2d(…)
(NDK) method that transforms a list of 2D coordinates from one 2D coordinate system to another 2D coordinate system. - New Session constructors
Session(Context, Set<Session.Feature>)
(Java) andArSession_createWithFeatures()
(NDK) enable new capabilities, starting with: - Front-facing Camera & Augmented Faces
- Apps can now enable Augmented Faces with the front-facing (selfie) camera by requesting the
FRONT_CAMERA
feature when creating a session. - New methods
CameraConfig.getFacingDirection()
(Java) andArCameraConfig_getFacingDirection()
(NDK) let an app check if it is using the front-facing camera. - Note: Motion tracking, all types of anchors, Augmented Images, and plane detection are not available when using the front-facing camera.
- New method
Config.setAugmentedFaceMode(…)
lets an app enable Augmented Faces. - New Trackable
AugmentedFace
class to detect a face, determine region poses and generate a 3D face mesh. AugmentedFace
(Java) class and a set ofArAugmentedFace_*
(NDK) methods provide getters to request the center pose, region poses, vertices, normals, and triangle indices of the 3D face mesh.
- Apps can now enable Augmented Faces with the front-facing (selfie) camera by requesting the
- Shared Camera access (Java-only)
- Apps can now share camera control with ARCore by requesting the
SHARED_CAMERA
feature when creating a session. This feature is primarily intended to allow fast switching between camera-only (non-AR) and ARCore modes. - New
shared_camera_java
example that demonstrates how to share camera access with ARCore. - New
SharedCamera
class to enable apps to share Camera2 API access with ARCore.- Note:
Frame.getImageMetadata()
throwsIllegalStateException
when using a shared camera session. Instead, subscribe to the camera callback directly by usingSharedCamera.setCaptureCallback(…)
, and useFrame.getAndroidCameraTimestamp()
to correlate frame to metadata.
- Note:
- New method
Session.getSharedCamera()
gets the shared camera object for the session. - New method
Frame.getAndroidCameraTimestamp()
returns the Android camera timestamp of the image.
- Apps can now share camera control with ARCore by requesting the
- Additional Java-only changes:
- New method
Session.close()
allows for explicit release of resources held by ARCore session for better resource control. PointCloud
now implementsCloseable
, allowing it to be used with Java try-with-resources and Kotlinuse
blocks.
- New method
Deprecations
Frame.transformDisplayUvCoords
(Java) andArFrame_transformDisplayUvCoords
(NDK) is now deprecated. Please useframe.transformCoordinates2d(Coordinates2d.VIEW_NORMALIZED, …, Coordinates2d.TEXTURE_NORMALIZED, …)
(Java) andArFrame_transformCoordinates2d(…, AR_COORDINATES_2D_VIEW_NORMALIZED, …, AR_COORDINATES_2D_TEXTURE_NORMALIZED, …)
(NDK) instead.
Bug fixes
- Issue #630:
- Java:
Session.createAnchor()
andTrackable.createAnchor()
will now correctly throwSessionPausedException
andNotTrackingException
when appropriate instead ofFatalException
. - C:
ArSession_acquireNewAnchor()
andArTrackable_acquireNewAnchor()
will now correctly returnAR_ERROR_SESSION_PAUSED
andAR_ERROR_NOT_TRACKING
when appropriate instead ofAR_ERROR_FATAL
.
- Java:
ARCore SDK for Android v1.6.0
License and terms of service changes
- Binaries in the SDK are now covered by the Google APIs Terms of Service. See
LICENSE
file for details.
Breaking & behavioral changes
- The behavior of
Camera.getPose()
(Java) andArCamera_getPose()
(C) have changed. See "Bug fixes" below for details. - Java:
new Session()
now correctly declares that it can throwUnavailableDeviceNotCompatibleException
. See "Bug fixes" below for details. - The middle CPU image resolution returned by
Session.getSupportedCameraConfigs()
(Java) andArSession_getSupportedCameraConfigs()
(C) is no longer guaranteed to be 1280 x 720. It now varies by device.
Other changes
- Improved documentation of prerequisites for
new Session()
(Java) andArSession_create()
(C).
Bug fixes
Camera.getPose()
(Java) andArCamera_getPose()
(C) now correctly return the camera pose oriented with the physical image sensor as originally intended. Previously this method had returned a camera rotated to be aligned with Android sensor coordinates. This change only affects applications using the ARCore v1.6 SDK and later.- Java:
new Session()
now correctly declares that it can throwUnavailableDeviceNotCompatibleException
. This is not a behavioral change as this exception has been possible from native code since ARCore 1.0. - Issue #563: Resolved an crash with a log message "AssetManager has been finalized" that could occur on some devices.
- Issue #630: Fixed a bug where multiple points in a point cloud could use the same ID.
- C: Issue #625:
ArSession_getAllTrackables()
now clears the input list as documented. - Fixed issue where ARCore would fail to track on certain devices if the middle CPU image resolution was set. The middle CPU image resolution is no longer guaranteed to be 1280 x 720, see "Breaking changes" above.
ARCore SDK for Android v1.5.0
ARCore APK v1.5.3
Note: this is an ARCore APK-only release (version 1.5.3). SDK version remains unchanged (version 1.5.0).
Bug fixes
- Improves support for Sony Xperia XZ3.
ARCore APK v1.5.2
Note: this is an ARCore APK-only release (version 1.5.2). SDK version remains unchanged (version 1.5.0).
Bug fixes
- Improves tracking quality on some devices.
ARCore APK v1.5.1
Note: this is an ARCore APK-only release (version 1.5.1). SDK version remains unchanged (version 1.5.0).
Bug fixes
- Fixed a memory leak when using Playground.
- Fixed a crash related to issue 563. Note: the underlying issue has not been fixed, but when this error occurs it will now throw a
FatalException
(Java) or returnAR_ERROR_FATAL
(C) instead of crashing with a JNI error.
ARCore SDK for Android v1.5.0
Breaking changes
None.
New APIs and capabilities
- New Java method
PointCloud.getIds()
and C functionArPointCloud_getIds()
that returns a stable ID associated with each point in the point cloud.
Deprecations
None.
Behavioral changes
ArCoreApk.requestInstall(Activity, bool)
(Java) andArCoreApk_requestInstall()
(C) now defaults to skipping the user education dialog for AR Optional apps.
Other changes
- Removed dead code in computervision sample (C and Java) related to reading of UV planes of YUV image.
- Suppress drawing of camera background in samples if frame timestamp is zero. This is to avoid drawing possible leftover data from previous sessions when a texture is reused.
- Updated documentation for
Camera.getPose()
(Java) andArCamera_getPose()
(C) to reflect the current incorrect behavior, which has existed since ARCore 1.0. The behavior will be fixed in an upcoming version of the SDK, without affecting behavior of existing apps.
Bug fixes
- Issue #419: Added a workaround that should reduce or eliminate cases of poor or no motion tracking on Qualcomm-based Samsung Galaxy S9, S9+ and Note9 devices.
- Issue #469: Resolved a race condition that could cause ARCore to report a device as unsupported immediately after ARCore is updated.
- The
bool
argument toArCoreApk_requestInstall
has been changed toint32_t
for ANSI C compatibility. - The computervision C sample was releasing the
ArImage
too soon. Moved call toArImage_release()
after call tocpu_image_renderer_.Draw(..)
. - The computervision C and Java samples updated with additional locking, to avoid switching resolutions while the
ArImage
is being used for rendering. - Resolved some cases where
ArCoreApk.requestInstall()
(Java) andArCoreApk_requestInstall()
(C) could throw aFatalException
.
ARCore SDK for Android v1.4.0
Updated on 2018-09-11 to add links to ARCore 1.4.1 APK that fixes Issue 512 and Issue 429.
ARCore APK v1.4.1
Note: this is ARCore APK-only release.
Bug fixes
In ARCore 1.4.1 APK, fixed an issue where supported devices could sometimes report as unsupported:
- Issue 512 Zenfone AR not supported with ARCore 1.4?
- Issue 429 FatalException occurs when using huawei p20 to run solarsystem
ARCore SDK for Android v1.4.0
Breaking changes
None.
New APIs and capabilities
New camera configuration API
- Java/C: New
CameraConfig
class describes the camera config, used to obtain the CPU image and GPU texture dimensions. - Java/C: New methods on
Session
:getSupportedCameraConfigs()
returns a list of supported camera configs.setCameraConfig(…)
sets the camera config to one returned bygetSupportedCameraConfigs()
.getCameraConfig()
gets the camera config currently in use.
- C: New
ArCameraConfigList
class to hold list ofArCameraConfig
s.
New raycast methods
- Java: New method
Frame.hitTest(float[] origin, int originOffset, float[] direction, int directionOffset)
that performs a hit test with an arbitrary ray constructed from given origin and direction. - C: New method
ArFrame_hitTestRay(…)
that performs a hit test with an arbitrary ray constructed from given origin and direction.
Support for camera auto focus mode
- Java/C: New methods on
Config
:setFocusMode(FocusMode focusMode)
to enable/disable auto-focus. Default mode remains fixed focus, which is optmized for AR tracking.getFocusMode()
returns the current focus mode.
Deprecations
None.
Behavioral changes
- Java/C: If the camera configuration has changed by
Session
'ssetCameraConfig()
since the last call toresume()
, all images previously returned byFrame
'sacquireCameraImage()
must be closed before callingresume()
. Failure to do so will result in anIllegalStateException
(C:AR_ERROR_ILLEGAL_STATE
) and the session will not resume.
Other changes
- Java: Fix comment for
CameraIntrinsics.getImageDimensions()
to refer to "image dimensions" instead of "principal point".
ARCore SDK for Android v1.3.0
Updated on 2018-06-25 to also mention fix for issue 212.
Breaking changes
None.
New APIs and capabilities
- New method on
Frame
:getAndroidSensorPose()
returns the world-space pose of the Android sensor frame.
- New methods on
Camera
:getImageIntrinsics()
returns the camera image's camera intrinsics.getTextureIntrinsics()
returns the camera texture's camera intrinsics.
- New class
CameraIntrinsics
that provides the unrotated physical characteristics for a camera, which consists of its focal length, pricinpal point, and image dimensions. - New method on
Session
:getConfig()
returns the config set bySession.configure()
.
Deprecations
None.
Behavioral changes
None.
Other changes
Image.close()
is now idempotent. Fixes issue 352.
Bug fixes
- If an invalid API key for the ARCore Cloud Anchor Service is specified, the final Cloud Anchor state of the anchor will now return
ERROR_NOT_AUTHORIZED
. - Fixed issue 212 with AR-Optional apps on 32-bit systems running Android M and earlier.
ARCore SDK for Android v1.2.1
Changes
- SDK version updated 1.2.1, to match other SDK platforms. Otherwise, equivalent to ARCore SDK for Android 1.2.0.
ARCore SDK for Android v1.2.0
Updated on 2018-05-11 to remove temporary APK sideload instructions.
Breaking changes
None.
New APIs and capabilities
- Cloud Anchors API. Enables developers to build shared AR experiences across iOS and Android, by allowing anchors created on one device to be transformed into cloud anchors and shared with users on other devices.
- Augmented Images API. Enables ARCore apps to detect and track images.
- Vertical plane detection. ARCore now detects both horizontal and vertical planes.
Deprecations
- Java:
Session.isSupported()
is now deprecated. Device capability checking is part of ARCore installation functionality (specificallyArCoreApk.checkAvailability()
andArCoreApk.requestInstall()
). The implementation is frozen to always returntrue
as it did in release 1.1. - C:
ArSession_checkSupported()
is now deprecated. Device capability checking is part of ARCore installation functionality (specificallyArCoreApk_checkAvailability()
andArCoreApk_requestInstall()
). The implementation is frozen to always returnAR_SUCCESS
as it did in release 1.1.
Behavioral changes
- The default session config now enables both horizontal and vertical plane detection. Previously only horizontal planes were detected.
Other changes
- Updated documentation for session config
UpdateMode
AR_UPDATE_MODE_BLOCKING
to specify behavior when camera images do not arrive by the built-in timeout. - Java: For AR-Required apps,
ArCoreApk.checkAvailability()
will always immediately return aSUPPORTED_*
Availability
. - C: For AR-Required apps,
ArCoreApk_checkAvailability()
will always immediately return anAR_AVAILABILITY_SUPPORTED_*
code. - ARCore SDK will now work properly when built into a library that is then built into an release proguarded app, by adding
-keepattributes *Annotation*
in your library's proguard spec. - Java: Added
Pose
convenience methodsgetTranslation()
,getRotationQuaternion()
androtateVector()
that return an array instead of taking an output array as an argument. - Sample apps have new, distinct icons.
Bug fixes
- Applications using
launchMode="singleTask"
in theirAndroidManifest.xml
(which is the default for Unity and Unreal apps) will no longer display a blank screen if the user exits the app and re-launches it while the "This app requires the latest version of ARCore" screen is displayed.
Known Issues
- If the API key specified for authenticating with the ARCore Cloud Anchor service is invalid, the final cloud anchor state of the anchor will be
ERROR_INTERNAL
instead ofERROR_NOT_AUTHORIZED
. This is a known issue and will be fixed in an upcoming release.