After yesterday's idea I decided to give it a try and install in my rooted nexus one all the roboguice dependencies to see if my build times improved. To test it out I Manfred Moser's roboguice sample code called: roboguice-calculator.
Mike: I was going to test with the Astroboy roboguice's demo, but I didn't feel like dealing with hg. Plz move roboguice to git :)
To do this I have separated the whole process in steps.
First of all, you need to get a pre-dexed jar files of all the dependencies. You can pre-dex your jar files with the following line:
dx -JXmx1024M -JXms1024M -JXss4M --no-optimize --debug --dex --output=./my_dep_dex.jar my_dep.jar
Creating the permissions XMLs
Once you get all your dependencies pre-dexed, you need to create the permissions XMLs which looks like this:
<permissions><library name="my.dependency"file="/data/data/com.nasatrainedmonkeys.roboinstaller/files/my_dependency_dex.jar" /></permissions>
Installing the dependencies
After some hacking to the scala-android-libs src code I had the code ready to install dependencies on the device.
Modifying the AndroidManifest
tag you need to add all your dependencies with the <uses-library> tag. It should look like this:
Modifying the pom.xml
The last step is setting the scope to provided using
Building the ordinary app: Total time: 22.212s
With this hack: Total time: 10.431s
Since mvn doesn't create a jar file with all the dependencies inside, I failed on my first try because the guice dependency needed the javax.inject jar file. I guess there should be a way to create a "fat-jar" with every dependency inside. If that's possible pre-dexing a dependency would be much more easier.
This has shown the approach is totally useful. Next step is to create an android app that can install pre-dexed files and create the xml without needing to recompile the whole application. This approach would also take me to separate my application into different libraries to develop as fast as possible :)
I have placed the installer code and the sample application with the modifications in this github repo: Roboinstaller