Categories
News

Stops on My North America Tour

I just got back from Brazil and Costa Rica, which was great. Now I am headed out to different cities in North America (Yes, technical Costa Rica is in North America, but all these cities are north of Latin America). David I and Al Mannarino are also traveling across North America for a total of 27 cities. Here are my city stops:

Minneapolis – Meet and Eat
Wednesday, November 13, 2013 @ 12:00pm-2:00pm
Ruth’s Chris Steakhouse
920 2nd Avenue S #100, Minneapolis, MN
[Register]

St. Louis – Meet and Eat
Thursday, November 14, 2013 @ 12:00pm-2:00pm
Ruth’s Chris Steakhouse
315 Chestnut Street, St. Louis, MO
[Register]

Chicago – Hands on Workshop
Saturday, November 16, 2013 @ 9:30am-3:00pm
Hyatt Regency Woodfield – Schaumburg
1800 East Golf Road, Schaumburg, IL
[Register]

  • Wed, 20-Nov Vancouver, BC 12:00pm 2:00pm PST [Register]
  • Thu, 21-Nov Calgary, AB 12:00pm 2:00pm MST [Register]
  • Tue, 3-Dec Bellevue, WA 12:00pm 2:00pm PST [Register]
  • Tue, 3-Dec Bellevue (User Group), WA 6:00pm 8:00pm PST
  • Wed, 4-Dec Portland, OR 12:00pm 2:00pm PST [Register]
  • Wed, 4-Dec Portland, OR (User Group) 6:30pm 8:30pm PST
  • Thu, 5-Dec Boise, ID (User Group) 7:00pm to 9:00pm MST [Register]

I’m planning to bring my Google Glass and show off Delphi XE5 running on Google Glass too.

Categories
News

Hello Google Glass from Delphi XE5

Google’s new Glass platform is a very revolutionary Android device, but the question I really wanted to know is if I could develop for it with Delphi XE5. Turns out the answer is Yes.

There are actually two different options for developing Glassware: Mirror API and GDK.

The first is the Google Mirror API, which allows you to build services, called Glassware, that interact with Google Glass. It provides this functionality over a cloud-based API and does not require running code on Glass. This is accomplished through a REST and JSON based API. Thanks to the new TRESTClient components in Delphi XE5 this should be easy enough to do.

The GDK on the other hand is the avenue where you build an actual APK that runs on the Google Glass device itself. This gives you the most access to the device, its sensors and features. Turns out this is also easy enough to do with Delphi XE5.

The actual GDK builds on top of the Android SDK. You can develop apps to run on Glass with either the Android SDK or GDK, but the GDK is necessary to take advantage of some of the Glass specific features.

If you run SysCheck on Glass (which takes some effort) you discover it has an ARMv7 PRocessor rev 3 (v71) with Android OS Version 4.0.4 and NEON support. Those meet the main requirements for Delphi XE5 development. So I created a simple Hello World app and ran it.

This first screenshot shows Glass appearing in the Project Manager as a valid target (once the required USB drivers were installed, which was tricky for glass).

HelloGlassProjectManager

Here is a screenshot of the app running on Glass

Delphi XE5 App running on Google Glass

I didn’t hide the status bar, which most Glassware does, and it does nothing other than serve the purpose of showing a Delphi XE5 app running on Google Glass. There were no special settings (other than the dark theme, which is a matter of taste) to make the app run on Glass. It just works.

And lastly a quick selfie of me and Glass, taken through glass.

JimWithGlass

I was hoping it would look more red than orange, but should have known Tangerine would be orange.

Rest assured, there will be more coverage of Delphi and Glass. We are just getting warmed up. This app was not using the GDK (which is still in Beta) but it is an actual Delphi app running on Glass. What an exciting day!

Categories
News

Wireless Android Debugging with Delphi xE5

Previously I blogged about how to connect to an emulator on a remote (or the host) machine. That also works for hardware connected to remote machines. But sometimes you want to work with hardware that isn’t even connected at all. Not to worry, here is how to wirelessly connect and debug with your favorite development tool. One note though, WiFi slower than a USB connection, so you will see a little delay sometimes.

Requirements:

  • A machine (Mac or PC) you can connect the Android device to that has ADB (Android Debug Bridge) installed. This is part of the Android SDK. As well as necessary ADB USB Drivers (required on Windows). This can be your development machine, or another machine.
  • A non-segmented wireless network that both your development machine and Android device are connected. (Segmenting prevents two connected devices from connecting to each other).

These commands work with ADB (Android Debug Bridge). It is easiest if you add it to your path. By default it is found in the following location, but you can install it anywhere on your system (Select the “Use An Existing IDE” option when downloading).

C:\Users\Public\Documents\RAD Studio\12.0\PlatformSDKs\adt-bundle-windows-x86-20130522\sdk\platform-tools

First you need to connect your Android device to any computer. With USB debugging turned on, verify you have access to the device via ADB with the following command:

