Fork dari rehmatworks/gplaydl yang diubah ke Node.js oleh FgsiDev.
Download APKs from Google Play right from your terminal. One command gets you the base APK, split APKs (App Bundles), OBB expansion files and Play Asset Delivery packs.
gplaydl authenticates anonymously through a token dispenser, so you never need a Google account of your own.
Prefer a browser? Use gplaydl web, or view its source code.
Important: This project uses unofficial Google Play access. Google may rate-limit or block requests it sees from unofficial clients. Use at your own risk.
- Base APK, splits, OBB files and asset packs downloaded together by default
- arm64, armv7, x86, x86_64 and Android TV builds, several in one command
- Anonymous tokens from a public dispenser, no account or API key needed
- Device profiles rotated automatically, both for authentication and for old versions Google only serves to certain devices
- Compressed transfers when Google Play offers them (often 30-40% smaller)
- Every APK verified against the SHA-256 Google Play declares for it
- Language splits on demand, and re-runs fetch only what is missing
- Pure-JavaScript protobuf decoding with zero runtime dependencies
- Live progress bars, plus
search,infoandlist-splitsfor browsing
Sponsored · Rovelix is built by the creator of gplaydl
Requires Node.js 18 or newer.
npm install -g gplaydlOr from source:
git clone https://github.com/FgsiDev/gplaydl.git && cd gplaydl
npm install -g .No account or API key is needed. The first command that needs a token asks the dispenser for one anonymously and caches it; later commands reuse it and refresh it automatically before it expires.
Tokens live in ~/.config/gplaydl/auth-{arch}.json. Run gplaydl auth --clear to forget them, or gplaydl auth to fetch one explicitly.
gplaydl auth # get an anonymous token
gplaydl download com.whatsapp # base APK + splits + OBB/asset packsEvery command takes -d/--dispenser to pick a dispenser and --arch for the device architecture.
Gets an anonymous Play token and caches it. You rarely need to run this yourself; the other commands fetch and refresh tokens on their own.
gplaydl auth # default (arm64)
gplaydl auth --arch armv7 # older 32-bit devices
gplaydl auth --arch x86_64 # emulators / desktop
gplaydl auth --clear # forget all cached tokensTokens live in ~/.config/gplaydl/auth-{arch}.json and refresh automatically before they expire.
Fetches the base APK, every split APK, and any extra files unless you opt out.
gplaydl download com.whatsapp # everything
gplaydl download com.whatsapp -o ./apks # custom output directory
gplaydl download com.whatsapp -a armv7 # ARMv7 build
gplaydl download com.whatsapp -a arm64,armv7 # several architectures at once
gplaydl download org.videolan.vlc -a x86_64 # emulator / desktop build
gplaydl download com.google.android.katniss -a tv # Android TV build
gplaydl download com.whatsapp -v 231205015 # specific version code
gplaydl download com.whatsapp -l de,fr,zh-CN # extra language splits
gplaydl download com.whatsapp --no-splits # skip split APKs
gplaydl download com.whatsapp --no-extras # skip OBB / asset packs
gplaydl download com.whatsapp --dm # also fetch the .dm metadataDownloads are verified: the base APK and every split are hashed while they stream in and checked against the SHA-256 that Google Play declares in the delivery response, so a truncated or corrupted file fails loudly instead of failing later at install time.
Re-runs are incremental. A file that already exists and matches its declared
hash is skipped, so running the same command again with an extra
architecture (-a arm64,armv7) or more languages (-l de,fr) downloads
only the missing splits into the same directory. A corrupted file is
noticed and fetched again.
--dm additionally fetches the DEX metadata file ({package}-{vc}.dm, a
baseline profile plus vdex) that the Play Store installs alongside the base
APK to speed up first launch. It is optional; append it to
adb install-multiple after the APKs if you want it.
Old version codes are served by Google only to devices it considers compatible: 32-bit-only APKs are refused for 64-bit-only profiles, and Android 14+ profiles are not served APKs targeting very old SDKs. When that happens, gplaydl retries automatically with low-SDK multi-ABI device profiles until Google agrees to deliver.
Apps that are invisible to phone profiles altogether (Android TV exclusives
like com.google.android.katniss, or apps limited to one ABI family) are
found the same way: gplaydl rotates through one device of each kind, starting
with TV and then each ABI family. Pass -a tv to skip straight to a
TV profile, or run gplaydl auth --arch tv if you just want a TV token
(~/.config/gplaydl/auth-tv.json).
| Type | Naming | Example |
|---|---|---|
| Base APK | {package}-{vc}.apk |
com.whatsapp-231205015.apk |
| Split APK | {package}-{vc}-{split}.apk |
com.whatsapp-231205015-config.arm64_v8a.apk |
| OBB (main/patch) | {type}.{vc}.{package}.obb |
main.20925.com.tencent.ig.obb |
| Asset pack | {package}-{vc}-asset.apk |
com.tencent.ig-20925-asset.apk |
Install a split build on a device by naming the app's own files, e.g.
adb install-multiple com.whatsapp-231205015*.apk. (Avoid a bare *.apk
when other APKs sit in the same directory: adb refuses sessions that mix
packages or contain the same split twice.)
Want a single APK instead of splits? Google Play has no universal APK
for App Bundle apps. Every client, including the Play Store itself,
receives the base plus config splits and installs them as one session. The
base APK alone will not run (its native libraries live in the
config.<abi> split). If you truly need one file, merge the splits with a
tool like APKEditor
(APKEditor m -i ./apks); note the merged APK must be re-signed, so it
will not receive updates on top of the Play-signed install.
gplaydl info com.whatsapp # version, developer, rating, downloads
gplaydl search "file manager" --limit 5 # find apps by name
gplaydl list-splits com.whatsapp # see splits without downloadingThe dispenser is open source and runs anywhere Go and Postgres do. Any dispenser that speaks the same API works, including one you host yourself:
gplaydl auth -d https://your.dispenser/api/auth
gplaydl download com.whatsapp -d https://your.dispenser/api/authPass -d on whichever command you run, so token refreshes keep using it too.
| Flag | ABI | Devices |
|---|---|---|
arm64 (default) |
arm64-v8a | Modern phones (2017+) |
armv7 |
armeabi-v7a | Older 32-bit phones |
x86_64 |
x86_64 | Emulators, Chromebooks, desktop |
x86 |
x86 | Older 32-bit emulators |
tv |
armeabi-v7a | Android TV / Google TV devices |
Pass several at once to download with a comma: -a arm64,armv7. The base
APK is shared where possible and per-architecture splits (or separate builds,
for apps that publish one APK per ABI) land next to each other.
- Authenticate. The dispenser hands back an anonymous Play token, trying device profiles in turn until one is accepted.
- Look up. App metadata (version, size, split list) comes from Google Play's protobuf API.
- Purchase. Free apps are "purchased" to authorise the download; the delivery token Google returns is passed along to the delivery endpoint.
- Download. Base APK, splits, OBB files and asset packs stream in parallel from Google's CDN, using gzip-compressed transfers when offered.
- gplaydl web (source) for downloading from a browser
- gplaydl dispenser (source) for token dispenser deployment
- Rovelix (sponsored) for turning your Google Play portfolio into auto-synced websites, app-ads.txt and review insights
Sponsored · Rovelix is built by the creator of gplaydl
MIT. See LICENSE.