Skip to content

Releases: solrudev/Ackpine

0.22.7

24 Apr 04:41
Immutable release. Only release title and notes can be modified.
cb8f7be

Choose a tag to compare

Bug fixes and improvements

  • Fix "Session X is dead." error on Pixel devices running API 36+ (#206).
  • Add verbose logging for session progress.

0.22.6

22 Apr 07:19
Immutable release. Only release title and notes can be modified.
49ffcc7

Choose a tag to compare

Bug fixes and improvements

  • Provide additional log statement for stuck session heuristics.
  • Fix crash after returning from settings screen on Android < 7 in samples.

0.22.5

18 Apr 05:50
Immutable release. Only release title and notes can be modified.
4747e11

Choose a tag to compare

Dependencies

  • Don't leak android-stubs to consumers from ackpine-privileged.

0.22.4

17 Apr 12:27
Immutable release. Only release title and notes can be modified.
8fb2517

Choose a tag to compare

Dependencies

  • Updated apksig to 9.1.1.

Bug fixes and improvements

  • Don't close cached shell in libsu plugin if root access is not available to avoid interfering with other shell operations.

0.22.3

16 Apr 10:23
Immutable release. Only release title and notes can be modified.
fecda42

Choose a tag to compare

Bug fixes and improvements

  • Hotfix: add ProGuard rules for internal Room databases in plugins to prevent crashes with android.r8.strictFullModeForKeepRules enabled (default in AGP 9).

0.22.2

16 Apr 10:02
Immutable release. Only release title and notes can be modified.
4f69274

Choose a tag to compare

Dependencies

  • Extracted ackpine-privileged and ackpine-privileged-ktx artifacts which are now depended upon by ackpine-shizuku(-ktx) and ackpine-libsu(-ktx).

Bug fixes and improvements

  • Introduce libsu plugin for root-based package installation and uninstallation backed by libsu.
  • Introduce logging API. Configure a custom AckpineLogger via Ackpine.setLogger() to receive internal diagnostic logs. AckpineLogger.Logcat implementation is provided out of the box and can be set up with Ackpine.enableLogcatLogger().
  • Fix thread pool starvation when a large number of APKs is submitted for writing in a single SESSION_BASED install session.
  • Add root and Shizuku support to sample-java/sample-ktx.
  • Add option to disable APK splits filtering in sample-java/sample-ktx.

Public API changes

New

  • Added ackpine-libsu and ackpine-libsu-ktx artifacts. See documentation for details.
  • Added ackpine-privileged artifact with PrivilegedPlugin, PrivilegedInstallParameters, PrivilegedUninstallParameters, PrivilegedInstallCapabilities, PrivilegedUninstallCapabilities and related types.
  • Added ackpine-privileged-ktx artifact with PrivilegedInstallParametersDsl, PrivilegedUninstallParametersDsl and related types.
  • ShizukuPlugin, ShizukuPlugin.InstallParameters, ShizukuPlugin.UninstallParameters, ShizukuInstallCapabilities, ShizukuUninstallCapabilities, ShizukuInstallParametersDsl and ShizukuUninstallParametersDsl now extend their Privileged* counterparts from ackpine-privileged(-ktx).
  • Added AckpineLogger interface, AckpineLogger.Level enum and AckpineLogger.Logcat implementation.
  • Added Ackpine.setLogger() and Ackpine.enableLogcatLogger() static methods.

0.22.1

09 Apr 15:27
Immutable release. Only release title and notes can be modified.
b919db8

Choose a tag to compare

Bug fixes and improvements

  • Hotfix: add ProGuard rule for internal Room database to prevent crashes with android.r8.strictFullModeForKeepRules enabled (default in AGP 9).

0.22.0

09 Apr 13:24
Immutable release. Only release title and notes can be modified.
7dcad38

Choose a tag to compare

Dependencies

  • Updated apksig to 9.1.0.

Bug fixes and improvements

  • Introduce capabilities API. This API allows querying what features are available for a given session configuration on the current device, accounting for Android API level and plugin-applied restrictions. See documentation for details.

  • Split plugin API by session type. This allows to forbid using installer plugins for uninstall sessions and vice versa, and to implement both installer and uninstaller plugin within one class with different parameters.

    Shizuku plugins were migrated to this new API. Now ShizukuPlugin should be used both for install and uninstall sessions. ShizukuUninstallPlugin is deprecated.

  • Fix equals() for ApkList and transitively for InstallParameters.

  • InstallParameters.Builder.build() now creates a snapshot before applying plugins, making the builder safely reusable after build().

Public API changes

New

  • Added new capabilities package to ackpine-api with InstallerCapabilities, UninstallerCapabilities, CapabilityStatus and related types.
  • Added PackageInstaller.getCapabilities() and PackageUninstaller.getCapabilities() static methods.
  • Added AckpineInstallPlugin and AckpineUninstallPlugin interfaces.
  • Added InstallPluginScope and UninstallPluginScope classes. Plugins now receive a scope object that isolates modifications made by plugins from direct builder access.
  • Added registerPlugin() methods on InstallParameters.Builder and UninstallParameters.Builder for typed plugin registration.
  • Added plugin() DSL functions on InstallParametersDsl and UninstallParametersDsl in ackpine-ktx for typed plugin registration.
  • ShizukuPlugin now implements AckpineInstallPlugin, AckpineUninstallPlugin, InstallCapabilityProvider<ShizukuInstallCapabilities> and UninstallCapabilityProvider<ShizukuUninstallCapabilities>.
  • ShizukuPlugin.Parameters was renamed to ShizukuPlugin.InstallParameters. Added ShizukuPlugin.UninstallParameters.
  • Added shizuku() DSL functions in ackpine-shizuku-ktx as replacements for useShizuku().
  • Added ShizukuInstallParametersDsl, ShizukuUninstallParametersDsl and related APIs in ackpine-shizuku-ktx.

Deprecations

  • Deprecated with warning AckpinePlugin.apply(InstallParameters.Builder) and AckpinePlugin.apply(UninstallParameters.Builder). This will become an error in the next minor version.
  • Deprecated with warning AckpinePluginRegistry interface and its usePlugin() methods. This will become an error in the next minor version. Use typed registerPlugin() methods on InstallParameters.Builder or UninstallParameters.Builder directly.
  • Deprecated with warning AckpinePluginRegistryDsl interface and its usePlugin() methods in ackpine-ktx. This will become an error in the next minor version. Use typed plugin() methods on InstallParametersDsl or UninstallParametersDsl directly.
  • Deprecated with warning ShizukuUninstallPlugin. This will become an error in the next minor version. Use ShizukuPlugin for both install and uninstall sessions.
  • Deprecated with warning ShizukuPluginParametersDsl, ShizukuPluginParameters(), ShizukuUninstallPluginParametersDsl and ShizukuUninstallPluginParameters() in shizuku-ktx. This will become an error in the next minor version. Use ShizukuInstallParametersDsl/ShizukuInstallParameters() and ShizukuUninstallParametersDsl/ShizukuUninstallParameters() respectively.
  • Deprecated with warning useShizuku() DSL functions in shizuku-ktx. This will become an error in the next minor version. Use shizuku() instead.

0.21.2

23 Mar 22:07
659ea06

Choose a tag to compare

Bug fixes and improvements

  • Add parameters validation when creating InstallContraints.
  • Remove region and script handling in localization configuration splits resolution. All variants are always packed into a single language split, so it's not necessary at the app level.
  • Return -1 instead of ZIP entry size as declared length from ZippedFileProvider.openAssetFile(). This unblocks usage of openFileDescriptor() with ZippedFileProvider and also is more consistent with the ContentProvider convention (file descriptor contents are consumed in whole, not a subsection of it). Use query() with OpenableColumns.SIZE to get the entry size.

0.21.1

16 Mar 13:02
15fdcce

Choose a tag to compare

Bug fixes and improvements

  • Group unknown APK splits (Apk.Other) by their targeted feature/base in ackpine-splits.
  • Handle versionCodeMajor attribute when parsing AndroidManifest.xml in ackpine-splits.
  • Handle malformed ZIP sources gracefully when parsing splits in ackpine-splits.
  • Improve DPI matching to better align with Android's screen density selection behavior in Context.dpi, Apk.isCompatible() and SplitPackage APIs.
  • Improve localization splits resolution to also consider region and script in addition to language in Apk.isCompatible() and SplitPackage APIs.
  • Prioritize base-targeted configuration splits over unresolved feature-targeted ones when resolving compatibility in ackpine-splits.
  • Fix SplitPackage.equals() not working correctly for subclasses (e.g. the result of filterCompatible() and sortByCompatibility()).
  • Fix APK name incorrectly reported in manifest attribute conflict exceptions when parsing splits in ackpine-splits.

Public API changes

  • Apk.Other now implements Apk.ConfigSplit and has a new configForSplit property.
  • Added other: List<SplitPackage.Entry<Apk.Other>> property to SplitPackage.DynamicFeature.