{"id":1670,"date":"2013-09-19T11:32:59","date_gmt":"2013-09-18T23:32:59","guid":{"rendered":"https:\/\/www.deltics.co.nz\/blog\/?p=1670"},"modified":"2013-09-19T18:50:35","modified_gmt":"2013-09-19T06:50:35","slug":"first-impressions-of-xe5-for-android","status":"publish","type":"post","link":"https:\/\/www.deltics.co.nz\/blog\/posts\/1670\/","title":{"rendered":"First Impressions Of XE5 for Android"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\">8<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span><p>I thought I should at least take a look at the amazing Android support in XE5 so I decided to work through the tutorial that was brought to my attention recently. The first order of business of course, is getting installed.<\/p>\n<p><!--more--><\/p>\n<p>After making a cup of tea, reading a book, doing some housework and making a start on Part 4 of my series of Oxygene for Android camera articles while XE5 installed (<strong>not<\/strong> an exaggeration), the first order of business was sorting out the botched install.<\/p>\n<p>This might have been caused by the fact that during the installation I opted to use my existing installation of the <strong>Android SDK<\/strong> and only install the NDK, which I didn&#8217;t already have (I&#8217;ve not needed it for Android development, until now). The installer explicitly gave me this option, and it seemed to make sense since my SDK install was working perfectly well for me. But upon completion of the install neither of the paths to the SDK or the NDK were configured in the Delphi IDE.<\/p>\n<p>I might have expected the SDK folder to be missing, since I didn&#8217;t ask the installer to, well, install it. But the NDK <em>was<\/em> installed by the XE5 installer so this really should have been setup for me, no?<\/p>\n<p>Given that things were already clearly not going to work &#8220;out of the box&#8221; I decided to take the opportunity to have my NDK setup consistent with my SDK and moved the installed folder to sit alongside the existing SDK.<br \/>\n<strong><br \/>\n\\\\psf\\home\\GoogleDrive\\android-sdk<br \/>\n\\\\psf\\home\\GoogleDrive\\android-ndk<br \/>\n<\/strong><\/p>\n<p>After specifying these base SDK and NDK paths things still weren&#8217;t quite settled. The configuration wizard then complained about the platforms folder (one of the plethora of sub-paths that need to be set for some reason), which I had to manually correct.  No biggy.<\/p>\n<p>At last the IDE seemed happy.<\/p>\n<h3>Try&#8230; Finally<\/h3>\n<p>Before jumping in to the tutorial itself, I thought I would try and get an answer to one of the questions that have been steadfastly ignored: <strong>Where and how to set permissions and hardware feature dependencies<\/strong>.<\/p>\n<p>I found that application permissions are set in <strong>Project Options<\/strong> and the reason they aren&#8217;t mentioned in the tutorial is that the ones required by that tutorial (and more!) are all <strong>on by default<\/strong>. Which is great if you are writing an app that needs coarse and fine location, to use the camera, read phone state, read and write to the calendar (!?) and read and write storage. If not, you&#8217;ll have to remember to turn these <em>off<\/em> to avoid potential customers wondering why your app needs these things when it clearly doesn&#8217;t.<\/p>\n<p>There are pages and pages of permissions to wade through, checking the state of individual checkboxes on each one. There is no concise summary of the permissions you have enabled, just this productivity killing checkbox list overkill of which the Delphi IDE developers seem to have become so enamored in recent releases.<\/p>\n<p>I don&#8217;t know whether this checkbox list is platform independent or whether changes to permissions in one platform are automatically applied to the corresponding permissions on other target platforms as  he permissions list for the iOS platform was entirely empty, presumably because I had not yet setup an iOS environment for XE5. <\/p>\n<p>Project Options relating to dependency on hardware features do not seem to exist.<\/p>\n<p>Looking for the file I knew was involved (the <strong>AndroidManifest<\/strong>) I found one in the build output folder of my project. I deduced that editing this file is no good since it is overwritten by the build process.<\/p>\n<p>Then I noticed the <strong>AndroidManifest-template<\/strong> file in the project folder. It&#8217;s not listed in the Project Explorer that I could see. But having stumbled across it I divined that I could edit this file to add a hardware dependency which then found it&#8217;s way into the <strong>AndroidManifest<\/strong> XML as part of the build process.<\/p>\n<p>This was almost identical to the process required in Oxygene except with Oxygene you are simply directly editing the Manifest, not a template fed into a build process.  And with Delphi there is no code completion support when editing the template file, perhaps in part because the formatting required for the template results in it not being valid XML. But whatever the reason, the &#8220;high productivity&#8221; support in this IDE are not to be found in this area and far from being an improvement over Oxygene, or other development tools, it&#8217;s not even as good as any half decent XML editor would provide (being an invalid XML file, even using a proper XML editor wouldn&#8217;t have helped I don&#8217;t think).<\/p>\n<p>But, I have all the permissions I need (and some that I don&#8217;t) so it&#8217;s time to build this amazing app.<\/p>\n<p>Ah. Problem.<\/p>\n<p>Trying to build succeeded only in getting a cacophony of complaints from the linker:<\/p>\n<figure id=\"attachment_1663\" aria-describedby=\"caption-attachment-1663\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.09.20-.png?ssl=1\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-1663\" alt=\"OK!  I GET IT!\" src=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.09.20-.png?resize=300%2C151&#038;ssl=1\" width=\"300\" height=\"151\" srcset=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.09.20-.png?resize=300%2C151&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.09.20-.png?resize=1024%2C518&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.09.20-.png?resize=500%2C253&amp;ssl=1 500w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.09.20-.png?w=1692&amp;ssl=1 1692w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.09.20-.png?w=1280&amp;ssl=1 1280w\" sizes=\"(max-width: 300px) 100vw, 300px\" data-recalc-dims=\"1\" \/><\/a><figcaption id=\"caption-attachment-1663\" class=\"wp-caption-text\">OK! I GET IT!<\/figcaption><\/figure>\n<p>This all seems to start with a file that cannot be found, specifically:<\/p>\n<p><strong>\\\\psf\\home\\GoogleDrive\\android-ndk\\platforms\\android-14\\arch-arm\\usr\\lib\\crtend_so.o<\/strong><\/p>\n<p>Which is very odd, because it is quite plainly where it should be:<\/p>\n<figure id=\"attachment_1664\" aria-describedby=\"caption-attachment-1664\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.03.00-.png?ssl=1\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-1664\" alt=\"Peek-a-boo\" src=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.03.00-.png?resize=300%2C70&#038;ssl=1\" width=\"300\" height=\"70\" srcset=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.03.00-.png?resize=300%2C70&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.03.00-.png?resize=500%2C118&amp;ssl=1 500w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-18-at-22.03.00-.png?w=948&amp;ssl=1 948w\" sizes=\"(max-width: 300px) 100vw, 300px\" data-recalc-dims=\"1\" \/><\/a><figcaption id=\"caption-attachment-1664\" class=\"wp-caption-text\">Peek-a-boo<\/figcaption><\/figure>\n<p>From a bit of Googling I gather that this appears to have been quite a common problem at least with older revisions of the NDK, though none of the proposed solutions made much sense since none of them related to the Delphi use of the NDK &#8211; obviously. The ones that <strong>did<\/strong> make sense didn&#8217;t help.<\/p>\n<p>However, the issue in my case was quite simple.<\/p>\n<p><strong>Delphi doesn&#8217;t appear to support UNC paths for SDK\/NDK locations<\/strong>.<\/p>\n<h3>Don&#8217;t Use UNC Path For SDK\/NDK Locations<\/h3>\n<p>The UNC path in this case allows me to conveniently share an installation of the SDK\/NDK maintained on my host Mac between all my VM&#8217;s (and, by virtue of using a cloud synced folder &#8211; in this case Google Drive &#8211; also shared with other synced computers)<\/p>\n<p>But using a UNC path in Delphi doesn&#8217;t work.<\/p>\n<p>I found this only by trial and error. Oxygene must have some more sophisticated file handling technology not available to the Embarcadero developers because this causes no problem for that tool.  Perhaps some important information about not using UNC paths was in the &#8220;Getting Started for Android&#8221; video presented on the Delphi XE5 start page ?<\/p>\n<p>At this point I didn&#8217;t know since the IDE provided no way for me to view that video due to the lack of Flash or HTML5 video support in the embedded browser.<\/p>\n<figure id=\"attachment_1671\" aria-describedby=\"caption-attachment-1671\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-19-at-09.15.40.png?ssl=1\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-1671\" alt=\"Computer says &quot;No&quot;\" src=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-19-at-09.15.40.png?resize=300%2C171&#038;ssl=1\" width=\"300\" height=\"171\" srcset=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-19-at-09.15.40.png?resize=300%2C171&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-19-at-09.15.40.png?resize=500%2C285&amp;ssl=1 500w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-09-19-at-09.15.40.png?w=765&amp;ssl=1 765w\" sizes=\"(max-width: 300px) 100vw, 300px\" data-recalc-dims=\"1\" \/><\/a><figcaption id=\"caption-attachment-1671\" class=\"wp-caption-text\">Computer says &#8220;No&#8221;<\/figcaption><\/figure>\n<p>I do all my web browsing on the Mac host so I don&#8217;t bother maintaining an up-to-date browser in my VM that I don&#8217;t need.<\/p>\n<p>Wouldn&#8217;t it be a good idea to provide an accessible link to the video in question to cover this sort of situation ? Then users wouldn&#8217;t have had to go digging through the HTML source for the start page to find it. But go digging I did and found the link to the youtube video. Luckily my internet connection was up, so I was able to watch the video but it turns out that there was no mention of UNC path problems anyway. Hey ho.<\/p>\n<p>It was indeed fortunate that my intuited solution turned out to be correct or this could have taken up more time than it already had.<\/p>\n<p>Although the UNC path is convenient since it is certain to be the same in all my VM&#8217;s, each VM also has a drive mapped to the <strong>\\\\psf\\home<\/strong> volume so I just changed the paths to use the drive mapped path appropriate for this VM and the problem was solved.<\/p>\n<p>I could build.<\/p>\n<p>But I couldn&#8217;t <strong>run<\/strong> of course, since FireMonkey isn&#8217;t supported on my device and I had better things to do than deal with the <a href=\"http:\/\/delphi.org\/2013\/09\/debugging-against-a-remote-android-emulator\/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+DelphiDotOrg+(Delphi.org)\">cumbersome emulator support<\/a>.<\/p>\n<p>It&#8217;s so much easier when you can use an Android development tool with all Android resources natively, such as debugging in an x86 VM or running on any Android device that meets the needs of your application without the demands of a hefty runtime to also support.<\/p>\n<p>It makes developing apps so much <em>faster<\/em>.  \ud83d\ude09<\/p>\n<p>For me though, this was the practical end of my first look at Delphi for Android.<\/p>\n<p>I was able to obtain one further interesting fact at this point however.<\/p>\n<h3><strong>HOW<\/strong> Big ?!<\/h3>\n<p>Another question that has been determinedly ignored is that of the size of the executables produced by Delphi for mobile devices.  For Android at least I can now find this out for myself.<\/p>\n<p>An &#8220;Empty App&#8221; project in Delphi XE5 compiles to a debug build of an SO file that is <strong>48 MB<\/strong> in size. <del>The Java stub that is wrapped around this to form the APK &#8220;envelope&#8221; might add a little more.<\/del><\/p>\n<p>Update: Having now set up an emulator and deployed a debug build to that, I find that far from growing, the actual APK seems to shrink and on the (emulated) device is reported as <strong>24.4 MB<\/strong>.<\/p>\n<p>You might want to go back and read that again. It&#8217;s not a typo.  <strong>24.4 MEGABYTES<\/strong><\/p>\n<p>For what is <em>not even<\/em> a <strong>Hello World<\/strong> app.<\/p>\n<p>By contrast the debug build of my camera app in Oxygene compiles to an apk of a whopping <strong>48 KB<\/strong>. That also is not a typo:  <strong>48 KILOBYTES<\/strong>.<\/p>\n<p>An app that does something useful which is 3 orders of magnitude smaller than an app that does <em>literally nothing<\/em>.<\/p>\n<p>Does anyone else remember when Delphi could hold it&#8217;s head up high and rightly claim that it had no runtime dependencies other than the OS itself ?  VBRUNx00.DLL was a source of great amusement.  With FireMonkey not only is there a whopping great runtime engine, but you aren&#8217;t even able to share it (the standby defence of the beleaguered VB developer back in the day) between multiple FireMonkey applications on the same device.<\/p>\n<p>Every FireMonkey app essentially comes with an embedded <strong>FMRUNx00.DLL<\/strong><\/p>\n<p>Oh how the mighty are fallen.<\/p>\n<h3>Size <strong>DOES<\/strong> Matter<\/h3>\n<p>Although time has marched on and such file sizes are not really significant for desktop applications, in the mobile device world size <strong>is<\/strong> important.<\/p>\n<p>Both Google and Apple stores have limits on maximum executable file size.<\/p>\n<p>In the case of Google you are limited to 50MB plus additional download packages which can be up to 4GB.  But your executable must be under the 50MB limit.<\/p>\n<p>In the case of Apple, your application executable is limited to 60 MB.  In addition, if it is over 50MB users\/customers will only be able to download it over wi-fi.  If they are on a mobile data connection and your app is bigger than 50MB they are likely to just choose someone else&#8217;s, smaller app.<\/p>\n<p>Of course, <strong>24 MB<\/strong> is the debug build.  A release build is smaller.  <del>Much smaller.<\/del>  The unsigned APK is <del>just<\/del> still <strong>21.49 MB<\/strong> in size.  <del>So only <em>2 orders of magnitude<\/em> bigger than the debug build of a functioning camera app.<\/del><\/p>\n<p><strong>21.49 MB<\/strong> <del>5 MB<\/del> for an app that doesn&#8217;t do anything is perhaps a bit better, but how quickly does that grow as you add capability ?<\/p>\n<p><strong>Update:<\/strong> <em>There is clearly something odd going on.  Since I posed my original findings, based on looking at build products, I received comments suggesting different figures.  I repeated my simple builds, deploying the resulting APK&#8217;s to an emulated device and found starkly different sizes were reported by the emulated device than the size of the build products would have suggested.  The debug build was half the size, but the release build was now not much smaller than the debug build.  I am also told that others have started to voice concerns about application size in the Embarcadero forums, so there is an issue.  Reliably quantifying it is proving elusive.  Which is itself something of an issue.<\/em><\/p>\n<p><em>In the meantime, this makes the size of an actual, released app, as reported by the Google Play store perhaps our only reliable indicator so far. <\/em><\/p>\n<p>The <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.embarcadero.iWD\">iWD app that Embarcadero are showing off in the Play store<\/a> initially weighed in at <strong>10 MB<\/strong>.  After a handful of bug fixes and tweaks it has now grown to <strong><em>12<\/em> MB<\/strong>.<\/p>\n<p>Store app size limits are increased from time to time, but not very often and not &#8211; historically &#8211; by much.  Only time will tell whether FireMonkey apps will reach a level of functionality where their size becomes problematic in this respect.<\/p>\n<p>But that is only one factor.  Another is that some devices have limited storage <a href=\"http:\/\/www.htc.com\/www\/smartphones\/htc-one\/\">which cannot be expanded<\/a>.  <a href=\"http:\/\/www.apple.com\/nz\/iphone\/\">Some of them are even quite popular<\/a>.  I know, shocking isn&#8217;t it ?<\/p>\n<p>Another is that if you are hoping to win impulse customers purchasing your app, even only <em>relatively <\/em>hefty downloads is a potential obstacle.<\/p>\n<h3>First Impressions<\/h3>\n<p>First impressions last, as they say.<\/p>\n<p>This has to be one of the worst first impressions experiences with Delphi since&#8230; well&#8230; ever.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\">8<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span> I thought I should at least take a look at the amazing Android support in XE5 so I decided to work through the tutorial that was brought to my attention recently. The first order of business of course, is getting installed.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":[]},"categories":[212,4],"tags":[153,292,219,208],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1TKYv-qW","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1452,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1452\/","url_meta":{"origin":1670,"position":0},"title":"XE5 News: Coming in September, With Android Support","date":"09 Aug 2013","format":false,"excerpt":"The word is out. XE5 will be coming this September, as described in the announcement of a tour of Russia to promote the new release. Translation: Dear developers! Traditionally, in September we are launching a new version of RAD Studio, this year has been for us an exception, as we\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1601,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1601\/","url_meta":{"origin":1670,"position":1},"title":"iOS 6.x Now Required By FireMonkey in XE5","date":"14 Sep 2013","format":false,"excerpt":"In XE4 FireMonkey supported iOS 5.1. According to the platform requirements for XE5 this has now increased to iOS 6. This something to be aware of. Even if your application could run on older, simpler devices, the FireMonkey runtime has demands of it's own, over and above those of any\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1554,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1554\/","url_meta":{"origin":1670,"position":2},"title":"Not so Special Upgrade Pricing for XE5","date":"12 Sep 2013","format":false,"excerpt":"XE5 is officially out today, and the online store now has pricing for the new release. Being a scant 6 months since XE4 was released, with a $49 special upgrade price for XE3 Pro customers, I looked to see what special price might be on offer for XE5. $499 is\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1713,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1713\/","url_meta":{"origin":1670,"position":3},"title":"How to Call Java Code from an Oxygene Android Application","date":"20 Sep 2013","format":false,"excerpt":"Lachlan just posted a link to a post on Google+ (also available as a PDF) demonstrating how to call Java from Delphi XE5. I was shocked at both the amount and the nature of the code involved. It is long, convoluted and ugly stuff (nb. that isn't a criticism of\u2026","rel":"","context":"In &quot;Android&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1525,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1525\/","url_meta":{"origin":1670,"position":4},"title":"RAD Studio in Auckland \/ Android in a VM \/ Touchy Feely","date":"30 Aug 2013","format":false,"excerpt":"Well, not really RAD Studio as such, more like Mobile Studio (whether as part of RAD Studio Ent+ or the Mobile Add-On) since everything shown was oriented around the Android support and emphasising the fact that an application written for iOS can simply be recompiled and will run on Android.\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"Androidx86","src":"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Androidx86-1024x608.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1974,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1974\/","url_meta":{"origin":1670,"position":5},"title":"Improved Quality in Delphi &#8211; Yeah Right","date":"28 Oct 2013","format":false,"excerpt":"Here in Aotearoa there is a beer company called \"Tui\", named in turn for a native bird. As well as a series of TV ads voiced by the great Tom Baker, Tui are famous here for their \"Yeah, right!\" billboard ads. I felt compelled to make one for Delphi. I\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/tui.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/1670"}],"collection":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/comments?post=1670"}],"version-history":[{"count":21,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/1670\/revisions"}],"predecessor-version":[{"id":1696,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/1670\/revisions\/1696"}],"wp:attachment":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/media?parent=1670"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/categories?post=1670"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/tags?post=1670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}