Command:

adb devices

Output:

List of devices attached 
8605fa72        device

If the list is empty, then you need to enable USB debugging and make sure you have the USB ADB Bridge driver for your device installed.

Once ADB is setup, you can get the IP address with the following command:

adb shell netcfg|grep wlan0

Which should give you output like:

wlan0  UP     10.20.5.88/24  0x00001043 2a:32:11:42:aa:3c

Then put the device in TCPIP mode with the command:

adb kill-server
adb tcpip 5555

Then on your machine that is running Delphi XE5 go to the command window and type (with the IP address from above):

adb connect 10.20.5.88

Then you can verify it worked from that same command prompt

Command:

adb devices

Output:

List of devices attached
10.20.5.88:5555   device

And now you can connect to that device wirelessly from Delphi. Like I mentioned before, this is slower, so expect some delays on deploy and responding to breakpoints.

There is some more information on Stack Overflow, including some different options if you have a rooted Android device.

Categories
News

Fun with external Java libraries on XE5 by Paul Foster

Paul Foster shared his experiences working with External Java libraries on Android with XE5 on Google+. Here is a PDF he put together for you to download.

Categories
News

Delphi XE5 Android “Uses Permissions”

The permissions required by a Delphi XE5 Android application are defined through the Uses Permissions dialog. It is found under Project -> Options… [Shift+Ctrl+F11].

 

RAD Studio XE5 Android "Uses Permissions" Dialog

If you select other Targets besides Android then the list is blank, for now. By default the following common permissions are selected. If you do not select a permission then any calls you make that require that permission will fail. The “Internet” permission is required for any network access, even your local network.

If you scroll down the list you will see an Advanced node which contains permissions that are less commonly used permissions. For many apps you will never need to change these permissions, but your users may notice the “services that can cost money” warning next to Call phone and Internet permission request, so you may want to remove those.

The requested permissions are automatically added to the AndroidManifest.xml file, which is read by the Android operating system and Google Play store to know which permissions your app requested.

Categories
News

Android Fragmentation

Fragmentation is the term used to describe all the variations available on the Android platform. Android has many manufacturers and models, unlike iOS where there is only one manufacturer, and they only have 3 (or 4) different models: iPhone, iPod, iPad (and iPad Mini).

The Android Dashboard is a great resource for tracking the adoption of different versions of the Android OS. It is updated monthly and also covers screen sizes and densities and Open GL versions.

Android version pie chart

Another great resource is OpenSignal fragmentation report. It shows market share by model and manufacturer, as well as some different ways of looking at the information in the Android Dashboard, as well as screen size. It appears to be updated annually.

Android Brand Fragmentation

I didn’t realize Samsung had almost 50% of the Android market, and I expected HTC to have a larger share. No wonder Apple feels threatened by Samsung. Noticeably missing from their list is any Amazon Kindles or Barns and Noble Nooks. That could be because they do not access the Google Play Store by default. I didn’t see the method of data collection.

Fragmentation is a bit of a headache for the app developer because there are so many different variations to take into consideration. The flip side though, is the flexibility of Android has really lead to its mass adoption. It works in both the ultra high-end luxury devices as well as the low-end economy devices. So while it is difficult to get an app that works on all devices, you still have a lot of possibilities to choose from.

Categories
News

SysCheck for XE5 Compatibility

Screen Shot 2013-09-21 at 12.10.53 AMWant to know if your Android device is compatible with XE5? Well you can check out the compatibility lists, or download SysCheck by Christopher Moeller.

When you run it the first line tells you if you have an ARMv7, second line is Android OS version, and 3rd line is if you have NEON instruction support. Those are the dependencies of Delphi XE5 on Android. The rest of the lines are extra details for your information.

When you run it your output should look something like the following. If  those three lines check out then your device is ready for Delphi XE5 development.

SysCheck

Categories
News

Delphi XE5 Android Device Compatibility

Unlike iOS, there are are a huge variety of Android devices. Delphi XE5 supports the large majority of those devices. The official page for Android Devices Supported for Application Development spells out the requirements of Gingerbread, Ice Cream Sandwich or Jelly Bean on an ARMv7 processor (with NEON instructions). The NEON instruction requirement excludes the TEGRA 2 processor which was apparently popular in some tablets (mostly) a few years back. Also excluded is the Intel Atom processor, which I hear is showing up in Android devices in Japan.

If you look at the Android Dashboard we see those versions of Android make up 87.5% of the Android devices accessing the Android store. What that doesn’t tell us is how many of those devices have ARMv7 with NEON instructions. The DocWiki page also includes a number of devices that were tested for various functions, but really in the grand scope of possible Android devices it is a rather small sample.

Android versions pie chart

So I had the idea of using Apkudo. They provide an online service where you upload your Android app APK and they run it on a wide variety of devices and tell you how it did. Currently I’ve only done a “hello world” type app test, but it gives a good guide for devices that support XE5 at a minimum level.

