A lot of forks are shallow (e.g., name change and icon) and eventually fall out of date. This seems wasteful. If there is a way we can do this (either some web service where we swap out the manifest and namespace) or improved runtime assets, that'd be awesome.
I've looked into this per @yanokwa's request. Here are some thoughts:
Because both are set in manifest file they cannot be configured during runtime, making changes there will require building the app (and distributing it outside of primary Play Services channel).
We can definitely simplify the process there by providing clear instructions and scripts that would do bulk of the work. Admins then would just drop PNG file with the icon / edit text file and run the script, which will automatically check out the most recent release and replace icon / app name in there.
Of course, to distribute updates admins would need to run script again and distribute apk file manually (or submit it to the play store).
Alternatively we could build a web service where users could upload app icon / specify app name, web service then would unpack original unsigned apk file, make changes and pack it again for user to download.
Generating custom APK files is the only way to ensure that new icon/app name will show up everywhere but its main downside is manual distribution of updates.
If admins are mostly concerned with branded experience for when users launch the app, we could let them create shortcuts on the home screen with custom icons / text.
Flow would be something like this:
To the end user launching app from home screen it would seem as it's a branded app (however if they go to the list of all apps, original icon/name will be shown).
A slight variation of this is creating a widget instead of a shortcut. Widget can take more space on the screen (for easier launching) and / or provide additional functionality (present a list with a blank form etc).
We can let Admins brand experience within the app through Settings where they will be able to select an image, perhaps an accent color and customize name being displayed. This would not affect any experiences outside the app.
This has become more of a governance issue and is tracked at https://github.com/opendatakit/roadmap/issues/22.
Most helpful comment
I've looked into this per @yanokwa's request. Here are some thoughts:
Goals
Options
App launcher icon & title
Because both are set in manifest file they cannot be configured during runtime, making changes there will require building the app (and distributing it outside of primary Play Services channel).
We can definitely simplify the process there by providing clear instructions and scripts that would do bulk of the work. Admins then would just drop PNG file with the icon / edit text file and run the script, which will automatically check out the most recent release and replace icon / app name in there.
Of course, to distribute updates admins would need to run script again and distribute apk file manually (or submit it to the play store).
Alternatively we could build a web service where users could upload app icon / specify app name, web service then would unpack original unsigned apk file, make changes and pack it again for user to download.
Generating custom APK files is the only way to ensure that new icon/app name will show up everywhere but its main downside is manual distribution of updates.
Shortcuts & Widgets
If admins are mostly concerned with branded experience for when users launch the app, we could let them create shortcuts on the home screen with custom icons / text.
Flow would be something like this:
To the end user launching app from home screen it would seem as it's a branded app (however if they go to the list of all apps, original icon/name will be shown).
A slight variation of this is creating a widget instead of a shortcut. Widget can take more space on the screen (for easier launching) and / or provide additional functionality (present a list with a blank form etc).
Inside the app
We can let Admins brand experience within the app through Settings where they will be able to select an image, perhaps an accent color and customize name being displayed. This would not affect any experiences outside the app.