> Andreas,
> I'm not sure where you added that line <path refid="jar.libs.ref" />.
> I need to make this fix in the build.xml file, not in the Android SDK
> Tools directory, because this change needs to work on all of my team's
> machines and the build machine. I'll try to find a solution and post
> it here.
>
I've found the problem. In the latest version of the Android SDK
Tools (v8), the ${sdk}/tools/ant/main_rules.xml contains the build
targets for regular Android projects built with Ant. In this file,
inside the <macrodef name="dex-helper"> element, there is a command
which calls the application dx which creates the classes.dex file for
you. It is missing the external libs when called from the -dex
target. Right now, the ERRONEOUS program is run like:
java -Xmx1024M -Djava.ext.dirs=lib\ -jar lib\dx.jar --dex --output=C:
\xxx\bin\classes.dex C:\xxx\bin\classes
However, it SHOULD be run including the external jar libraries as the
source, along with the java class files:
java -Xmx1024M -Djava.ext.dirs=lib\ -jar lib\dx.jar --dex --output=C:
\xxx\bin\classes.dex C:\xxx\bin\classes c:\xxx\lib\external_lib.jar
In order to fix this, you can do two things. One, is to change the $
{sdk}/tools/ant/main_rules.xml file yourself by changing the -dex
target from:
<if condition="${manifest.hasCode}">
<then>
<dex-helper />
</then>
<else>
<echo>hasCode = false. Skipping...</echo>
</else>
</if>
to:
<if condition="${manifest.hasCode}">
<then>
<dex-helper>
<external-libs>
<path refid="jar.libs.ref" />
</external-libs>
</dex-helper>
</then>
<else>
<echo>hasCode = false. Skipping...</echo>
</else>
</if>
Although that solution will work for most developers, it will not work
if you need to propagate this fix across all team members working on
the project. As an alternative, you can fix it in your own project's
build file (build.xml) by ensuring that the external .jar files are
included in the input directory. You can do this by copying the .jar
files to the dex input directory before the dex target is called:
<target name="-pre-compile">
<!-- To fix a bug in Android SDK Tools v8, we need to copy the
external
libraries to the binary output directory, so that the .jar
is
included by the DX compiler. This will be unnecessary in the
future
when the bug is fixed; see
http://code.google.com/p/android/issues/detail?id=13091. -->
<copy todir="${out.classes.absolute.dir}">
<fileset dir="${jar.libs.absolute.dir}"/>
</copy>
</target>
If you fix it in your own build.xml file, then everyone who checks out
the project will be able to build the project correctly, without
having to change the SDK Tools local to their machine.
This is documented in the bug here:
http://code.google.com/p/android/issues/detail?id=13091
--
Matt Quigley
www.androidengineer.com
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en