Go library for parsing Android binary formats: compiled XML (AndroidManifest.xml), resources.arsc, and high-level APK metadata.
- Parse binary XML and resource tables (
resources.arsc) - Open APK, zip bundles (e.g.
disney.zipwith embeddedbase.apk), and XAPK (e.g.Emby.xapk) - Extract app icon (
android:icon/ic_launcher) and TV banner (android:banner) as raster images - Prefer mipmap PNG/WebP over adaptive-icon XML; rasterize vector/adaptive icons when needed
- CLI tool:
apk/cmd/extract-icons
go get github.com/chenhuifeng/androidbinary/v2@latestRequires Go 1.17+.
package main
import (
"fmt"
"image/png"
"os"
"github.com/chenhuifeng/androidbinary/v2/apk"
)
func main() {
pkg, err := apk.OpenFile("app.apk") // also: disney.zip, Emby.xapk
if err != nil {
panic(err)
}
defer pkg.Close()
fmt.Println("package:", pkg.PackageName())
fmt.Println("version:", pkg.VersionName())
icon, _, err := pkg.Icon(nil)
if err != nil {
panic(err)
}
if icon != nil {
f, _ := os.Create("ic_launcher.png")
defer f.Close()
png.Encode(f, icon)
}
banner, _, err := pkg.Banner(nil)
if err != nil {
panic(err)
}
if banner != nil {
f, _ := os.Create("banner.png")
defer f.Close()
png.Encode(f, banner)
}
}See apk/README.md for icon/banner behavior, supported containers, and the extract-icons command.
| Method | Description |
|---|---|
OpenFile(path) |
Open .apk, zip with embedded APK, or .xapk |
Icon(config) |
App icon as image.Image (nil if not set) |
Banner(config) |
TV banner only (nil if not set) |
Label(config) |
Localized app label |
PackageName() |
Package name from manifest |
VersionName() / VersionCode() |
Version info |
MainActivity() |
Launcher activity name |
Manifest() |
Parsed manifest struct |
f, _ := os.Open("AndroidManifest.xml")
xf, _ := androidbinary.NewXMLFile(f)
data, _ := io.ReadAll(xf.Reader())
// use encoding/xml on dataf, _ := os.Open("resources.arsc")
tf, _ := androidbinary.NewTableFile(f)
value, _ := tf.GetResource(resID, nil)- XAPK / App Bundle split APK support: merge
resources.arscfrom split config APKs (e.g.config.xhdpi.apk) - Read drawable files across base + split zips; fallback to xapk
manifest.jsoniconfield
- Adaptive-icon: composite background (gradient) + foreground with vector
<group>transforms - Banner vector drawables rasterize at 320×180 (Android TV banner); icons at 192×192
- Raster PNG/WebP icons and banners keep native decoded dimensions
- Fix Go module path:
github.com/chenhuifeng/androidbinary/v2(required forgo getv2.x)
- APK icon/banner extraction, zip/xapk support,
extract-iconsCLI (brokengo get— module path lacked/v2; use v2.0.2)
See git tags.
go test ./...
cd apk && go test -v ./...APK integration tests need local files under apk/testdata/ (not committed). See apk/testdata/README.md.
go run ./cmd/extract-icons -apk testdata/base.apk -o ./outMIT — see LICENSE.