This demo's PC-side scripts were run on macOS. It uses shared storage for both zips and content on the phone. This example changes only pathnames in config files. Note that zips and content need not both use shared storage the way this demo does. In practice, you might use app-private or app-specific for zipfiles to optimize sync speed, and shared storage for content to boost accessibility and longevity. NONPORTABLE FILENAMES Are fixed as a first step in the initial copy here, because this is required for shared storage. The app-specific and app-private tests do not, because those storage types allow Unix filenames. macOS silently munges nonportable filename characters to work on the exFAT proxy, but the unzip to Android shared storage would not retain files with such names. The x* folder shows what happens to nonportable filenames in Android 11 shared storage if the fixer script isn't run. In it, nonportable filenames are skipped with error messages, because Android doesn't support name munges (see ziptools). SYMLINKS Are forged on the exFAT proxy by macOS, and yield stub files when unzipped on the phone's shared storage because they are not supported by Android there. The stubs are harmless unless backsynced to PCs. See the basic-appspecific* and basic-appprivate* folders' _readmes for more info. For more info on filenames and symlinks, see the main doc's: _README.html#Nonportable Filenames _README.html#storagemetadata