Reading the Online Developer Guide page on XML layouts, I've found the following statement:
Your UI descriptions are external to your application code, which means that you can modify or adapt it without having to modify your source code and recompile.
I know about the many advantages of XML layouts and resources, but since the XML files are placed inside the APK, I think there's no real way to modify the GUI without repackaging. I mean, most of us are using eclipse ADT plugin and ANT to package the apps, so there's no real gain in not compiling the class files (since after modifying the resource files, a developer will have to repackage the app and produce a new APK file). Because of this, there is no way to redeploy just the GUI on devices without redeploying the entire APK.
If this supposition were true, then XML files are going to be the same during the lifetime of an APK file. I guess these files (specially layout ones) have to be parsed and processed at runtime (before an activity's onCreate) which would be less efficient than building the GUI programmatically (like in Swing). Layout is not usually a bottleneck, but if I'm correct, I see here an small waste of time that could be better used (for instance, with animations).
Reading the same page, it states:
When you compile your application, each XML layout file is compiled into a View resource.
Inspecting one of my APKs, I've been looking for a precompiled file inside classes.dex
and there's nothing but my java classes and the R.class
file. The layout XML files are inside the /res/layout folder
, and there's a file named resources.arsc
which seems to contain info about other resources (strings, icons names), but nothing related to Views, I think (correct me if I'm wrong).
My questions:
Thanks in advance.
If you have a gander at the class documentation for LayoutInflater, you'll notice they say:
For performance reasons, view inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use
LayoutInflater
with anXmlPullParser
over a plain XML file at runtime; it only works with anXmlPullParser
returned from a compiled resource (R.something file
.)
So yes, layout files are indeed precompiled to some degree, and, judging by the above excerpt, it would be in the The precompiled layout file is located in your compiled APK package, as R$layout.class
output file (but I'm not 100% sure on that)./res/layout/<layout_id>.xml
. You'll notice if you extract it and open it in a text editor that most plain-text XML elements have been mapped to some binary form.
It would probably be the same kind of compression you can see in AndroidManifest.xml
files that get packaged into the APKs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With