Skip to content

Releases: solrudev/Ackpine

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.

0.8.1

31 Oct 09:16
1e64f54
Compare
Choose a tag to compare

Dependencies

  • Updated Kotlin to 2.0.21.
  • Updated androidx.annotation to 1.9.1.
  • Updated androidx.activity to 1.9.3 (sample apps dependency).
  • Updated androidx.constraintlayout to 2.2.0 (sample apps dependency).
  • Updated androidx.lifecycle to 2.8.7 (sample apps dependency).
  • Updated androidx.navigation to 2.8.3 (sample apps dependency).
  • Updated Guava to 33.3.1-android (sample apps dependency).
  • Migrated from gradle-nexus/publish-plugin to vanniktech/gradle-maven-publish-plugin for publishing artifacts to Maven Central.

Bug fixes and improvements

  • Fix install confirmation from OS not displaying after granting install permission on some devices (particularly Android TV) using SESSION_BASED installer. This is a fix for #84.
  • Fix various issues with dismissing install confirmation from OS via clicking outside of confirmation dialog using SESSION_BASED installer.

0.8.0

25 Oct 13:59
75f834b
Compare
Choose a tag to compare

Dependencies

  • Extracted ackpine-resources artifact, which is now depended upon by ackpine-core.

Bug fixes and improvements

  • NotificationString is superseded by ResolvableString to accommodate stable string resources resolution. ResolvableString is now located in ackpine-resources artifact and can also be used separately for general app needs. NotificationString is deprecated and will be removed in next minor release.

    To migrate NotificationString.resource() usages to ResolvableString, create classes inheriting from ResolvableString.Resource like this:

    // Old
    NotificationString.resource(R.string.install_message, fileName)
    
    // New
    class InstallMessage(fileName: String) : ResolvableString.Resource(fileName) {
        override fun stringId() = R.string.install_message
        private companion object {
            private const val serialVersionUID = 4749568844072243110L
        }
    }
    
    InstallMessage(fileName)

    Note that this requires to purge internal database because of incompatible changes, so all previous sessions will be cleared when Ackpine is updated to 0.8.0.

  • NotificationData now requires an instance of DrawableId class instead of integer drawable resource ID for icon to accommodate stable drawable resources resolution.

  • Don't hardcode a condition in implementation of SESSION_BASED sessions when Android's PackageInstaller.Session fails without report. It should possibly improve reliability on different devices.

  • Fix progress bars on install screen not using latest value in sample apps.

  • Disable cancel button when session's state is Committed in sample apps.

Public API changes

  • Breaking: NotificationData, NotificationData.Builder and NotificationDataDsl now require ResolvableString instead of NotificationString as title and contentText type. NotificationString is deprecated with an error deprecation level and will be removed in next minor release.
  • Breaking: NotificationData, NotificationData.Builder and NotificationDataDsl now require DrawableId instead of integer as icon type.
  • Added ResolvableString sealed interface in ackpine-resources module.
  • Added DrawableId interface in ackpine-core module.

0.7.6

12 Oct 15:38
69e9fd9
Compare
Choose a tag to compare

Dependencies

  • Reverted androidx.startup to 1.1.1.

Bug fixes and improvements

  • INTENT_BASED package installer sessions are no longer stuck in COMMITTED state if they have performed a successful app self-update (not in all scenarios). This is an (almost) fix for issue #33.
  • Use ZipFile API for reading AndroidManifest.xml when possible while parsing single APK with Apk.fromFile() and Apk.fromUri().