This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Posts tagged: Android

Xamarin Client (simple PoC)

What is Xamarin?

Read all details here.

It's a company and a really cool platform for mobile application development. It enables you to use one codebase for iOS and Android.

Since 2016, it's more or less free for everyone.

We tried Xamarin some years before 2016 and it wasn't free. So it wasn't an option for us. Not because it's using C# as programming language. We already have mobile clients for JVx applications but they don't share the same codebase. There is one client for Android and another one for iOS. The source code is licensed under Apache 2.0.

Our native clients work great but we think they could be better.

In the last days we made some tests with different tools, to create a new universal client with one technology. A HTML5 client wasn't an option for us because of different criterias. A real native client was important during our evaluation.

Some links to different opinions:

We made good first progress with Xamarin and because of its pricing, it was the winner of our evaluation. Sure, Xamarin is C# but it's better to write C# than JavaScript. Another plus was that we already have a simple JVx connection port to .NET based on C#. So we could reuse this code.

Why not JavaFX?

The problem with JavaFX is, that it's unclear what will happen with JavaFX in the future. There are different articles about the future of JavaFX, but the one from Jonathan Giles makes it clear

Sure, there's Gluon and some other individual developers, but the overall performance isn't relly comparable to native apps. It's awesome what happened in the last years, but the progress is missing.

We still have our JavaFX based UI, but we're not sure if JavaFX will survive or it will be commercialized. So it's better to have an option.

Why not CodenameOne?

It's a really cool technology and works great with some smaller performance glitches (simply try the current KitchenSink from the App stores)..
WORA just works!

The cloud build isn't what we prefer and the pricing is not good for our use-case. Our client should be free, open and easy to use for every developer.

Here is a simple test application for REST access to our Heroes application, used in our Angular test application.

iOS client

iOS client

Android client

Android client

The source code for this test:

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;
using Xamarin.Forms;

namespace TableViewSamples
{
  public class RESTTable : ContentPage
  {
    public RESTTable()
    {
      GetData();
    }

    async void GetData()
    {
      this.Title = "REST Data";
      var table = new TableView() { Intent = TableIntent.Data };
      var root = new TableRoot();
      var section1 = new TableSection() { Title = "First Section" };

      var authData = string.Format("{0}:{1}", "user", "pwd");
      var authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));

      HttpClient client = new HttpClient();
      client.DefaultRequestHeaders.Authorization =
        new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authHeaderValue);
      HttpResponseMessage response = await client.GetAsync("https://...");

      if (response.IsSuccessStatusCode)
      {
          HttpContent content = response.Content;

          var result = await content.ReadAsStringAsync();

          var parsed = JsonConvert.DeserializeObject<List<HEROES>>(result);

          foreach (var record in parsed)
          {
              System.Diagnostics.Debug.WriteLine("Data: {0}", record);

              section1.Add(new TextCell { Text = record.NAME });
          }
      }

      table.Root = root;
      root.Add(section1);

      Content = table;
    }
  }

  public class HEROES
  {
    public int ID { get; set; }
    public string NAME { get; set; }
  }
}

Demo ERP 1.1, iOS & Android App updates

First, we've released version 1.1 of our Demo ERP application. The full source code is available on SourceForge. It doesn't have more features than 1.0 because it's a simple lib upgrade release with improvements for developers.

The DemoERP.zip now contains the whole project structure and not only the source files. Simply unzip the archive, import the project in your Eclipse IDE and start the DemoERP.launch file (sure, DB must be configured manually). The archive contains small README files with additional information.

We fixed code signing problems and you shouldn't have any problems with DemoERP.war. So, simply deploy the war and open http://localhost/DemoERP/web/ui in your browser (see README).

The release contains our latest vaadinUI based on 7.4.5 and our latest JVx.mobile lib. The mobile lib was needed for our updated mobile apps for iOS and Android.

Yepp, we've new apps in the stores (still native but not based on JavaFX). The apps have a buch of new features like custom view styles (based on style property of JVx), image viewer/editor or the new Form view. But the biggest improvement was offline support. It's now possible to switch to offline mode and back to online mode. Sure, we sync your offline data!

It's an awesome feature because it's a generic solution and you don't have to change anything in your application. It simply works!

Both applications have the same features but system specific.
Here's the iOS link.
The Android app via Google Play.

Both apps work great with latest VisionX releases and simply use it to test your VisionX application - LIVE - without redeployments - on your mobile devices!

