ShizuStore

PF Tool

aliernfrog

2.2.4 · GitHub

Download APK
Games Android 5.0+ 5 months ago GPL-3.0
14 ShizuStore
14.8k GitHub
19 Stars
3 MB Size

More about this app

Easily import and share Polyfield maps

PF Tool icon # PF Tool Easily import and share Polyfield maps

Download

At least Android 5.0 is required


Download count Build status


PF Tool screenshot (dark) PF Tool screenshot (light)

🌍 Translations

You can help translate PF Tool on Crowdin.

Crowdin

🦝 Shizuku support

Shizuku is an app which lets other apps elevate their permissions using wireless debugging or root access.

Shizuku method in PF Tool can be enabled or disabled anytime from settings.

Shizuku method will automatically be enabled if there is no other way for the app to access Polyfield data. The app will guide you to setup Shizuku if this mode is enabled.

🩹 Project structure

PF Tool shares codebase with my other apps, including LAC Tool. To avoid updating the codebase for each app, shared code was moved into 2 separate modules: shared (base) and pftool-shared (with map management logic).

⚖️ License

Since commit dfc783f, PF Tool is licensed under the GPLv3 license.
You must keep the source code public if you are distributing your own version of PF Tool. See LICENSE.md file for more details.

🔧 Building

Using GitHub Actions
  • Fork the repository
  • Add environment variables required for signing from Repository settings > Secrets and variables > Actions > Repository secrets:
    • KEYSTORE_ALIAS
    • KEYSTORE_BASE64 this can be obtained using openssl base64 -in keystore.jks
    • KEYSTORE_PASSWORD
    • KEY_PASSWORD
  • Enable workflows
  • Trigger a build workflow and wait for it to build a release variant APK
Locally
  • Clone the repository
  • Add a signing config (unless you only want to build debug variant or sign manually)
  • Build APK:
    • Release variant: ./gradlew assembleRelease
    • Debug variant: ./gradlew assembleDebug
Close

How Shizuku is used

Can browse, import, export, rename, duplicate and delete Polyfield maps via `Shizuku user service` file access.

This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.

How this app uses Shizuku

Shizuku is used as an optional storage access method to manage Polyfield map files directly in the game's folders.

  • Access map folders: the app can open the configured maps and exported maps folders with elevated access through Shizuku instead of the system folder picker.
  • Browse and preview maps: map folders and files are listed through Shizuku, and thumbnails and map contents are read through Shizuku file descriptors.
  • Import maps: zip files are read through Shizuku and their map files are created in the maps folder through Shizuku.
  • Export maps: map files are listed and read through Shizuku and packed into zip files created through Shizuku in the export folder.
  • Rename maps: map files and folders are renamed through Shizuku after checking for name conflicts through Shizuku.
  • Duplicate maps: new files and folders are created through Shizuku and map contents are copied through Shizuku file streams.
  • Delete maps: selected imported or exported maps are deleted recursively through Shizuku.

Android APIs or commands used

  • java.io.File.exists
  • java.io.File.listFiles
  • java.io.File.mkdirs
  • java.io.File.createNewFile
  • java.io.File.renameTo
  • java.io.File.deleteRecursively
  • android.os.ParcelFileDescriptor.open
  • java.io.FileInputStream
  • java.io.FileOutputStream

Notable details

The same map management features also work without Shizuku using the system folder picker option, so Shizuku is an alternative access method rather than a requirement.

Close

Changelog

What's new for version 2.2.4

:sparkles: New Features

  • 2847bea - Improve and update credits (PR #106 by @aliernfrog)

:bug: Bug Fixes

  • f98322c - SAF: Catch errors when checking for URI permissions (commit by @aliernfrog)
  • d1d3cf2 - Handle DocumentsUI being disabled/uninstalled (PR #107 by @aliernfrog)
Close

Permissions

5 permissions requested

  • android.permission.INTERNET
  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE
  • com.aliernfrog.pftool.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
  • moe.shizuku.manager.permission.API_V23
Close