- Generated event models now rely on getters/setters. Direct field access in
com.sift.api.representationsmay be source-incompatible and should be migrated.
- Migrated build system to Gradle 8.13 and Android Gradle Plugin 8.13.2.
- Refreshed the full Gradle wrapper set (
gradle-wrapper.properties,gradlew,gradlew.bat,gradle-wrapper.jar). - Updated Android SDK levels to compileSdk 36 / targetSdk 36 while keeping
minSdk 19. - Added Java toolchain configuration to compile with JDK 17 and set project JVM args for modern Gradle runs.
- Updated core and test dependencies (Gson, AppCompat, JUnit, Mockito, WireMock, AndroidX Test).
- Migrated publishing flow to
maven-publishand Sonatype publish tasks. - Updated CI and publishing GitHub Actions workflows to JDK 17 + Android SDK API 36 and removed debug-only workflow output.
- Added a Compatibility section to README.
- Removed
jcenter()repository usage and legacy repository declarations. - Removed explicit
androidTestdependency onandroidx.annotation. - Removed legacy
uploadArchivescompatibility task. - Removed legacy AWS Device Farm Gradle integration (
keys.gradle/devicefarmhook in sample app).
- Fixed Gradle/AGP migration issues (new DSL requirements, namespace setup, manifest package migration, and modern publishing setup).
- Fixed
jsonschema2pojomigration incompatibilities (existingJavaTypeschema usage and generated model integration updates). - Updated SDK source and tests to generated-model accessors.
- Reduced noisy non-Android unit test logs for missing
getprop/mountcommands. - Added Mockito Java agent setup for unit tests to avoid JDK dynamic agent self-attach warnings.
- Updated play-services-location to version 21.0.1
- Upgraded gson to version 2.9.1
- Upgraded to API Level 19
- Fixed unsafe exception casting in AppStateCollector
- Removed deprecated time and accuracy fields of the android device location object.
- Added a new public upload() function.
- Updated README.md to include details about how to submit an issue.
- Executor used for trigger collect method of DeviceProperties and AppState terminated on sift.cancel().
- Images used in DESIGNDOC.md are added to the repo to avoid URL issues.
- Created Changelog
- Prevent SDK from sending empty configuration properties
- Fix for Null Pointer Exception on getting device battery status
- Migrated to AndroidX
- Upgrade to API version 30 (Android 11)
- AsyncTask replaced with Executor, since AsyncTask was deprecated in API level 30
- Supporting dependencies are upgraded
- Fix for potential Null Pointer Exception in
AppStateCollector.getIpAddresses()
- Switches to upstream jsonSchema2Pojo
- Removes a few unused dependencies
- Removes a few outdated ProGuard entries
- Adds functionality for calling
Sift.openwith a new config
- Allows for setUserId outside of activity lifecycle
- Fixes for Null Pointer Exception on Google API Client
- Adds hook for passing custom
activityNametoSift.resume - Does not null out instance state
- Updates README file and HelloSift sample app
This is a significant rewrite that we expect to greatly improve the performance and stability of the Android SDK. Please refer to the change log below as well as the updated README.md.
- Removed access to the Sift instance and renamed a few hooks. Everything should be invoked via the static call to the singleton class.
Sift.get().save()is nowSift.pause()Sift.get().setUserId(…)is nowSift.setUserId(…)Sift.get().unsetUserId(…)is nowSift.unsetUserId(…)- Removed support for
Sift.get.upload(…)
- Removed the optional location permissions from sift SDK AndroidManifest.xml. As such, you will need to add
ACCESS_FINE_LOCATIONandACCESS_COARSE_LOCATIONto your own application’s AndroidManifest.xml if you would like to enable location collection
- Added a new hook into the onResume lifecycle callback:
Sift.resume()
- Removed OkHttp from the dependencies
- Fixes the deadlock casued by synchronized calls in Queue and Uploader
archive()functions which are invoked by the Sift singletonsave() - Cuts the androidAppState batch size down to 8 from 32 due to OOM errors while trying to GSON serialize the string on old devices
- Fix for RejectedExecutionException in AppStateCollector
- Strips out logging in ProGuard release build
- Fix minor shutdown race condition in Uploader
- Moves unarchiving to background task
- Various performance improvements
- Adds back defensive FieldNamingPolicy with GSON
- GSON and proguard rules
- Proguard rule for lang3
- Better retry logic on errors
- Performance improvements
- Jackson and proguard rules
- Synchronize from unarchives
- Fixes leaked Activity context
- More complete proguard configs for Jackson
- Adds
@Nullableannotation toSift.get()method
- Updated location collection mechanics
- Removed collecting information of installed apps on device
- Uses yaml schema instead of inner class for ListRequest
- Collects device Build details for emulator detection
- Collects list of installed apps with package name
- Fix for RejectedExecutionException on uploader
- Collects SDK_VERSION in AppState events to be able to track event counts per version
- Updated encoding provider
- Removes Guava dependency
- Fix for Null Pointer Exceotion on location changed
- Google API Client and gradle fixes
- Make SDK logs better
- Adds Proguard rules to support Jackson
- Fixes configuration for DeserializationFeature to Ignore unknown properties with Jackson
- Implement the core part of the SDK (event batching and uploading)
- Collects device properties like OS version, root detection etc...
- Collects app state properties like battery, network address, etc...
- Add demo app HelloSift