JVx' JavaFX UI with JavaFXPorts

A few hours ago, we published a screenshot from our Demo ERP application running on Nexus 9 (an Android tablet).
It wasn't a fake!

Before we'll show you more screenshots, we want say that we've reached a long awaited goal!

Use JVx and write an application for all polpular platforms and devices.
This is real "write once run anywhere".

Create an application for Windows, Linux, Mac, iOS, or Android, PS4, OUYA or WiiU. Run it as desktop application, as html5 application in web browsers, as native iOS or Android application or as JavaFX application on Android and iOS devices. There's nothing like JVx in the world - not with only one framework with such a small footprint as JVx and certainly not Open Source!

Here are the screenshots:

Maximized frame with charts

Maximized frame with charts

Frame with tree

Frame with tree

Also in portrait mode:

Portrait mode

Portrait mode


And now a very strange one. It's the application with our styled stage. It's crazy because you can drag the window around (makes no sense, but it just works):

Styled stage with tabset desktop

Styled stage

Sure, the application wasn't optimized for mobile devices. It has the same style as the desktop application. The mobile version should have bigger frame buttons and a bigger frame header :) To be honest - MDI on mobile devices? We were positively surprised about the usability. But, whatever. You have the option and decide what's best for your application (but please don't use MDI for smartphones).

Are you interested in some details?

We've used Netbeans IDE because there's a very useful plugin from gluon. We're Eclipse users but it was easier to use a preconfigured environment without doing everything manually. It was simple to configure Netbeans with gluon plugin and there's a video for your first steps. A "bigger" problem was gradle because the project was a gradle project and we've never used gradle. We love using ant.

We had a bad start with Hello World application because it didn't work. There were different problems: Missing ANDROID_HOME or DEX compiler problems. After reading the documentation it was possible to start compilation. The DEX problem was very strange because we had JVM 1.8 u31 and JVM 1.8 u40 configured in Netbeans, but Netbeans didn't use our configured JVM 1.8 u40. We removed the JVM 1.8 u31 from Netbeans and after that we successfully compiled our Hello World application. Very strange!

The next step was using JVx as library dependency for our project, but how did this work with gradle? We had the library in the libs directory of the project, in the file system. We didn't use a maven lib because it was easier to replace the library after recreation. We tried to find a solution in the official gradle documentation and found Chapter 51. C'mon gradle is a build tool and not a programming language! So much documentation means: complexity. Sure, ant wasn't the holy grale but it it's simple to understand and doesn't hide anything.

Our current gradle script:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.0.0-b7'

    }
}

apply plugin: 'org.javafxports.jfxmobile'

repositories {
    jcenter()
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}

mainClassName = 'com.sibvisions.gluon.JVxGluonApp'
   
jfxmobile {
   
    ios {
        forceLinkClasses = [ 'com.sibvisions.gluon.**.*' ]
    }
   
    android {
      androidSdk = 'C:/tools/android/android-sdk_r04-windows'
      compileSdkVersion = 21  
    }
}

It's short but we ddin't know what happened behind the scenes without additional research. But if it works it's good enough for many developers.

The integration of JVx was simple because JVx was compiled with JVM 1.6. The Dalvik VM or DART do support 1.6 and 1.7 syntax. It was cool to see that JVx and especially the communication worked without problems - Great job from Johan Vos and all people behind JavaFXPorts!

Our next step was the integration of additional dependencies like our JavaFX UI. It was based on JVM 1.8 u40 and heavily used lambdas. But lambda expressions weren't supported from Dalvik or ART. We thought that gluon plugin solves the problem for us, but it didn't. It contains retrolambda but only for project source files and it doesn't touch your dependencies. There was no additional gradle build task for that, so we had to convert the libs manually. Not a problem but you must be aware of it.

After we solved all dependency problems, we had the first version of our desktop ERP running on our android device. But don't think everything was trouble-free. We had problems with method references, Java Preferences because of write problems, new Date API, forEach calls, scene size and much more. We did solve most problems but not all - yet.

ARC Welder - what else :)

Some days ago, ARC Welder popped up in the news. I guess it was Thursday?

What is ARC? (see Getting started with ARC)

The App Runtime for Chrome (Beta), or ARC, lets you run your favorite Android apps on Chrome OS.

and also in your Chrome browser.

It's strange, but a logical consequence.

