MCPcopy Index your code
hub / github.com/Aefyr/SAI

github.com/Aefyr/SAI @4.5

Chat with this repo
repository ↗ · DeepWiki ↗ · release 4.5 ↗ · + Follow
2,356 symbols 6,437 edges 252 files 119 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Split APKs Installer

SAI: Crowdin Filepicker lib: Crowdin

SAI (Split APKs Installer) is an Android app that lets you install split APKs (such as ones distributed as Android App Bundle). It has both rooted and rootless installation methods.

Get it on F-Droid Get it on Google Play

State of SAI

SAI is kinda dead cause I have no motivation for continuing its development. I will probably maybe still occasionally fix bugs and add small features/improvements, focusing on the installer functionality, but idk. If you're looking for an actual backup solution, you can try OAndBackupX or Swift Backup.

Contributing

Please read Contributing guide

Exported .apks files meta

SAI adds some meta information to .apks files it exports, you can find the description of the format it uses in the Meta format description

License

SAI is licensed under GPLv3

Extension points exported contracts — how you extend this code

AppMetaExtractor (Interface)
A class that helps to extract some metadata about the app in an ApkSourceFile [12 implementers]
app/src/main/java/com/aefyr/sai/installerx/resolver/appmeta/AppMetaExtractor.java
ZipBackedApkSource (Interface)
An ApkSource backed by a zip archive [4 implementers]
app/src/main/java/com/aefyr/sai/model/apksource/ZipBackedApkSource.java
ApkSource (Interface)
(no doc) [11 implementers]
app/src/main/java/com/aefyr/sai/model/apksource/ApkSource.java
Postprocessor (Interface)
(no doc) [6 implementers]
app/src/main/java/com/aefyr/sai/installerx/postprocessing/Postprocessor.java
BackupComponent (Interface)
(no doc) [5 implementers]
app/src/main/java/com/aefyr/sai/backup2/BackupComponent.java

Core symbols most depended-on inside this repo

getString
called by 165
app/src/main/java/com/aefyr/sai/installerx/util/AndroidBinXmlParser.java
get
called by 125
app/src/main/java/com/aefyr/sai/installerx/util/AndroidBinXmlParser.java
findViewById
called by 124
app/src/main/java/com/aefyr/sai/ui/fragments/SaiBaseFragment.java
w
called by 64
app/src/fdroid/java/com/aefyr/sai/utils/Logs.java
format
called by 63
app/src/main/java/com/aefyr/sai/utils/BackupNameFormat.java
getContext
called by 58
app/src/main/java/com/aefyr/sai/installer/SAIPackageInstaller.java
size
called by 50
app/src/main/java/com/aefyr/sai/installerx/common/SplitPart.java
toString
called by 44
app/src/main/java/com/aefyr/sai/shell/Shell.java

Shape

Method 1,986
Class 282
Interface 69
Enum 19

Languages

Java100%

Modules by API surface

app/src/main/java/com/aefyr/sai/backup2/BackupStorage.java60 symbols
app/src/main/java/com/aefyr/sai/backup2/impl/DefaultBackupManager.java51 symbols
app/src/main/java/com/aefyr/sai/installerx/util/AndroidBinXmlParser.java48 symbols
app/src/main/java/com/aefyr/sai/utils/PreferencesHelper.java35 symbols
app/src/main/java/com/aefyr/sai/backup2/impl/storage/ApksBackupStorage.java35 symbols
app/src/main/java/com/aefyr/sai/utils/Theme.java30 symbols
app/src/main/java/com/aefyr/sai/backup2/backuptask/executor/SingleBackupTaskExecutor.java30 symbols
app/src/main/java/com/aefyr/sai/adapters/SplitApkSourceMetaAdapter.java30 symbols
app/src/main/java/com/aefyr/sai/backup2/backuptask/executor/BatchBackupTaskExecutor.java29 symbols
app/src/main/java/com/aefyr/sai/adapters/BackupAppDetailsAdapter.java29 symbols
app/src/main/java/com/aefyr/sai/backup2/impl/BackupService2.java28 symbols
app/src/main/java/com/aefyr/sai/adapters/selection/Selection.java28 symbols

For agents

$ claude mcp add SAI \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact