{"id":34904020,"url":"https://github.com/solrudev/ackpine","last_synced_at":"2026-03-13T23:08:44.400Z","repository":{"id":166157073,"uuid":"641599463","full_name":"solrudev/Ackpine","owner":"solrudev","description":"Android package installer library","archived":false,"fork":false,"pushed_at":"2026-02-07T07:38:23.000Z","size":4403,"stargazers_count":131,"open_issues_count":2,"forks_count":10,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-02-07T17:45:12.795Z","etag":null,"topics":["android","android-library","apk","apk-installation","apk-installer","apks","coroutines","coroutines-android","coroutines-flow","flow","install-apk","java","kotlin","kotlin-library","library","package-installer","split-apk"],"latest_commit_sha":null,"homepage":"https://ackpine.solrudev.ru/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solrudev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-16T20:13:15.000Z","updated_at":"2026-02-07T07:32:29.000Z","dependencies_parsed_at":"2026-02-12T09:01:28.535Z","dependency_job_id":null,"html_url":"https://github.com/solrudev/Ackpine","commit_stats":null,"previous_names":[],"tags_count":86,"template":false,"template_full_name":null,"purl":"pkg:github/solrudev/Ackpine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrudev%2FAckpine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrudev%2FAckpine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrudev%2FAckpine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrudev%2FAckpine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solrudev","download_url":"https://codeload.github.com/solrudev/Ackpine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrudev%2FAckpine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29362201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-library","apk","apk-installation","apk-installer","apks","coroutines","coroutines-android","coroutines-flow","flow","install-apk","java","kotlin","kotlin-library","library","package-installer","split-apk"],"created_at":"2025-12-26T09:39:02.598Z","updated_at":"2026-03-13T23:08:44.395Z","avatar_url":"https://github.com/solrudev.png","language":"Kotlin","readme":"![Ackpine](docs/images/logo-text-colored.svg)\n\n[![CI](https://github.com/solrudev/Ackpine/actions/workflows/ci.yml/badge.svg)](https://github.com/solrudev/Ackpine/actions/workflows/ci.yml)\n![Maven Central](https://img.shields.io/maven-central/v/ru.solrudev.ackpine/ackpine-core)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/solrudev/Ackpine/blob/master/LICENSE)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/c3014b1eee9648959b70ee6bbad51489)](https://app.codacy.com/gh/solrudev/Ackpine/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n[![Android Weekly](https://androidweekly.net/issues/issue-593/badge)](https://androidweekly.net/issues/issue-593)\n\n\u003cspan style=\"color:#808080\"\u003e_**Ackpine** - **A**ndroid **C**oroutines-friendly **K**otlin-first **P**ackage **In**staller **e**xtensions_\u003c/span\u003e\n\nSee the [project website](https://ackpine.solrudev.ru) for documentation and API reference.\n\nA library providing consistent APIs for installing and uninstalling apps on an Android device.\n\nKey features of Ackpine:\n\n- **Ease of use**: Ackpine reduces complexity of dealing with system `PackageInstaller` APIs.\n- **Unifying of different system APIs**: Ackpine provides an ability to choose system package installer API which will be used to install/uninstall a package.\n- **Built-in split APKs support**: Ackpine provides simple lazy sequences-based APIs for reading, parsing and filtering split APKs.\n- **Persistent**: Ackpine persists every session so it can properly handle process death.\n- **Deferred**: Ackpine allows to defer user's intervention via customizable high-priority notification.\n- **Progress and state updates**: it's easy to observe every session's state and progress updates.\n- **Advanced features**: Ackpine allows to benefit from advanced features without juggling complex OS APIs (such as install pre-approval) introduced in later Android versions.\n- **Shizuku**: Shizuku is supported as an installer backend with advanced install flags.\n- **100% Java and Kotlin-friendly**: while maintaining full Java compatibility, Ackpine was developed as a Kotlin-first library.\n- **Compatibility**: Ackpine supports Android versions starting from API level 16.\n\nDownload\n--------\n\nAckpine is available on `mavenCentral()`.\n\nAckpine depends on Jetpack libraries, so it's also necessary to add the `google()` Maven repository.\n\n\u003cdetails open\u003e\n  \u003csummary\u003eGradle version catalog\u003c/summary\u003e\n\n```toml\n[versions]\nackpine = \"0.21.0\"\n\n[libraries]\nackpine-core = { module = \"ru.solrudev.ackpine:ackpine-core\", version.ref = \"ackpine\" }\n\n# optional - Kotlin extensions and Coroutines support\nackpine-ktx = { module = \"ru.solrudev.ackpine:ackpine-ktx\", version.ref = \"ackpine\" }\n\n# optional - utilities for working with split APKs\nackpine-splits = { module = \"ru.solrudev.ackpine:ackpine-splits\", version.ref = \"ackpine\" }\n\n# optional - Kotlin extensions and Coroutines support for ackpine-splits\nackpine-splits-ktx = { module = \"ru.solrudev.ackpine:ackpine-splits-ktx\", version.ref = \"ackpine\" }\n\n# optional - support for asset files inside of application's package\nackpine-assets = { module = \"ru.solrudev.ackpine:ackpine-assets\", version.ref = \"ackpine\" }\n\n# optional - plugin enabling installs/uninstalls through Shizuku\nackpine-shizuku = { module = \"ru.solrudev.ackpine:ackpine-shizuku\", version.ref = \"ackpine\" }\n\n# optional - Kotlin extensions for Shizuku plugin\nackpine-shizuku-ktx = { module = \"ru.solrudev.ackpine:ackpine-shizuku-ktx\", version.ref = \"ackpine\" }\n\n# optional - testing utilities\nackpine-test = { module = \"ru.solrudev.ackpine:ackpine-test\", version.ref = \"ackpine\" }\n\n[bundles]\nackpine = [\n    \"ackpine-core\",\n    \"ackpine-ktx\",\n    \"ackpine-splits\",\n    \"ackpine-splits-ktx\",\n    \"ackpine-assets\",\n    \"ackpine-shizuku\",\n    \"ackpine-shizuku-ktx\"\n]\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003ebuild.gradle.kts\u003c/summary\u003e\n\n```kotlin\ndependencies {\n    val ackpineVersion = \"0.21.0\"\n    implementation(\"ru.solrudev.ackpine:ackpine-core:$ackpineVersion\")\n\n    // optional - Kotlin extensions and Coroutines support\n    implementation(\"ru.solrudev.ackpine:ackpine-ktx:$ackpineVersion\")\n\n    // optional - utilities for working with split APKs\n    implementation(\"ru.solrudev.ackpine:ackpine-splits:$ackpineVersion\")\n\n    // optional - Kotlin extensions and Coroutines support for ackpine-splits\n    implementation(\"ru.solrudev.ackpine:ackpine-splits-ktx:$ackpineVersion\")\n\n    // optional - support for asset files inside of application's package\n    implementation(\"ru.solrudev.ackpine:ackpine-assets:$ackpineVersion\")\n\n    // optional - plugin enabling installs/uninstalls through Shizuku\n    implementation(\"ru.solrudev.ackpine:ackpine-shizuku:$ackpineVersion\")\n\n    // optional - Kotlin extensions for Shizuku plugin\n    implementation(\"ru.solrudev.ackpine:ackpine-shizuku-ktx:$ackpineVersion\")\n\n\t// optional - testing utilities\n\ttestImplementation(\"ru.solrudev.ackpine:ackpine-test:$ackpineVersion\")\n}\n```\n\u003c/details\u003e\n\nLicense\n-------\n\n    Copyright (C) 2023-2026 Ilya Fomichev\n    \n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n    \n        http://www.apache.org/licenses/LICENSE-2.0\n    \n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolrudev%2Fackpine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolrudev%2Fackpine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolrudev%2Fackpine/lists"}