We tried our native Android client with ARC Welder and it was working without bigger problems:

ARC Welder - JVx Android Client

ARC Welder - JVx Android Client

It wasn't possible to use the integrated MAPS API, maybe a problem of the beta version or our build?

I'm not sure if it's useful to run an android app on a desktop because the app was designed for mobile devices, usually. But as test environment...

But it could be interesting for JavaFX applications which were converted to Android apps? Not really for desktop pcs, but for Chromebooks.
While Applets will be banned from browsers, ARC could be something similar :)

It's still strange but we'll be ready for it.

Toys for our Android dev team

What a great day for our Android dev team. Our new test devices arrived today.

Nexus 5 with KitKat

Nexus 5 with KitKat

 
Nexus 9 with Lollipop

Nexus 9 with Lollipop

We're not sure if the dev team is making progress today :)

The Android Client will be available in Google Play as soon as possible. Currently only the iOS client is available in the App store. The Android client will be available as Preview version and as Pro version, same as the iOS client. The preview client could be used for tests together with VisionX. It will be limited to one screen.

Master Thesis - JVx Mobile und Android

Die Master Thesis von Michael Hofer steht nun öffentlich zur Verfügung. Das Thema war

Design und Implementierung einer Multi-Touch optimierten Android Runtime Umgebung für JVx ERP Applikationen auf Smartphone Devices

Im Zuge seiner Arbeit wurde der JVx.Mobile Server und der Android Client für JVx entwickelt. Das Projekt steht unter der Apache Lizenz 2.0 zur Verfügung.

Die Arbeit ist zugleich eine gute Dokumentation für JVx.mobile und erklärt Designentscheidungen sowie deren Umsetzung.

JVx Android AddOns 0.2

Today, we released version 0.2 of our Android AddOns. The release contains some new features for logging, property handling and list formatting.

Download the new release from here (ChangeLog and javadoc).

Packung! für Android Geräte

Seit heute ist unsere Packung! als mobile App, offiziell im Android Market erhältlich. Natürlich kostenlos!
Der Link für den Market: market://search?q=pname:com.sibvisions.apps.packung

Die App wurde ursprünglich entwickelt um zu zeigen, daß JVx auch unter Android ohne Probleme eingesetzt werden kann. Und das ohne Qualitätsverlust. Die App wurde zu 100% mit den JVx AddOns für Android und JVx selbst erstellt. Es kommen die selben Sourcen wie auch für die RIA zum Einsatz.

Doch mittlerweile ist das Projekt aus den Kinderschuhen entwachsen und zählt zu den Schmuckstücken in unserer Sammlung.

Was ermöglicht die App im Unterschied zur RIA?

Die App ist kein Ersatz für den großen Bruder, aber ein treuer Wegbegleiter. Mit der App ist es möglich, einfach und unkompliziert, von unterwegs seine Tipps abzugeben, mit den Spielergebnissen zu vergleichen und den Highscore einzusehen.

Folgende Screenshots zeigen die Funktionen im Detail:

Login

Login

Die Anmeldung

Mit dem vorhandenen Benutzernamen und Passwort wird die Anmeldung durchgeführt!

Ein neuer Benutzer muss zuerst in der Rich Internet Application registriert werden bevor die mobile Anwendung genutzt werden kann. Durch die Aktivierung der automatischen Anmeldung entfällt die Eingabe von Benutzernamen und Passwort, bei erneutem Start der App bzw. wenn die Verbindung aufgrund eines Kommunikationsfehlers neu geöffnet werden muss.

Über das Menü kann der Server gewechselt werden und die App lässt sich beenden.

Choose Server

Choose Server

Die Server Auswahl

Es kann zwischen den zur Verfügung stehenden Systemen gewählt werden. Der Tournament Server ist das Live System für die WM 2010.

Der Demo Server ist ein System mit dem die Funktionen der RIA und das Zusammenspiel mit der mobilen App, getestet werden kann.

Der Development Server ermöglicht das Debuggen der Applikation und sollte nur von Software Entwicklern eingesetzt werden, die den Source Code der Anwendung zur Verfügung haben.

Categories

Categories

Die Kategorie Auswahl

Das Hauptmenü der App enthält die möglichen Optionen:

  • My Bets

    Unterstützt beim Abgeben der Tipps.

  • History

    Vergleicht die Tipps mit den Ergebnissen und zeigt die Punkte pro Tipp.

  • Statistics

    Aktueller Highscore - Weltweit bzw. der privaten Tippgruppen.

MyBets

MyBets

Tippen

Pro Spieltag stehen die möglichen Spiele zur Verfügung. Das Wunschergebnis kann durch die Selektion des jeweiligen Spieles, eingegeben werden.

Place Bet

Place Bet

Den Tipp eingeben

Den gewünschten Endstand eingeben und bestätigen. Solange die erlaubte Deadline nicht überschritten ist, kann das Ergebnis jederzeit korrigiert werden.

History

History

Die Historie

In der historischen Ansicht wird das Endergebnis (rot) mit dem Tipp verglichen. Zusätzlich werden die Punkte pro Spiel angeführt.

Statistics

Statistics

Highscore

Der Highscore zeigt die aktuellen Platzierungen inklusive des Punktestandes. Sollten private Tippgruppen verwendet werden, sind auch diese sichtbar.

Der eigene Benutzername wird grau hinterlegt um die Übersicht zu bewahren.

User Info

User Info

Die Benutzer Information

Der Benutzername sowie der Anmelde Zeitpunkt werden angezeigt. Mit dem Menü ist der Wechsel zu den Kategorien, die Abmeldung und die Beendigung der App möglich.

JVx Kommunikation im Vergleich

Die in JVx integrierte Kommunikation hätte durchaus potential für ein eigenständiges Open Source Projekt. Wir sind jedoch bemüht die Entwicklung immer so einfach als möglich zu halten. Das bedeutet nicht, daß in JVx alle möglichen Frameworks zusammengeführt werden und somit ein nicht überschaubares "etwas" entsteht, sondern JVx enthält alles was nötig ist um Business Anwendungen in einer 3 Schichten Architektur zu erstellen. Und dazu gehört nun mal eine effiziente Client/Server Kommunikation.

Es gibt natürlich Frameworks für die Kommunikation zwischen Client und Server, wie z.B. Netty. Doch unabhängig von den vielen Möglichkeiten des Frameworks ist die Bibliothek mit knapp 700KB ein großer Brocken (nur für die Kommunikation!). Weiters ist ein Kommunikationsframework alleine noch nicht ausreichend, denn die Objekte müssen zwischen Client und Server auch noch serialisiert bzw. deserialisiert werden.

Für die Serialisierung könnten wiederum vorhandene Frameworks wie z.B.: Google Protocol Buffers oder Hessian eingesetzt werden. Doch die Google Protocol Buffers erfordern die Definition der zu übertragenden Objekte und ist daher für ein generisches Framework wie JVx nicht geeignet. Und Hessian unterstützt leider nicht alle Objekttypen und ist nicht out-of-the-box mit z.B. Android einsatzfähig.

Der in JVx integrierte Kommunikationsmechanismus erlaubt ohne weiteres die Integration von den bisher genannten Frameworks, da weder das Transportprotokoll noch die Serialisierung ausschlaggebend sind für eine Business Anwendung. Außerdem definiert JVx mit Interfaces, was die Kommunikation bieten muss. Üblicherweise ist eine eigene Implementierung durch die Ableitung von AbstractSerializedConnection bzw. die Implementierung von ISerializer rasch durchgeführt.

Mit dem UniversalSerializer wird außerdem eine Lösung bereitgestellt mit der Objekte, zwischen unterschiedlichsten Technologien, ausgetauscht werden können. Und das ohne sich Gedanken über die Konfiguration zu machen bzw. Mappings zu erstellen. Der Einsatz des UniversalSerializer in Verbindung mit Netty ist ebenfalls ohne Probleme möglich, nur um hier auf den flexiblen Einsatz der JVx Kommunikation hinzuweisen!

Die Kommunikation wird im Moment mit Java und .NET erfolgreich eingesetzt. Weiters funktioniert die Kommunikation auch ohne jegliche Anpassung mit Android.

Fundtruhe - APIs

Zum Wochenausklang einige interessante Links für mobile Anwendungen:

  • JSON Serializer

    Ein noch recht junges Projekt für die Objektserialisierung mit JSON.

  • JFXtras

    Im Rahmen des Projektes werden Erweiterungen für Java FX entwickelt. Unter anderem neue Komponenten und Effekte.

  • AiCharts (Kommerziell)

    Eine mächtige Bibliothek für die Erstellung von Charts unter Android.