{ "id": "103072", "key": "TIMOB-11360", "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": "16096", "description": "2014 Sprint 09", "name": "2014 Sprint 09", "archived": true, "released": true, "releaseDate": "2014-05-08" }, { "id": "16097", "description": "2014 Sprint 09 SDK", "name": "2014 Sprint 09 SDK", "archived": true, "released": true, "releaseDate": "2014-05-08" }, { "id": "15422", "description": "Release 3.3.0", "name": "Release 3.3.0", "archived": false, "released": true, "releaseDate": "2014-07-16" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2015-04-13T16:21:19.000+0000", "created": "2012-10-10T21:14:20.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "exempt", "module_module", "qe-manualtest", "triage" ], "versions": [ { "id": "14137", "description": "Release 2.1.3", "name": "Release 2.1.3", "archived": true, "released": true, "releaseDate": "2012-10-03" } ], "issuelinks": [ { "id": "35299", "type": { "id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks" }, "outwardIssue": { "id": "125734", "key": "TIMOB-16510", "fields": { "summary": "Android: The Google Play services resources were not found", "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" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "34043", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "102576", "key": "AC-1735", "fields": { "summary": "Unable to integrate Android Library project with Titanium Module", "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" } }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "32319", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "119221", "key": "TIMOB-14991", "fields": { "summary": "Android: Javascript can't get path of assets folder of module", "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" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "32430", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "120982", "key": "TIMOB-15443", "fields": { "summary": "Android: Allow full Activity lifecycle access for Titanium modules", "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" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "32315", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "119820", "key": "TIMOB-15266", "fields": { "summary": "Android (parity): Implement \"NewPermissionsRequest\" as \"reauthorize\"", "status": { "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "name": "Reopened", "id": "4", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "37770", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "130742", "key": "TIMOB-17009", "fields": { "summary": "Tooling: Android Module need to add support for multiple res directories", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "updated": "2016-06-17T12:46:35.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" }, { "id": "10207", "name": "Tooling" } ], "description": "Summary: If we include a native Android project as library to our Android module environment and try to access the library's functionality, it throws NoClassFoundException if the UI elements are built using XML layouts.\r\nWork Around: Build the UI components using Widgets ( java ). This is a laborious process as native android projects are built using layouts in xml.\r\n\r\nSteps to reproduce:\r\n--------------------\r\n\r\n1. Import the attached 'Sample-apklib.zip' to Eclipse/Studio\r\n2. Build the project as a library ( jar file is generated in bin folder )\r\n3. Import the attached 'Sample_apklib_module.zip' to Eclipse/Studio.\r\n4. Add the jar file obtained in Step 2 in the build path of Sample_apklib_module project. Also copy the jar file to 'lib' folder of the module project.\r\n5. Build and run the module using ant scripts.\r\n6. Exception is seen as UI elements in library is referenced in the module.\r\n\r\nWork Around: All UI elements should be created using native java methods ( widgets ).", "attachment": [ { "id": "32508", "filename": "sample_apklib_module.zip", "author": { "name": "anagesh", "key": "anagesh", "displayName": "Anirudh Nagesh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-10-10T21:14:20.000+0000", "size": 1662051, "mimeType": "application/zip" }, { "id": "32507", "filename": "Sample-apklib.zip", "author": { "name": "anagesh", "key": "anagesh", "displayName": "Anirudh Nagesh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-10-10T21:14:20.000+0000", "size": 82653, "mimeType": "application/zip" } ], "flagged": false, "summary": "Tooling: Android module build scripts throw NoClassFoundException when native Android project is included as library which has UI built in XML", "creator": { "name": "anagesh", "key": "anagesh", "displayName": "Anirudh Nagesh", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "anagesh", "key": "anagesh", "displayName": "Anirudh Nagesh", "active": true, "timeZone": "America/Los_Angeles" }, "environment": "Ti SDK 2.1.3 and Android 2.2", "comment": { "comments": [ { "id": "223048", "author": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "updateAuthor": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "created": "2012-10-11T05:56:15.000+0000", "updated": "2012-10-11T05:56:15.000+0000" }, { "id": "223735", "author": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "body": "Chris, thanks for updating Fix Version. In the mean time, can we have a patch in order to resolve this issue in the current version ?", "updateAuthor": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "created": "2012-10-16T05:37:32.000+0000", "updated": "2012-10-16T05:37:32.000+0000" }, { "id": "223737", "author": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "body": "Also, please mark this bug with Priority as High as currently it carries None.\r\n\r\nThanks.", "updateAuthor": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "created": "2012-10-16T05:39:18.000+0000", "updated": "2012-10-16T05:39:18.000+0000" }, { "id": "223783", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "@Perminder, I did not set the Fix Version and I unfortunately will not have a patch since this isn't my area of expertise. Whoever gets assigned this ticket will be the one to fix it.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2012-10-16T15:40:53.000+0000", "updated": "2012-10-16T15:40:53.000+0000" }, { "id": "223935", "author": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "body": "@Chris - I checked the history and it was Ingo who updated the Fix version.\r\n@Ingo - can you please update on my previous comments.", "updateAuthor": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "created": "2012-10-17T05:48:00.000+0000", "updated": "2012-10-17T05:48:00.000+0000" }, { "id": "227134", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Perminder--we cannot provide a patch at the moment. However, we will look at this in the 3.1 timeframe.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-11-13T16:17:59.000+0000", "updated": "2012-11-13T16:17:59.000+0000" }, { "id": "228143", "author": { "name": "mehdi.b", "key": "mehdi.b", "displayName": "Mehdi Bouamama", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Hi, is it possible to have an ETA for this ? \r\nThe future of my project depends on this feature.\r\nThanks.", "updateAuthor": { "name": "mehdi.b", "key": "mehdi.b", "displayName": "Mehdi Bouamama", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-11-21T05:26:15.000+0000", "updated": "2012-11-21T05:26:15.000+0000" }, { "id": "273985", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "This is a critical piece of infrastructure that must be implemented for Android. Not being able to easily integrate Android library projects which have XML resources means that these library projects have to be hacked in order to work with Titanium. The corollary is that these projects become totally unmaintainable. A good example is the Facebook module. The Android Facebook SDK is totally hacked up because of this. Please try to fix this issue!\r\nThanks.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-10-07T12:41:04.000+0000", "updated": "2013-10-07T18:26:11.000+0000" }, { "id": "273988", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-10-07T12:50:47.000+0000", "updated": "2013-10-07T12:50:47.000+0000" }, { "id": "274060", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-10-07T20:05:09.000+0000", "updated": "2013-10-07T20:05:09.000+0000" }, { "id": "274086", "author": { "name": "sky", "key": "sky", "displayName": "Sky Kelsey", "active": true, "timeZone": "America/Los_Angeles" }, "body": "I'd like to throw my vote in for this feature as well. I just finished adding support for our (www.apptentive.com) SDK on Trigger.io, and while this was not an easy process, it was possible. Android Library Projects are the only way to package a third party library while still leveraging the power of the Android resource management system. I doubt it will be cost effective for us to provide a Titanium module until this is supported. To put it another way: I, and many other third party Android developers who add value to the various web-to-native platforms, will be unlikely to rewrite our SDKs to fit into a JAR.", "updateAuthor": { "name": "sky", "key": "sky", "displayName": "Sky Kelsey", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-10-07T22:13:08.000+0000", "updated": "2013-10-07T22:13:08.000+0000" }, { "id": "274177", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "This feature is probably the #1 showstopper to porting 3rd party modules, but there are others, and thus the entire module API needs to be reviewed. I submitted an issue requesting that the iOS module API supply full access to application lifecycle events (e.g. access to handleUrl, etc). In Android, modules often need to have access to the full Activity lifecycle, including to onActivityResult (e.g. returning from Facebook login UI). Currently, there is only access to the root activity lifecycle, which is probably useless for most modules. Not having such access means that Titanium Android modules need to launch their own activities, instead of simply operating in the context of the activity that wants to use the module.\r\nAn example of such convoluted logic can be seen here: http://stackoverflow.com/questions/5215071/appcelerator-custom-module-receiving-callback-for-onactivityresult", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-10-08T16:38:43.000+0000", "updated": "2013-10-08T16:38:43.000+0000" }, { "id": "274335", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-10-09T06:39:06.000+0000", "updated": "2013-10-09T06:39:06.000+0000" }, { "id": "276959", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "I actually managed to have actionbarsherlock (and appcompat before) working with Ti framework. I have it packaged with the framework then correctly used to generate and compile the app.\r\nI was abled to do that thanks to the new cli for Android. Thanks to a few line changes i had it working great. And it should work with any 3rdparty library. A little more work needs to be done to allow it inside submodules. But it s mostly there\r\nWill soon be published [here|https://github.com/Akylas/titanium_mobile]", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-10-28T14:12:56.000+0000", "updated": "2013-10-28T14:12:56.000+0000" }, { "id": "279653", "author": { "name": "ayeung", "key": "ayeung", "displayName": "Allen Yeung", "active": true, "timeZone": "America/Los_Angeles" }, "body": "There might be some confusion on what this bug is about. The problem occurs when we try to include third party jars with UI built components in it into a titanium module project. Based on that problem specifically, I am going to resolve this ticket as 'not our bug'. This is a problem with Native Android Libraries exported as jars specifically.\n\nThe underlying problem is that Native Android Library projects do not include the R classes when you export it as a jar. The reason behind this is that Android generates these files during the build process of the app (not the library). The aapt tool is used to create these files during build time. Since the aapt tool isn't used during the creation of the jar for the Native Android Library, it won't have the generated R classes in there.\n\nIn native android development, the right thing to do would be to include the Native Android Library source in the same workspace and add it as a library from source. The ADT will pull in the assets accordingly and run aapt on it when the app gets built.\n\nTo verify that this is not a titanium-specific bug, I've tried adding the same jar attached to the ticket, and ran it inside a native android project (without titanium). I get the same \"NoClassFoundException\" error since it can't find the generated R file. Then I tried to add that same library source in the build path instead of an external jar, and it worked fine (this is the approach I mentioned above).\n\nIf you want ONLY your titanium module to have UI XML components, you can do this by adding the layout xml files into platform/android/res. You can reference the facebook module to see how it's done in titanium: https://github.com/appcelerator/titanium_modules/tree/master/facebook/mobile/android. Unfortunately, there is nothing we can do to support external jars with UI components on the Titanium side, since the it's a problem with the jar generation (done outside of titanium).", "updateAuthor": { "name": "ayeung", "key": "ayeung", "displayName": "Allen Yeung", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-11-14T23:04:16.000+0000", "updated": "2013-11-14T23:04:16.000+0000" }, { "id": "279712", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-11-15T05:31:35.000+0000", "updated": "2013-11-15T05:31:35.000+0000" }, { "id": "279724", "author": { "name": "ssasa", "key": "ssasa", "displayName": "Sasa Skevin", "active": true, "timeZone": "Europe/Berlin" }, "body": "Allen, we have a use case where adding Native Android Library source is not an option. It is a commercial product which is distributed as a binary. How to support such case?", "updateAuthor": { "name": "ssasa", "key": "ssasa", "displayName": "Sasa Skevin", "active": true, "timeZone": "Europe/Berlin" }, "created": "2013-11-15T06:51:49.000+0000", "updated": "2013-11-15T06:51:49.000+0000" }, { "id": "279729", "author": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "body": "Allen - The only reason this ticket is in Jira is the reason to support third party libraries and why would any Titanium developer take a pain to build UI in module when he can do the same in Titanium (Sorry to remind bad common sense). This is a pure Titanium Bug and if you are not able to solve it then assign it to someone else which may be to Jeff in this case.", "updateAuthor": { "name": "perminder.singh", "key": "perminder.singh", "displayName": "Perminder Singh Bhatia", "active": true, "timeZone": "Asia/Kolkata" }, "created": "2013-11-15T07:06:14.000+0000", "updated": "2013-11-15T07:06:14.000+0000" }, { "id": "279731", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "Guys it s almost here, if not already ;)\r\nhttps://github.com/appcelerator/titanium_mobile/pull/4935", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-11-15T07:26:34.000+0000", "updated": "2013-11-15T07:26:34.000+0000" }, { "id": "279744", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "Martin - if it's almost done, then the \"real\" PR for Titanium Mobile should include the latest ActionBarCompat, no?\r\nIt's just the infrastructure that's the problem - the code changes should be next to trivial.\r\nWhat do you think? BTW ActionBarSherlock is pretty much dead as I understand it. See the differences here:\r\nhttp://android-developers.blogspot.co.il/2013/08/actionbarcompat-and-io-2013-app-source.html", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-11-15T08:49:23.000+0000", "updated": "2013-11-15T08:49:23.000+0000" }, { "id": "279761", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "Mark i was talking about the ability to do it, which is the subject of that ticket.\r\nNow as for the implementation i already have ActionBarSherlock fully working in my public branch. You can use it.\r\n\r\nI have tried ActionBarCompat and it s really buggy. ", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-11-15T12:43:56.000+0000", "updated": "2013-11-15T12:43:56.000+0000" }, { "id": "284862", "author": { "name": "ayeung", "key": "ayeung", "displayName": "Allen Yeung", "active": true, "timeZone": "America/Los_Angeles" }, "updateAuthor": { "name": "ayeung", "key": "ayeung", "displayName": "Allen Yeung", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-12-17T21:25:59.000+0000", "updated": "2013-12-17T21:25:59.000+0000" }, { "id": "284877", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "Hi Allen,\r\n\r\nThe problem is one that you mentioned earlier: lots of Android library projects use the R class built from the lib's XML resources. Facebook is one example, ActionBarCompat is another, etc.\r\nBut taking a step back, and looking at it from a higher level: in order for Titanium to be agile and competitive in the long run, it must match the ease of integration of libraries in the same fashion as standard Android projects. Hypothetical example: Titanium's Facebook module is based on Facebook SDK p.q.r. Assume Facebook releases a version fixing critical bugs, p.q.s\r\nIn the native Android case, the new version is just dropped into the project, zero coding effort after the initial integration of p.q.r. In Titanium's case - this is a huge pain since now the new Facebook *SDK* (i.e. not the module code itself) has to be hacked up in order to fit the module architecture - just see how many hacks specifically due to this exist in the Facebook SDK in your current Facebook module. This is why the Ti Facebook module is outdated, buggy, and totally underfeatured. Sorry to rant on this, but it's reality.\r\nYou may see the same issue with ActionBarCompat - if you can't easily drop in new versions with bug fixes, you will very soon wind up with a stale and buggy implementation, since no one can afford to hack up Google's libraries with every version release.\r\nBy hook or by crook, you have to make Android library projects be as easily usable under Titanium as they are under Android.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-12-17T22:06:11.000+0000", "updated": "2013-12-17T22:06:11.000+0000" }, { "id": "284993", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Allen: i agree completely. PLus it is already doable from the sdk and from plugins! see [there|https://github.com/appcelerator/titanium_mobile/pull/4935]\r\nActionBarSherlock already in my public branch\r\nhttps://github.com/Akylas/titanium_mobile", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-12-18T07:54:19.000+0000", "updated": "2013-12-18T07:54:19.000+0000" }, { "id": "284998", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "So if this process works, why is it not simply thoroughly documented and already a part of 3.2.0?\r\nI admit I'm confused....", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-12-18T09:25:38.000+0000", "updated": "2013-12-18T09:25:38.000+0000" }, { "id": "284999", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Mark: If you read the comments in the PR, you'll see that it is part of the new CLI which allows you add more hooks to the build system. It s pretty early as CLI 3.2.0 is still very young. And sometimes you have to go beyond documentation ;)", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-12-18T09:28:32.000+0000", "updated": "2013-12-18T09:28:32.000+0000" }, { "id": "291042", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "BTW, note the following:\r\nhttps://developers.google.com/cast/docs/android_sender\r\nRequires the appcompat library (Action Bar compatibility) along with other libs\r\nAnd Note: Since the libraries contribute resources, you cannot simply satisfy the dependencies by including their JAR files; instead you need to import them as library projects for your IDE.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-02-04T00:31:26.000+0000", "updated": "2014-02-04T00:31:26.000+0000" }, { "id": "291093", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Mark: you mix up 2 things here. \r\n- introducing libraries which have resources dependencies: ALREADY DOABLE\r\n- adding ActionBarSherlock/ActionBarCompat support: needs Ti support\r\n\r\nIntegrating appcompat to create for example a GoogleCast module is already doable with the latest CLI (sdk >=3.20). Follow the links i posted to see hints on how to do it. It s really easy in fact", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2014-02-04T08:10:43.000+0000", "updated": "2014-02-04T08:10:43.000+0000" }, { "id": "291102", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "Hi Martin,\r\nIf doable then why is this item pushed out to 3.3.0? For docs?\r\nBTW - Google Cast requires appcompat according to Google's docs, so not sure if it is indeed currently possible.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-02-04T10:13:09.000+0000", "updated": "2014-02-04T10:13:09.000+0000" }, { "id": "291115", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "What are you talking about? CLI wasn't pushed out. I don't think there is a doc for CLI though. Remember it's an open source project though ;)\r\n\r\nAnd BTW i just wrote il my last comment that you CAN use appcompat already. The tough point is not related to what you want but to the integration of Actionbarsherlock/ActionBarCompat into Ti\r\n\r\nRead carefully \r\nhttps://github.com/appcelerator/titanium_mobile/pull/4935", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2014-02-04T13:01:23.000+0000", "updated": "2014-02-04T13:01:23.000+0000" }, { "id": "295096", "author": { "name": "jbaquero", "key": "jbaquero", "displayName": "Jose Angel Rufino Baquero", "active": true, "timeZone": "America/Los_Angeles" }, "updateAuthor": { "name": "jbaquero", "key": "jbaquero", "displayName": "Jose Angel Rufino Baquero", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-02-28T18:19:11.000+0000", "updated": "2014-02-28T18:26:18.000+0000" }, { "id": "301046", "author": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "body": "All this requires is a way for developers to specify and package names they would like a R.java to be generated and the CLI honoring the request", "updateAuthor": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-04-15T22:07:45.000+0000", "updated": "2014-04-15T22:07:45.000+0000" }, { "id": "301048", "author": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Pull pending against master\r\nhttps://github.com/appcelerator/titanium_mobile/pull/5611\r\n\r\nTo generate a R.java for a specific package name add the following entry to the manifest file\r\n{code}\r\nrespackage: com.example.mypackage\r\n{code}", "updateAuthor": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-04-15T22:15:47.000+0000", "updated": "2014-04-15T22:35:51.000+0000" }, { "id": "301121", "author": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Testing instructions\nThe test can be performed with any android module\n\nModule build system\nPositive Test - A valid respackageinfo file is generated and zipped along with the module zip.\nTake any android module and add an entry to the manifest as shown above. Build the module (ant dist). Unzip the generated zip file and check to see a file `respackageinfo` exists in the module root(modules/android///respackageinfo). Contents of the file must be the value defined in the manifest.\nNegative Test - Leave the entry out and ensure that the unzipped module root has no file named `respackageinfo`\n\nCLI\nTake any android module that you app is using. Create a `respackageinfo` file in the module root with contents set to a valid package name. Build app for android\nSee the build/android/gen folder. A R.java file must exist at the path specified by the package name.\nCheck the CLI output. The aapt command must include --extra-packages \n\n\n", "updateAuthor": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-04-16T17:42:28.000+0000", "updated": "2014-04-16T17:42:28.000+0000" }, { "id": "301142", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "Awesome - can this be added and explained in the Android module documentation? Thanks!", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-04-16T19:21:28.000+0000", "updated": "2014-04-16T19:21:28.000+0000" }, { "id": "301871", "body": "This issue was previously scheduled to be worked on in more than one sprint:\r\n* 'Release 3.1.2' (on board '3.1.X Triage')\r\n* 'Release 3.3.0' (on board '3.2.X Triage')\r\n\r\nStarting from JIRA Agile 6.3, an issue can only belong to a single future sprint. Read more about this change: http://docs.atlassian.com/agile/docs-0630/Sprint+Marker+Migration\r\n\r\nThis issue is now scheduled for future sprint 'Release 3.1.2' (on board '3.1.X Triage').\r\n\r\nIf this is incorrect, please update the issue accordingly.\r\n\r\nThis comment was automatically generated by JIRA. If it is no longer relevant, please feel free to delete it.", "created": "2014-04-21T15:32:17.000+0000", "updated": "2014-04-21T15:32:17.000+0000" }, { "id": "302150", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "I have tested that PR and i confirm that it works great!\r\nAmazing work.\r\nThe only thing i find quite weird is for the \"respackage\" key to be in the manifest. To me it should be in the build.properties", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2014-04-23T09:23:16.000+0000", "updated": "2014-04-23T09:23:16.000+0000" }, { "id": "302220", "author": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "body": "@[~farfromrefuge]\r\nThe manifest is a property file. The decision to stick it into the manifest instead of build.properties was based on the following criteria\r\n1. We have a built in object that reads in the manifest as a property.\r\n2. This property was more about the packaging of the module rather than the building of it.", "updateAuthor": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-04-23T17:15:36.000+0000", "updated": "2014-04-23T17:15:36.000+0000" }, { "id": "302227", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Visual Duggal\r\nI get the number 1, but no the number 2. In a sense your module \"doesn't\" build as any app that would use it wouldn't build :P\r\n\r\nThanks for taking the time to answer\r\n\r\nAn again great job, it works great.", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2014-04-23T17:34:06.000+0000", "updated": "2014-04-23T17:34:06.000+0000" }, { "id": "304773", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "@Vishal Duggal : I tried the respackage method, and it seems to only work for one library with resources, and projects often require several (e.g. for Chromecast we need Chromecast Companion Library, mediarouter library, Google Play Services, etc.). Can you please check this functionality? Thanks.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-14T10:21:52.000+0000", "updated": "2014-05-14T12:24:24.000+0000" }, { "id": "304778", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "@Martin Guillon: And the CLI hook method won't work either for multiple libs with resources, at least not in the examples I saw. The reason is that the `--extra-packages` parameter can be used just once with aapt, and not per package. You're supposed to separate the package names with `:` following it. The problem then is that you need to specify the resource directories with -S, but aapt will always just use the first one, so this solution doesn't work. Any ideas?", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-14T11:39:23.000+0000", "updated": "2014-05-14T11:39:23.000+0000" }, { "id": "304781", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "respackage only seems to support one for now.\r\nAS for my hook, the implementation of respackage actually broke it. Though it did support as many as you wanted\r\nWe would need to create a new hook for it to work now. I think the best would be to make respackage support multiples res", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2014-05-14T13:16:16.000+0000", "updated": "2014-05-14T13:16:16.000+0000" }, { "id": "304784", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "Both the respackage and hook solutions relied on aapt's -S option to specify the res directory locations. The problem is that aapt just uses the first directory with resources it finds. So after a bit of hacking I got 3 libs to build - but they all had the same R.java file :(\r\nI'm not even sure it works reliably with one library, since I see -S twice on the aapt command line, and that could be dangerous.\r\nI'm not familiar enough with aapt, but the --extra-packages specifying multiple packages, with multiple -S definitions, definitely seems the wrong approach. Perhaps we need to run aapt separately on each external library, specifying only one res directory? \r\nIt's really very frustrating that after all this time, we don't have a solid solution to this issue. I'm really hoping someone steps up and solves this once and for all.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-14T14:17:54.000+0000", "updated": "2014-05-14T14:30:13.000+0000" }, { "id": "304851", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "@Vishal: for the respackageinfo - how do you determine the path to the library's res folder?", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-14T21:16:35.000+0000", "updated": "2014-05-14T21:16:35.000+0000" }, { "id": "304868", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "Here's a hook that should work on 3.3.0, for multiple libraries with resources. Would be nice if Appcelerator can \"sanction\" this so it doesn't break sometime soon with another commit.\r\n\r\n{code}\r\nexports.cliVersion = '>=3.X';\r\n\r\nexports.init = function (logger, config, cli, appc) {\r\n cli.on('build.android.aapt', {\r\n pre: function(data, next) {\r\n var args = data.args[1];\r\n if (args.indexOf('--auto-add-overlay') < 0) {\r\n \targs.push('--auto-add-overlay');\r\n }\r\n \r\n var externalLibraries = [\r\n {\r\n javaClass:'com.google.android.gms',\r\n resPath:'/any/path/to/android-sdk-macosx/extras/google/google_play_services/libproject/google-play-services_lib/res'\r\n },\r\n {\r\n javaClass:'android.support.v7.mediarouter',\r\n resPath:'/some/path/to/android/support/v7/mediarouter/res' \t\r\n }\r\n ];\r\n\r\n\t\t\t// --extra-packages can be defined just once\r\n\t\t\tif (args.indexOf('--extra-packages') < 0) {\r\n\t\t\t\targs.push('--extra-packages');\r\n\t\t\t\targs.push('');\r\n\t\t\t}\r\n\t\t\tvar namespaceIndex = args.indexOf('--extra-packages') + 1;\r\n\t\t\t\r\n\t\t\texternalLibraries.forEach(function(lib) {\r\n\t\t\t\tif (args[namespaceIndex].indexOf(lib.javaClass) < 0){\r\n\t\t\t\t\targs[namespaceIndex].length && (args[namespaceIndex] += ':');\t\r\n\t\t\t\t\targs[namespaceIndex] += lib.javaClass;\r\n\t\t\t\t}\r\n\t\t\t\tif (args.indexOf(lib.resPath) < 0) {\r\n\t\t\t\t\targs.push('-S');\r\n\t\t\t\t\targs.push(lib.resPath);\r\n\t\t\t\t}\r\n\t\t\t});\r\n next(null, data);\r\n }\r\n });\r\n};\r\n\r\n{code}", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-14T21:52:11.000+0000", "updated": "2014-05-14T21:56:31.000+0000" }, { "id": "304874", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "[~mokesmokes] I thankfully do not see the CLI plugin contract changing again anytime soon. :)\r\n\r\nYour hook above looks fine, though it will only work in 3.2.1 and newer. If you care about 3.2.0, then to make it work, you need to change the last line from:\r\n\r\n{code}\r\nnext(null, data);\r\n{code}\r\n\r\nto\r\n\r\n{code}\r\nappc.version.eq(cli.version, '3.2.0') ? next(data) : next(null, data);\r\n{code}\r\n\r\nThe \"build.android.aapt\" was introduced in 3.2.0, so no need to work about pre-3.2.0.\r\n\r\nAlso, it's a good idea to also export an \"id\" and \"version\". I added checks in the CLI so that two versions of the same hook are not loaded which would mostly like cause issues.\r\n\r\n{code}\r\nexports.id = \"com.whatever.myhook\";\r\nexports.version = \"1.0\";\r\n{code}", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2014-05-14T22:20:31.000+0000", "updated": "2014-05-14T22:20:31.000+0000" }, { "id": "304935", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "I still think we need a respackage-like solution since it will be hard to distribute modules and require people to install hooks.\r\nThe respackage should so something similar to the hook. I think the respackage file should look like:\r\n{code}\r\ncom.example.class1, /path/to/his/res\r\ncom.example.class2, /some/other/path/to/res\r\n{code}\r\n\r\nThe classes should be uniquely added to --extra-packages, and as in the hook a -S /some/path if the path is not already included.\r\nThe path names should support both absolute paths which is good for development (e.g. you want to reference a res folder that is updated by the Android SDK Manager), but it should also allow relative path to the module root folder so that we can distribute fully self contained modules.\r\n\r\nFrankly I think the bit in the manifest is superfluous - the respackageinfo is just a text file and can live in the module root, no difference between that and putting these lines manually in the manifest file.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-15T06:20:57.000+0000", "updated": "2014-05-15T06:20:57.000+0000" }, { "id": "304938", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "Oh, and please change the status of this issue to open, pending the issues noted.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-15T06:46:52.000+0000", "updated": "2014-05-15T06:46:52.000+0000" }, { "id": "305400", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Mark: I totally agree on the respackageinfo file. And that s the format to go for i think.\r\nAnd i actually now need multiple ones too :D", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2014-05-17T08:21:07.000+0000", "updated": "2014-05-17T08:21:07.000+0000" }, { "id": "305401", "author": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "@Martin: for now use the hook above, it works for me.", "updateAuthor": { "name": "mokesmokes", "key": "mokesmokes", "displayName": "Mark Mokryn", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2014-05-17T08:30:46.000+0000", "updated": "2014-05-17T08:30:46.000+0000" }, { "id": "305980", "author": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "body": "The current Android module structure only supports a single directory for module resources (/android/platform/android/res). We have created a ticket to add support for multiple resource directories. \r\nPlease track TIMOB-17009. We will try and get it into Release 3.3.1", "updateAuthor": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2014-05-21T20:49:36.000+0000", "updated": "2014-05-21T20:49:36.000+0000" }, { "id": "309421", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified the fix by following the test steps by [~vduggal] & I see a valid respackageinfo file is generated and zipped along with the module zip.\r\n\r\nClosing.\r\n\r\nEnvironment:\r\nAppc Studio : 3.3.0.201406111952\r\nTi SDK : 3.3.0.v20140616174113\r\nMac OSX : 10.8.5\r\nAlloy : 1.4.0-rc\r\nCLI - 3.3.0-rc\r\nCode Processor: 1.1.1", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-06-17T21:29:46.000+0000", "updated": "2014-06-17T21:29:46.000+0000" }, { "id": "376338", "author": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "body": "How to make to work two or more jar library. Both has resources and referenced to it.", "updateAuthor": { "name": "falko", "key": "falko", "displayName": "Andrey Tkachenko", "active": true, "timeZone": "Europe/Moscow" }, "created": "2016-02-09T14:52:15.000+0000", "updated": "2016-02-09T14:52:15.000+0000" }, { "id": "388544", "author": { "name": "Ventis", "key": "ventis", "displayName": "David Vermeir", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Is this respackageinfo solution documented somewhere?", "updateAuthor": { "name": "Ventis", "key": "ventis", "displayName": "David Vermeir", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-06-17T12:46:35.000+0000", "updated": "2016-06-17T12:46:35.000+0000" } ], "maxResults": 59, "total": 59, "startAt": 0 } } }