{ "id": "62747", "key": "TIMOB-2115", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "11226", "name": "Release 1.5.0 M01", "archived": true, "released": true, "releaseDate": "2010-11-15" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2011-04-17T01:58:08.000+0000", "created": "2011-04-15T03:10:49.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "android", "build", "defect", "win32" ], "versions": [], "issuelinks": [], "assignee": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2011-04-17T01:58:08.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "{html}

Just a few bugs I've noticed while trying to get 1.5.x's Android\nSDK modules to work under windows.

\n

#0.\nexception is generated in a fork() call when trying to create a new\nmodule template using titanium.py ...you have to call module.py\nwith the args directly instead

\n

#1.\nyou have a bug with manifest.py (line 18) under windows...you're\nsplitting on \":\"...breaks on android.sdk, as under windows mine is\nC:\\progra~1\\android-sdk Obvious fix: change to:

\n
\nkey,value = line.split(':', 1)\n
\n

#2.\nfor some reason I have my module being added to self.module_jars in\nbuilder.py twice (looks like detector.find_app_modules() is finding\nit twice... same exact path, just in the list twice, which causes\nthe build command to fail). I monkeyhacked this to just get around\nit by doing:

\n
\n        for module in modules:\n            if module.path not in self.module_jars:\n                self.module_jars.append(module.path)\n            classpath = os.pathsep.join([classpath, module.path])\n
\n

#3.\nAfter this, using require() still fails for me (I'm missing\nsomething obvious I bet). However, using Ti.moduleName works. So,\nI'll go with that for now! :)

\n

#4. my\nmodule requires some 3rd party libs (jars), such as\ngoogle-api-client-1.1.1-alpha.jar. Placing them in /lib allows them\nto be resolved at compile time and my module to build successfully.\nHowever, I get a NoClassDefFoundError at runtime when anything from\nany of the modules are hit in the code. I've tried placing the jars\nin my app's build/android/lib and in /android to no avail.

{html}", "attachment": [], "flagged": false, "summary": "Android SDK build errors under win32", "creator": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "127533", "author": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Robby. When entering tags, make sure to use commas between them.\nI've corrected the tags.

