Hi Dianne,
Thank you for the feedback, I have a few more comments and questions
below.
> ... maintaining public resources is a pain (with annoying things
> like what happens when you remove resources), ...
I agree that maintaining public resources would become a big pain. We
have been trying to think of some ways to ease that pain. One idea is
to keep a master list of the "customizable" resources and then add a
tool to the build chain which performs a check when the application is
compiled. This build-time check would flag any incompatible changes as
either an error or a warning depending on the type of build (eng,
user) and the type of change.
When a resource has been marked as "customizable" in a released
version of an application then that resource name needs to be
reserved. The set of customizable resources could be assigned a
version number. If a future version of the application removes a
customizable resource then backward compatibility would be broken. A
check of the version number would allow the application to ignore any
incompatible customizations. I am thinking that it should be possible
to upgrade an application without necessarily upgrading the
customization.
> The resource system already mostly supports loading multiple .apks and
> merging them into one resource set ...
Good point. I think this feature is very close to meeting our needs.
Our initial prototyping efforts focused on loading multiple .apks and
having the framework merge these into one resource set. We ran into a
few roadblocks with the way that some of the asset cookies are handled
and the order of precedence when multiple .apks are loaded.
Would it be OK to modify the framework to give preference to the
customization .apk which is added to the asset manager's list, instead
of giving preference to the application .apk?
> ... you should be carefully controlling what versions of things you are
> putting together anyway, right?
Yes, we would be controlling which versions of things get put
together, but we still want to achieve forward/backward compatibility.
For example, browser bookmarks. Some operators might want to pre-load
their own set of bookmarks. If the Browser application has a resource
named "bookmarks" then the .apk with the customized bookmarks would
contain a "bookmarks" resource. However, if the Browser application
decided to change the name of the resource from "bookmarks" to
"my_bookmarks" then the forward/backward compatibility would be
broken. We want to avoid this by "freezing" the set of resources that
can be customized. In this way, it would be possible to upgrade the
Browser application without having to redo the bookmark customization.
Does the asset manager treat public and private resources any
differently? I understand that the aapt tool "freezes" the resource ID
for anything that is declared to be public. Other than the resource ID
always having the same value, does the phone software treat a public
resource any different than a private one?
Best regards,
Paul