Skip to content

Releases: solrudev/Ackpine

0.10.2

09 Feb 17:47
36db1ab
Compare
Choose a tag to compare

Bug fixes and improvements

  • Fix SessionBasedInstallConfirmationActivity was finished by user failure after granting permission and confirming installation on some devices with Android 12-13 (#108).

0.10.1

29 Jan 06:01
4a1e805
Compare
Choose a tag to compare

Bug fixes and improvements

  • Fix a corner case when simultaneously pressing system Back button and Install while confirming installation may result in install session's failure (#104).

Public API changes

  • Deprecated with warning ApkCompatibility class in ackpine-splits.

0.10.0

24 Jan 09:48
20728de
Compare
Choose a tag to compare

Dependencies

  • Updated Gradle wrapper to 8.12.
  • Updated Android Gradle Plugin to 8.8.0.
  • Updated apksig to 8.8.0.
  • Updated ViewBindingPropertyDelegate to 2.0.0 (sample apps dependency).
  • Added api dependency on Guava's ListenableFuture in ackpine-splits.
  • Added implementation dependency on androidx.concurrent:concurrent-futures in ackpine-splits and ackpine-runtime.
  • Changed ackpine-spits dependency to ackpine-splits-ktx in sample-ktx.

Bug fixes and improvements

  • Repeat displaying confirmation notification if it was dismissed on Android 14+ when session's confirmation is set to DEFERRED.
  • Introduce SplitPackage API in ackpine-splits.
  • Deprecate some APIs for Apk sequences in ackpine-splits. Migrate to SplitPackage API.
  • Rename ApkSplits.throwOnInvalidSplitPackage() to ApkSplits.validate() in ackpine-splits.
  • Add support for cancellation in Apk.fromUri() in ackpine-splits.

Public API changes

  • Added SplitPackage and related APIs in ackpine-splits.
  • Added ackpine-splits-ktx module.
  • Added Apk.fromUri() overload accepting CancellationSignal in ackpine-splits.
  • Added ApkSplits.validate() in ackpine-splits.
  • Exposed CloseableSequence interface in ackpine-splits.
  • Deprecated with warning ApkSplits.throwOnInvalidSplitPackage(), ApkSplits.sortedByCompatibility(), ApkSplits.filterCompatible() and ApkSplits.addAllTo() methods in ackpine-splits.
  • Changed return type of ZippedApkSplits.getApksForFile() and ZippedApkSplits.getApksForUri() to CloseableSequence<Apk> in ackpine-splits.
  • Removed deprecated SessionResult and Session.await() overload in ackpine-ktx.

0.9.4

04 Jan 14:26
35c18c4
Compare
Choose a tag to compare

Bug fixes and improvements

  • Correct error handling when closing I/O resources.

0.9.3

25 Dec 13:04
096c7bc
Compare
Choose a tag to compare

Dependencies

  • Updated KSP to 2.0.21-1.0.28.
  • Updated Android Gradle Plugin to 8.7.3.
  • Updated apksig to 8.7.3.
  • Updated binary-compatibility-validator to 0.17.0.
  • Updated androidx.navigation to 2.8.5 (sample apps dependency).
  • Updated Guava to 33.4.0-android (sample apps dependency).

Bug fixes and improvements

  • Raise compileSdk to 35.
  • Use random access when parsing APK on API level 26+ in Apk.fromUri(). This greatly improves performance for large APKs.
  • Add ZippedFileProvider.getUriForZipEntry() overloads for File and Uri.
  • Raise targetSdk for sample apps to 35.
  • Proper support for edge-to-edge display in sample apps.

Public API changes

  • Added getUriForZipEntry(File, String) and getUriForZipEntry(Uri, String) to ZippedFileProvider.Companion and as static ZippedFileProvider methods.

0.9.2

19 Dec 16:46
4bca22f
Compare
Choose a tag to compare

Bug fixes and improvements

  • Fix SESSION_BASED installer session completing with "Install permission denied" failure when performing a self-update if install permission was not granted because it was unnecessary.

0.9.1

14 Dec 12:38
02adf26
Compare
Choose a tag to compare

Bug fixes and improvements

  • Proper support of dynamic features for split APKs (#95).
  • Add documentation for Apk properties.

Public API changes

  • Added Apk.ConfigSplit sealed interface in ackpine-splits module.
  • Added configForSplit property to Apk.Libs, Apk.ScreenDensity and Apk.Localization in ackpine-splits module.

0.9.0

07 Dec 10:45
d481630
Compare
Choose a tag to compare

Dependencies

  • Updated Dokka to 2.0.0-Beta.
  • Updated Gradle wrapper to 8.11.1.

Bug fixes and improvements

  • Introduce InstallPreapproval API. See documentation on usage.

  • Introduce InstallConstraints API. See documentation on usage.

  • Add requestUpdateOwnership option for install sessions. Permission ENFORCE_UPDATE_OWNERSHIP was added to AndroidManifest.xml.

  • Add packageSource option for install sessions.

  • Add dontKillApp option for install sessions with InheritExisting install mode.

  • Source-incompatible: deprecate SessionResult and return Session.State.Completed from Session.await().

    SessionResult was an early design leftover which was mistakenly overlooked. Now it's finally been dealt with.

    To migrate, change SessionResult.Success to Session.State.Succeeded, and SessionResult.Error to Session.State.Failed. cause property of SessionResult.Error is replaced with failure property of Session.State.Failed.

    // Old
    when (val result = session.await()) {
        is SessionResult.Success -> println("Success")
        is SessionResult.Error -> println(result.cause.message)
    }
    
    // New
    when (val result = session.await()) {
        Session.State.Succeeded -> println("Success")
        is Session.State.Failed -> println(result.failure.message)
    }
  • Source-incompatible: when matches on InstallFailure and UninstallFailure type are no longer exhaustive.

    This change was made to guard against possible additions of failure types in future Android versions, like Timeout in Android 14.

  • Fix session not launching after process restart if it was in the midst of preparations.

  • Show notification for SESSION_BASED install sessions when DEFERRED confirmation is set only if user action is actually required.

  • Fix possible races when ListenableFutures returned from getSessionsAsync() and getActiveSessionsAsync() might not get completed.

  • Lower API level required for READ_EXTERNAL_STORAGE permission in sample apps.

  • Add sample-api34 sample project.

  • Add "Building" section to documentation.

Public API changes

  • Source-incompatible: Session.await() now returns Session.State.Completed. Overload returning SessionResult is left for binary compatibility, but will be removed in the next minor version.
  • Source-incompatible: when matches on InstallFailure and UninstallFailure type are no longer exhaustive.
  • Deprecated: SessionResult is deprecated and will be removed in the next minor version.
  • Added InstallPreapproval class and related APIs to InstallParameters, InstallParameters.Builder and InstallParametersDsl.
  • Added InstallConstraints class and related APIs to InstallParameters, InstallParameters.Builder and InstallParametersDsl.
  • Added dontKillApp boolean property to InstallMode.InheritExisting.
  • Added requestUpdateOwnership property to InstallParameters, InstallParameters.Builder and InstallParametersDsl.
  • Added PackageSource class and related APIs to InstallParameters, InstallParameters.Builder and InstallParametersDsl.

0.8.3

13 Nov 09:23
7cc6980
Compare
Choose a tag to compare

Bug fixes and improvements

  • Return Aborted failure when INTENT_BASED install session is cancelled.
  • Return Aborted failure when uninstall via ACTION_UNINSTALL_PACKAGE is cancelled.
  • Request permissions if they're not granted when sample apps are launched via ACTION_VIEW intent.

0.8.2

01 Nov 12:06
4f7dcaa
Compare
Choose a tag to compare

Bug fixes and improvements

  • Fix introduced in 0.8.1 repeated install confirmation after granting install permission if confirmation was dismissed by clicking outside of confirmation dialog on some OS versions.
  • Don't use requireUserAction option in samples as it's unstable with different vendors and OS versions.