I recently wrote the
AndroidGenDrawable Maven plugin for Android that allow you to generate density specific PNG drawable from
SVG (scalable vector graphics) at build time for your Android projects. Here is a brief presentation.
Fragmentation
Fragmentation is an actual problem when speaking of Android development. Specially when programmers need to maintain density specific
raster graphics image (bitmaps) to target all of the possible Android device screens. The very first example is the
Launcher icon of an Android application that should be resized depending on the generalized screen density (see
link) :
|
ldpi generalized density |
|
mdpi generalized density |
|
hdpi generalized density |
|
xhdpi generalized density |
androidgendrawable-maven-plugin
The
androidgendrawable maven plugin allow you to work on a unique SVG version of your assets and to generate the density specific PNG versions required by the Android runtime at build time. The SVG artwork are automatically scaled and transcoded to PNG for you during the maven build. The plugin rely on
apache batik to transcode the SVG to PNG. You just have to add the plugin declaration and its configuration to your pom.xml :
<plugin>
<groupId>fr.avianey.modjo</groupId>
<artifactId>androidgendrawable-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<from>${project.basedir}/svg</from>
<to>${project.basedir}/res</to>
<rename>
<level>icon</level>
</rename>
<createMissingDirectories>true</createMissingDirectories>
<targetedDensities>
<density>ldpi</density>
<density>mdpi</density>
<density>hdpi</density>
<density>xhdpi</density>
</targetedDensities>
<fallbackDensity>mdpi</fallbackDensity>
<skipNoDpi>true</skipNoDpi>
</configuration>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>gen</goal>
</goals>
</execution>
</executions>
<plugin>
Required resources are then generated during the initialize phase of the Maven build :
[INFO] ------------------------------------------------------------------------
[INFO] Building level 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- androidgendrawable-maven-plugin:1.0-SNAPSHOT:gen (default) @ level ---
[INFO] Transcoding level-xhdpi.svg to drawable
[INFO] Transcoding level-xhdpi.svg to drawable-hdpi
[INFO] Transcoding level-xhdpi.svg to drawable-ldpi
[INFO] Transcoding level-xhdpi.svg to drawable-xhdpi
You can fork the plugin on github
here and read the documentation on the associated github page
here.