They have 118 devices that run Android 2.3.3 (Gingerbread) or better (no Honeycomb). Our of those devices, my APK failed to install on 10 devices. Looking at the log it either timed out, or was out of storage space, so that may be more related to the state of the device before the test than any issues with the actual app.  Out of the 108 devices that loaded and ran the app, it only failed (ANR = Application Not Responding) on 3.

  • Devices tested: 118
  • Failed to install: 10
  • Locked up: 3
  • Successfully ran: 105
  • Success rate: 89%

From what I hear it isn’t uncommon for an app to fail for no reason on some of these devices, due to other influences (like no storage space). So that rate may actually be higherI’ve shared the full spreadsheet report here for you to look for your favorite devices. (They don’t provided a download of the report, so I had to transcribe it to the spreadsheet. There may be typos.)

I plan to modify some of our existing test apps and upload them. Since the test system just uses monkey it isn’t guaranteed to actually perform the specific actions of the test apps, so I need to automate that part of the app. When I do I will update that spreadsheet and provide an updated post.

I’m sure some people will point out that you could use Java and reached more devices. Instead of focusing on the small percentage of Android devices you are missing with Delphi XE5, I’d instead invite you to consider the millions of iOS devices you can target from the same code base. Including iOS 7!

You can get started now by downloading the Delphi XE5 trial.

Categories
News

Delphi XE5 Mobile REST Client Demo Source

With the release of Delphi XE5 I’ve made the source of the Mobile REST Client Demo available. This is a really super simple demo of the Mobile REST Client in XE5. It is designed to show up how you can consume a JSON REST Service and adapt it into a DataSet and then bind that to the UI. If you change the data source you will probably need to change the live binding.

I’ve changed the demo from the one I used in the video to consume an OData data source. OData is a new standard backed by Microsoft for sharing data over the web. You can think of it as SQL for the web. It is a combination of other technologies, including REST, AtomPub, and JSON. Sybase supports OData on all of their databases now, as does Microsoft and others.

The change was simply a matter of pointing it to the Northwind OData endpoint provided on Odata.org. The binding is setup to show the company name in the listview. I added the ability to specify a Root Element, but that isn’t necessary for the demo.

This new technology works in both desktop and mobile, FireMonkey and VCL. It should also work in C++ Builder.

[Download the demo] (MobileRestXE5.7z 8 KB – Requires Delphi XE5 – Builds for iOS, Android or Win32)

Categories
News

Debugging Against a Remote Android Emulator

The Android emulator is impossibly slow when running inside a virtual machine. It is possible to debug against a remote emulator via SSH. Here are the steps to connect from a Windows guest OS to an OS X host OS (they can be easily adapted for a Windows host). It does require installing the Android SDK on the host OS and creating and running an emulator there. It seems to work even if you have a device connected too. I’ve gotten them both to show up in the IDE and am able to pick between them and deploy and run on the emulator.  The Emulator is still slower than hardware, but this makes it usable.

Of note, this emulator performance isn’t an issue with Delphi, but is an issue with the Android emulator. So you may find this tip useful with other Android development tools as well.

This could be adapted to debug against a remote Android Emulator running on a remote machine located anywhere on the internet. Just requires port 22 to be open between the two machines.

Thanks to hheimbuerger for the the Stack Overflow answer that got me pointed in the right direction. This information has been adapted to the DocWiki too with additional links to more information.

  1. Install the Android SDK (not the ADT bundle) on your Mac OS X host & start an ARM based emulator (With use Host GPU enabled)
  2. Enable SSH on the host
    • On a Mac OS X Host go to System Preferences -> Sharing -> Remote Login
    • On a Windows host, you need to install a 3rd party SSH host. FreeSSHd has been found to work.
  3. Install the PuTTY SSH (putty.exe) client on the Windows Guest OS
  4. Ensure port 22 is open between the Windows guest OS and the Mac OS X host.
  5. Create a connection in PuTTY to the Host OS
    1. You will most likely use the 192.168.x.x IP address of the host
    2. Go to Connection -> SSH -> Tunnels and add a local/auto port forwarding for 5555 to locahost:5555 and 5554 to localhost:5554.
  6. Save and Open the connection in PuTTY
  7. Provide the login credentials for the Mac OS X host – anything typed in this window is executed on the remote machine
  8. You can check or change the tunnel settings via the icon in the upper left of the PuTTY window
  9. Minimize PuTTY (keep it open to maintain the SSH connection)
  10. Open a new command window in the Windows guest OS and type “adb kill-server & adb devices” and you should see the emulator-5554 as a listed device.
  11. Refresh target devices in Delphi and it should appear

PuTTY Tunnels

This should work for any emulators or devices connected to the remote machine. Unlike emulators that are local, you need to start the emulators before Delphi will see them. You may need to adjust the tunnel port numbers if you are connecting multiple devices.

Good luck, and happy debugging!