{html}", "updateAuthor": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:50.000+0000", "updated": "2011-04-15T03:10:50.000+0000" }, { "id": "127534", "author": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Sorry about that Don. I've updated the ticket with one more\npotential bug I ran into on advice from Marshall.

{html}", "updateAuthor": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:50.000+0000", "updated": "2011-04-15T03:10:50.000+0000" }, { "id": "127535", "author": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Robby, no worries. But if I don't mention it, it never changes\n:)

{html}", "updateAuthor": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:50.000+0000", "updated": "2011-04-15T03:10:50.000+0000" }, { "id": "127536", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

(from [49f154a370ef55ba293d2d8d547eb5c79fe57626])\na new batch script frontend for titanium.py in windows, make sure\nto pass on the sys.executable when calling other python scripts,\nand only split manifest entries on the first colon [#2115]\n\nhttp://github.com/appcelerator/titanium_mobile/commit/49f154a370ef5...

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:50.000+0000", "updated": "2011-04-15T03:10:50.000+0000" }, { "id": "127537", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

(from [19571872de8164acdcb364fb4dbba0b53f110682])\nmore win32 fixes: use new manifest module in titanium.py, call\npython from the module builder, use titanium.bat in the project\nbuild.xml, and ant.bat from the module builder. give an error if\nthe platform/google apis aren't found [#2115]\n\nhttp://github.com/appcelerator/titanium_mobile/commit/19571872de816...

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:50.000+0000", "updated": "2011-04-15T03:10:50.000+0000" }, { "id": "127538", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

(from [05fcb7c95be28861649eea68c9eb674bd542a4c1])\nyet more win32 fixes: chop off the file:\\ prefix in the annotation\ngenerator so binding JSON data gets reloaded on subsequent\nannotation rounds. any jar files in lib are now expanded into the\ntop level module jar in the dist target so they are always\ndistributed with the module jar. changed ant script to use\nbuild/classes for building to not conflict with JDT's bin folder,\nand made sure the run and run.emulator targets depend on the dist\ntarget [#2115] \nhttp://github.com/appcelerator/titanium_mobile/commit/05fcb7c95be28...

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:51.000+0000", "updated": "2011-04-15T03:10:51.000+0000" }, { "id": "127539", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

OK, at this point #0, #1, and #4 look to be solved from my testing in XP. Some\nfollow up questions:

\n

#2:\nDid you accidentally copy your module into the system folder as\nwell as the application folder? If so the detector will pick it up\ntwice. Would you mind posting the full trace log so I can try to\nreproduce the error?

\n

#3:\nrequire() works like a charm for me in both XP and OSX.. Some\nthings to check: - Is the ID in require() the same as the ID in\nyour @Kroll.module declaration? - Did the 3rd party JAR error from\n#4 cause\nyour module class to fail loading?

\n

Have you tried taking a look at the \"example\" folder that gets\ngenerated? You can run that app.js by calling ant run.emulator /\nant run to test it out.

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:51.000+0000", "updated": "2011-04-15T03:10:51.000+0000" }, { "id": "127540", "author": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Marshall,

\n

Not strictly related to this ticket but looks like there is a\nscons problem too. See Helpdesk\n50451

{html}", "updateAuthor": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:51.000+0000", "updated": "2011-04-15T03:10:51.000+0000" }, { "id": "127541", "author": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Hey Marshall,

\n

This is great. Regarding #2...I did check for extra copies of my\njar...there don't seem to be any. The build trace is at http://pastebin.com/U5qB0jhp .\nYou'll notice at line 564, it's finding the jar in the same place\ntwice (with the same name). This is unmodified from I think the\n10/19 build, grabbed after you made the comitt that fixed 0, 1, and\n4.

\n

I'll try this (and using require()) in the newest build, as I\nsee you've made even more android module changes.

{html}", "updateAuthor": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:51.000+0000", "updated": "2011-04-15T03:10:51.000+0000" }, { "id": "127542", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Cool thanks for the info. You'll probably want to recreate your\nproject after updating, I've made a number of build and\ndistribution changes that are incompatible with projects from a few\ndays ago, FYI

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:51.000+0000", "updated": "2011-04-15T03:10:51.000+0000" }, { "id": "127543", "author": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Marshall,

\n

Recreated the project as you said. That all goes well. With the\nnew build.xml, there is one minor regression upon building:

\n

My {build} path has a space in it (sits in My Documents), which\nant doesn't seem to like:

\n
\nO:\\robbyd\\My Documents\\workspace\\sportschedules\\titaniumlibs\\android\\CalendarLib>ant\nBuildfile: O:\\robbyd\\My Documents\\workspace\\sportschedules\\titaniumlibs\\android\\CalendarLib\\build.xml\n\ninit:\n\nprocess.annotations:\n    [javac] Compiling 18 source files to O:\\robbyd\\My Documents\\workspace\\sportschedules\\titaniumlibs\\android\\CalendarLib\\build\\classes\n    [javac] javac: invalid flag: Documents\\workspace\\sportschedules\\titaniumlibs\\android\\CalendarLib\\build\\.apt_generated\n    [javac] Usage: javac <options> <source files>\n    [javac] use -help for a list of possible options\n\nBUILD FAILED\nC:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\module\\android\\build.xml:43: Compile failed; see the compiler error output for details.\n\nTotal time: 0 seconds\n
\n

As a temp workaround (and because I know very little about how\nant works), I placed the following in my build.properties:

\n
\nbuild=O:\\robbyd\\mydocu~1\\workspace\\sportschedules\\titaniumlibs\\android\\CalendarLib\\build\n
\n

Which fixes the problem.

{html}", "updateAuthor": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:51.000+0000", "updated": "2011-04-15T03:10:51.000+0000" }, { "id": "127544", "author": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Another bug:

\n

from one of the 20101025 daily builds, in module\\module.py,\naround line 184:

\n
\n        for platform in os.listdir(modules_dir):
\n
\n\n\n
\n
\n
\n        platform_dir = os.path.join(modules_dir, platform)\n        if not os.path.isdir(platform_dir): continue\n        if platform_dir in ['osx', 'win32', 'linux']: continue # skip desktop modules\n\n        # recursive once in the platform directory so we can get versioned modules too</code>\n
\n
\n\n\n
\n
\n

\"if platform_dir in ['osx', 'win32', 'linux']:\" should be \"if\nplatform in ['osx', 'win32', 'linux']:\" instead.

\n

With the current code, the module searcher is looking into\ndesktop platform module dirs (e.g. 'win32') in my case.

{html}", "updateAuthor": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:52.000+0000", "updated": "2011-04-15T03:10:52.000+0000" }, { "id": "127545", "author": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

And it still appears that for me at least it's finding modules\ntwice:

\n
\n[INFO] Compiling Android Resources... This could take some time\n[DEBUG] C:\\Progra~2\\Java\\jdk1.6.0_21\\bin\\java.exe -Xmx1024M -Djava.ext.dirs=C:\\Progra~1\\android-sdk-windows\\platforms\\android-4\\tools -jar C:\\Progra~1\\android-sdk-windows\\platforms\\android-4\\tools\\lib\\dx.jar --dex --output=O:\\robbyd\\My Documents\\workspace\\sportschedules\\Sportschedule\\build\\android\\bin\\classes.dex O:\\robbyd\\My Documents\\workspace\\sportschedules\\Sportschedule\\build\\android\\bin\\classes C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-analytics.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-android.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\titanium.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\commons-codec-1.3.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\js.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\jaxen-1.1.1.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-ui.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-app.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-api.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-filesystem.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-media.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-json.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-locale.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-platform.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-network.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-xml.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.0-20101024\\android\\modules\\titanium-utils.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\calendarlib.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\google-api-client-1.1.1-alpha.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\jackson-core-asl-1.5.3.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\calendarlib.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\google-api-client-1.1.1-alpha.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\jackson-core-asl-1.5.3.jar\n
\n

(see the end of that string...my custom modules it finds twice,\nat the same exact directories.) Looking there everything looks fine\nat least to me...the files are only there once.

{html}", "updateAuthor": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:52.000+0000", "updated": "2011-04-15T03:10:52.000+0000" }, { "id": "127546", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

(from [27039690045edf352854e05b2dd06beb03551185])\nuse compilerarg \"value\" so the .apt_generated path gets properly\nescaped, check platform instead of platform_dir when looking at\nmodule directories [#2115] \nhttp://github.com/appcelerator/titanium_mobile/commit/27039690045ed...

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:52.000+0000", "updated": "2011-04-15T03:10:52.000+0000" }, { "id": "127547", "author": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Robby, would you be able to spend some time with me on IRC today\nto see if we can make sure all these are fixed?

{html}", "updateAuthor": { "name": "mculpepper", "key": "mculpepper", "displayName": "Marshall Culpepper", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:53.000+0000", "updated": "2011-04-15T03:10:53.000+0000" }, { "id": "127548", "author": { "name": "mschmulen", "key": "mschmulen", "displayName": "Matt Schmulen", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

Thanks Opie! verified Windows

{html}", "updateAuthor": { "name": "mschmulen", "key": "mschmulen", "displayName": "Matt Schmulen", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:53.000+0000", "updated": "2011-04-15T03:10:53.000+0000" }, { "id": "127549", "author": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

This is broken again in 1.5.1 final: The build process with a\ncustom module fails for me because it is finding the modules\ntwice.

\n
\n[INFO] Compiling Android Resources... This could take some time\n[DEBUG] C:\\Progra~2\\Java\\jdk1.6.0_21\\bin\\java.exe -Xmx1024M -Djava.ext.dirs=C:\\Progra~1\\android-sdk-windows\\platforms\\android-4\\tools -jar C:\\Progra~1\\android-sdk-windows\\platforms\\android-4\\tools\\lib\\dx.jar --dex \"--output=O:\\robbyd\\My Documents\\workspace\\sportschedules\\Sportschedule\\build\\android\\bin\\classes.dex\" \"O:\\robbyd\\My Documents\\workspace\\sportschedules\\Sportschedule\\build\\android\\bin\\classes\" C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\ti-commons-codec-1.3.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-app.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-json.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-android.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-api.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-utils.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-xml.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-platform.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-media.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-filesystem.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\jaxen-1.1.1.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\smalljs.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-ui.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-locale.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\titanium.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-network.jar C:\\ProgramData\\Titanium\\mobilesdk\\win32\\1.5.1\\android\\modules\\titanium-analytics.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\calendarlib.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\google-api-client-1.2.0-alpha.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\jackson-core-asl-1.5.7.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\calendarlib.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\google-api-client-1.2.0-alpha.jar C:\\ProgramData\\Titanium\\modules\\android\\com.slamstreet.sportschedule.android.calendarlib\\0.1\\lib\\jackson-core-asl-1.5.7.jar\n
\n

(You'll notice that the calendarlib.jar, google-api-client and\njackson-core jars are included twice...from the same exact\ndir.)

\n

This causes build errors like:

\n
\n[ERROR] UNEXPECTED TOP-LEVEL EXCEPTION:\n[ERROR] java.lang.IllegalArgumentException: already added: Lcom/slamstreet/sportschedule/android/calendarlib/CalendarlibModule;\n[ERROR] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)\n[ERROR] at com.android.dx.dex.file.DexFile.add(DexFile.java:143)\n
\n

Fixed it by monkeypatching android/builder.py:

\n
\n        for module in self.modules:
\n
\n\n\n
\n
\n
\n        if module.jar == None: continue\n        ##PATCH1\n        if module.jar not in self.module_jars:\n            self.module_jars.append(module.jar)\n        ##  \n        classpath = os.pathsep.join([classpath, module.jar])\n        module_lib = module.get_resource('lib')\n        for jar in glob.glob(os.path.join(module_lib, '*.jar')):\n            ##PATCH2\n            if jar not in self.module_jars:\n                self.module_jars.append(jar)\n            ##    \n            classpath = os.pathsep.join([classpath, jar])</code>\n
\n
\n\n\n
\n
{html}", "updateAuthor": { "name": "robby", "key": "robby", "displayName": "Robby", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:53.000+0000", "updated": "2011-04-15T03:10:53.000+0000" }, { "id": "127550", "author": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "body": "{html}

@Robby would you mind opening a different ticket for this new\nproblem? Assign it to me and I'll get it scheduled in. Also if\nyou'd like to contribute an actual patch we just need you to sign\nthe CLA.

{html}", "updateAuthor": { "name": "dthorp", "key": "dthorp", "displayName": "Don Thorp", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2011-04-15T03:10:53.000+0000", "updated": "2011-04-15T03:10:53.000+0000" } ], "maxResults": 18, "total": 18, "startAt": 0 } } }