ARCore SDK for Android Studio
OTHER License
Bot releases are visible (Hide)
Published by marktest1974 2 months ago
ARCore now supports enabling the device's torch mode, allowing for better perception capabilities in dark environments.
Kotlin/Java:
Config.FlashMode
: configuration option for enabling or disabling the flash unit on the device.C:
ArFlashMode
: configuration option for enabling or disabling the flash unit on the device.Published by marktest1974 4 months ago
google/model-viewer#4771
.Published by marktest1974 5 months ago
Published by marktest1974 7 months ago
okhttp
dependency from 3.12.0 to 4.10.0 in the ml_kotlin sample.Published by marktest1974 11 months ago
ArCoreApk
class (Java) and ArCoreApk_*
functions (NDK) to return errors or incorrect non-availability when running in dev builds or other otherwise as a side-loaded app.Published by Nandabiradar about 1 year ago
targetSdkVersion
has been updated to Android API level 34. If your app does not specify a targetSdkVersion
, your app's targetSdkVersion
will become 34 due to manifest merging.NullPointerException
when closing an ARCore session with a SharedCamera
that was already closed.Published by cujo391 about 1 year ago
de.javagl:obj
to version 0.4.0 from version 0.2.1.Published by cujo391 over 1 year ago
Published by cujo391 over 1 year ago
Scene Semantics provides richer details about the surrounding scene, making it easier to understand the world around the user. Scene Semantics runs an ML model on the camera image feed and provides a semantic image with each pixel corresponding to one of 11 labels of outdoor concepts.
See Introduction to Scene Semantics and the semantics_java sample app for more information.
Kotlin/Java:
Frame.acquireSemanticImage()
Frame.getSemanticLabelFraction()
Frame.acquireSemanticConfidenceImage()
SemanticLabel
C:
ArFrame_acquireSemanticImage()
ArFrame_getSemanticLabelFraction()
ArFrame_acquireSemanticConfidenceImage()
ArSemanticLabel
Streetscape Geometry is a new ARCore Geospatial API that provides the geometry of buildings and terrain in an area around the user when the Geospatial API is enabled.
See Streetscape Geometry Developer Guide (Kotlin/Java) and Streetscape Geometry Developer Guide (C) for more information. Additionally, the geospatial_java sample app has been updated to include Streetscape Geometry.
Kotlin/Java:
Config.StreetscapeGeometryMode
StreetscapeGeometry
StreetscapeGeometry.Quality
StreetscapeGeometry.Type
Mesh
C:
ArStreetscapeGeometryMode
ArStreetscapeGeometry
ArStreetscapeGeometryQuality
ArStreetscapeGeometryType
ArMesh
Rooftop anchors are a new Geospatial anchor type that helps you anchor content to a rooftop.
See Geospatial anchors (Java) and Geospatial anchors (C) for more information. Additionally, the geospatial_java sample app has been updated to include Rooftop anchors.
Kotlin/Java:
C:
When both the Depth API and Streetscape Geometry modes are enabled in an ARCore session in areas with VPS coverage, the generated depth images are improved using Streetscape Geometry. Streetscape Geometry is integrated into each generated depth image out to a range of 65.535 meters. No changes are needed when calling the Depth API to see this benefit.
See Geospatial Depth (Java) and Geospatial Depth (C) for more information.
ARCore now provides Vulkan rendering support by exposing the camera image through an AHardwareBuffer
. You can use this Hardware Buffer by binding it to a VkImage
.
See Rendering your ARCore application using Vulkan and the hello_ar_vulkan_c sample app for more information.
Java:
C:
You can configure ARCore to use Electronic Image Stabilization, which smooths camera frames for a more fluid user experience.
See Enabling Electronic Image Stabilization and the hello_eis_kotlin sample app for more information.
Kotlin/Java:
Config.ImageStabilizationMode
Frame.transformCoordinates3d()
Session.isImageStabilizationModeSupported()
Frame.transformCoordinates3d()
with 2D coordinates other than OPENGL_NORMALIZED_DEVICE_COORDINATES
will cause a crash instead of throwing IllegalArgumentException
. This will be resolved in the following release.C:
ArImageStabilizationMode
ArFrame_transformCoordinates3d()
ArSession_isImageStabilizationModeSupported()
ArFrame_transformCoordinates3d()
with 2D coordinates other than AR_COORDINATES_2D_OPENGL_NORMALIZED_DEVICE_COORDINATES
will cause your app to abort instead of returning AR_ERROR_INVALID_ARGUMENT
. This will be resolved in the following release.This release introduces new ARCore async APIs to improve ergonomics when working with asynchronous operations, following the Future paradigm.
Java:
Earth.resolveAnchorOnTerrainAsync()
to obtain a ResolveAnchorOnTerrainFuture
. The old symbol Earth.resolveAnchorOnTerrain()
has been deprecated and may be removed in a later version of ARCore.Session.resolveCloudAnchorAsync()
to obtain a ResolveCloudAnchorFuture
. The old symbol Session.resolveCloudAnchor()
has been deprecated and may be removed in a later version of ARCore.Session.hostCloudAnchorAsync()
to obtain a HostCloudAnchorFuture
. The old symbols Session.hostCloudAnchor()
and Session.hostCloudAnchorWithTtl()
have been deprecated and may be removed in a later version of ARCore.ArCoreApk.checkAvailabilityAsync()
to register a callback. The old symbol ArCoreApk.checkAvailability()
has not been deprecated.C:
ArEarth_resolveAnchorOnTerrainAsync()
to obtain a ArResolveAnchorOnTerrainFuture
or use ArResolveAnchorOnTerrainCallback
. The old symbol ArEarth_resolveAndAcquireNewAnchorOnTerrain()
has been deprecated and may be removed in a later version of ARCore.ArSession_resolveCloudAnchorAsync()
to obtain a ArResolveCloudAnchorFuture
or use ArResolveCloudAnchorCallback
. The old symbol ArSession_resolveAndAcquireNewCloudAnchor()
has been deprecated and may be removed in a later version of ARCore.ArSession_hostCloudAnchorAsync()
to obtain a ArHostCloudAnchorFuture
or use ArHostCloudAnchorCallback
. The old symbols ArSession_hostAndAcquireNewCloudAnchor()
and ArSession_hostAndAcquireNewCloudAnchorWithTtl()
have been deprecated and may be removed in a later version of ARCore.ArCoreApk_checkAvailabilityAsync()
to register a callback. The old symbol ArCoreApk_checkAvailability()
has not been deprecated.C:
ArVpsAvailabilityFuture_getState()
has been deprecated. Use ArFuture_getState()
instead.ArVpsAvailabilityFuture_cancel()
has been deprecated. Use ArFuture_cancel()
instead.ArVpsAvailabilityFuture_release()
has been deprecated. Use ArFuture_release()
instead.ArCheckVpsAvailabilityCallback
has been deprecated. Use ArVpsAvailabilityCallback
instead.Future
, with the methods Future.getState()
and Future.cancel()
. The class VpsAvailabilityFuture
now implements Future
.ArFuture
, with functions ArFuture_getState()
, ArFuture_cancel()
and ArFuture_release()
. All future structs in C can be cast to ArFuture
. In C++, you can use ArAsFuture()
to do the cast.Published by jeremyvc over 1 year ago
Published by jeremyvc almost 2 years ago
All Geospatial poses now expose their orientation accuracy of the Yaw rotation, replacing heading accuracy.
Kotlin/Java
GeospatialPose.getHeading()
has been deprecated. Please use GeospatialPose.getEastUpSouthQuaternion()
instead.GeospatialPose.getHeadingAccuracy()
has been deprecated. Please use GeospatialPose.getOrientationYawAccuracy()
instead.C
ArGeospatialPose_getHeading()
has been deprecated. Please use ArGeospatialPose_getEastUpSouthQuaternion()
instead.ArGeospatialPose_getHeadingAccuracy()
has been deprecated. Please use ArGeospatialPose_getOrientationYawAccuracy()
instead.Session.checkVpsAvailabilityAsync()
and ArSession_checkVpsAvailabilityAsync()
will continue to retry silently in the background if it is unable to establish a connection to the ARCore service for 5 seconds.Published by jeremyvc about 2 years ago
A new ARCore Geospatial API has been added to check for Visual Positioning System (VPS) availability at a specified horizontal position at runtime. This API can be used without an active AR session, for example, to present an "Enter AR" button only when VPS is available.
ArSession_checkVpsAvailabilityAsync()
determines if VPS is available in a given area. This will initiate a query with a remote ARCore API service.Geospatial poses now expose their orientation in 3D space.
Geospatial poses can now be converted to and from world-space poses.
Kotlin/Java reference
Earth.getGeospatialPose()
converts a Pose
to a GeospatialPose
in the same position.Earth.getPose()
converts a geospatial location and orientation to a Pose
in the same position.C reference
ArEarth_getGeospatialPose()
converts the input pose to a ArGeospatialPose
in the same position.ArEarth_getPose()
converts a geospatial location and orientation to an ArPose
in the same position.Note that Geospatial poses obtained from these functions have a heading value set to zero. Instead, use its EUS quaternion instead.
geospatial_java
sample has been adjusted to check for VPS availability.geospatial_java
sample now supports creating a Geospatial anchor by tapping on the AR camera view.ArEarth_getEarthState()
and ArAnchor_getTerrainAnchorState()
now correctly return ERROR_NOT_AUTHORIZED
when there is an authentication issue instead of returning ERROR_INTERNAL
.Published by jeremyvc about 2 years ago
arcore.googleapis.com
instead of arcorecloudanchor.googleapis.com
.arcore.googleapis.com
, after enabling the ARCore API.ArImage
has been removed. Use android.media.Image
instead.targetSdkVersion
inside the ARCore aar has been updated to API level 33. Specifying a targetSdkVersion
in your project's build.gradle
or AndroidManifest.xml
will override the ARCore value.The new ARCore Geospatial Terrain anchor API can create an anchor at a specified horizontal position and altitude relative to the horizontal position's terrain.
Kotlin/Java reference
Earth.resolveAnchorOnTerrain()
creates a new Anchor
at the specified latitude, longitude, altitude above the terrain and orientation.Anchor.TerrainAnchorState
describes the current Terrain anchor state of Anchor
.C reference
ArEarth_resolveAndAcquireNewAnchorOnTerrain()
creates a new Anchor
at the specified latitude, longitude, altitude above the terrain and orientation.ArTerrainAnchorState
describes the current Terrain anchor state of ArAnchor
.targetSdkVersion
33.Published by jeremyvc over 2 years ago
targetSdkVersion
has been updated to Android API level 32. If your app does not specify a targetSdkVersion
, your app's targetSdkVersion
will become 32 due to manifest merging. Specifying a targetSdkVersion
in your project's build.gradle
or AndroidManifest.xml
will override ARCore's targetSdkVersion
value.targetSdkVersion
32.GeospatialMode.ENABLED
while the session is running may cause the session to hang has been fixed.Published by jeremyvc over 2 years ago
The new ARCore Geospatial API utilizes data from Google Earth 3D models and Street View image data from Google Maps to enable your app for immersive, global-scale, location-based augmented reality experiences.
Kotlin/Java reference
Earth
provides localization ability in geospatial coordinates.
Earth.createAnchor()
creates a new Anchor
at the specified latitude, longitude, altitude, and orientation.Earth.Earthstate
describes the current state of Earth
, including its TrackingState
.GeospatialPose
describes a specific latitude, longitude, altitude, and compass heading.C reference
ArEarth
provides localization ability in geospatial coordinates.
ArEarth_acquireNewAnchor()
creates a new Anchor
at the specified latitude, longitude, altitude, and orientation.ArEarthState
describes the current state of ArEarth
, including its ArTrackingState
.ArGeospatialPose
describes a specific latitude, longitude, altitude, and compass heading.The maximum range of Depth measurements has increased from 8191mm to 65535mm when building with ARCore SDK 1.31 and later. The Depth API now uses all 16-bits to represent depth, where previously only 13 bits were used for depth values.
To reflect this change in behavior, some Depth API functions have new names and behavior changes. The old versions of these functions will have no change in behavior, though it is recommended to make use of the longer depth range. For more information, see ARCore Depth changes in ARCore 1.31.
Frame.acquireDepthImage()
has been deprecated in favor of Frame.acquireDepthImage16Bits()
.Frame.acquireRawDepthImage()
has been deprecated in favor of Frame.acquireRawDepthImage16Bits()
.android.graphics.ImageFormat.DEPTH16
toandroid.hardware.HardwareBuffer.D_16
.ArFrame_acquireDepthImage()
has been deprecated in favor of ArFrame_acquireDepthImage16Bits()
.ArFrame_acquireRawDepthImage()
has been deprecated in favor of ArFrame_acquireRawDepthImage16Bits()
.AR_IMAGE_FORMAT_DEPTH16
to AR_IMAGE_FORMAT_D_16
.Kotlin/Java
Frame.acquireDepthImage()
andFrame.acquireRawDepthImage()
are deprecated. Please useFrame.acquireDepthImage16Bits()
and Frame.acquireRawDepthImage16Bits()
C
ArFrame_acquireDepthImage()
andArFrame_acquireRawDepthImage()
are deprecated. Please useArFrame_acquireDepthImage16Bits()
andArFrame_acquireRawDepthImage16Bits()
instead.GeospatialMode.ENABLED
while the session is running may cause the session to hang. This issue will be resolved in Google Play Services for AR (ARCore) version 1.32. In the meantime, ensure your app only sets a configuration with GeospatialMode.ENABLED
while the session is paused.Published by jeremyvc over 2 years ago
@NonNull
and @Nullable
.Published by jeremyvc almost 3 years ago
ArImage_getNdkImage
and ArImage_getNdkCameraMetadata
will always return nullptr
for the AImage
and ACameraMetadata
objects.Image
object returned by Frame#acquireCameraImage()
will be of size 0
x0
pixels. Calls to Frame#getImageMetadata()
will always throw IllegalArgumentException
.XRCameraSubsystem.TryGetLatestImage(out XRCameraImage)
will always return false
.XRCameraSubsystem.TryGetLatestImage(out XRCameraImage)
will behave normally.Frame.CameraImage.AcquireCameraImageBytes()
will be of size 0
x0
pixels. Calls to Frame.CameraMetadata.GetAllCameraMetadataTags()
will return an empty List<CameraMetadataTag>
.android.media.Image#getCropRect()
for additional information.SCREENSPACE_WITH_APPROXIMATE_DISTANCE
to better distinguish objects placed using Instant Placement.CloudAnchorState ERROR_NOT_AUTHORIZED
even if the project was set up correctly.Published by jeremyvc almost 3 years ago
ArImage_getNdkImage
and ArImage_getNdkCameraMetadata
will always return nullptr
for the AImage
and ACameraMetadata
objects.Image
object returned by Frame#acquireCameraImage()
will be of size 0
x0
pixels. Calls to Frame#getImageMetadata()
will always throw IllegalArgumentException
.XRCameraSubsystem.TryGetLatestImage(out XRCameraImage)
will always return false
.XRCameraSubsystem.TryGetLatestImage(out XRCameraImage)
will behave normally.Frame.CameraImage.AcquireCameraImageBytes()
will be of size 0
x0
pixels. Calls to Frame.CameraMetadata.GetAllCameraMetadataTags()
will return an empty List<CameraMetadataTag>
.android.media.Image#getCropRect()
for additional information.Published by bsanjin about 3 years ago
Published by jeremyvc about 3 years ago
targetSdkVersion
inside the ARCore aar has been updated to API level 31. Specifying a targetSdkVersion
in your project's build.gradle
or AndroidManifest.xml
will override the ARCore value.URI
s for Recording and Playback.
RecordingConfig#getMp4DatasetFilePath()
and RecordingConfig#setMp4DatasetFilePath()
have been deprecated in favor of URI based methods RecordingConfig#getMp4DatasetUri()
and RecordingConfig#setMp4DatasetUri()
.targetSdkVersion
31 (Android 12).