Xamarin, Android aab, comment déployer ?

Vous venez de migrer votre projet Xamarin en AndroidX et vous venez d’activer la construction avec un format de paquet Android aab afin de suivre les préconisations de Google.

Build Android et aab

Comment tester votre paquet directement sur votre téléphone sans avoir besoin de l’envoyer sur le Play Store ?

Google fourni un petit programme en ligne de commande qui va vous permettre de reconstruire un apk depuis ce fichier aab.
Pour l’installer, passez par Homebrew avec la commande

brew install bundletool

Lancez ensuite la ligne de commande suivante : l’option --mode=universal est très importante afin d’obtenir un paquet apk installable. Sans cette option, bundletool va générer une multitude d’apks qui ne pourront être installés.

bundletool build-apks --bundle=./com.appmobile.monapp.aab --output=./release/monapp.apks --mode=universal

  • com.appmobile.monapp.aab est le fichier aab généré par Xamarin
  • ./release/monapp.apks est la destination du fichier transformé

Prenez ensuite le fichier monapp.apks et renommer le en .zip afin de l’ouvrir.

Et voilà à l’intérieur de ce fichier (si vous avez bien fait attention de mettre l’option –mode=universal , vous avez

  • un fichier toc.pb
  • un fichier universal.apk que vous pouvez maintenant déployer sur votre smartphone Android.

Convertir des fichiers de traductions Android vers Resw ou Resx

Capture d’écran du site WTI Converter

Les fichiers de traductions sont propres à chaque plateforme. Il existe des prémices de standards mais ceux-ci ne sont pas encore respectés sur les différentes plateformes.

Jusqu’il y a encore quelques mois, Android studio ne pouvait supporter que les fichiers de ressources Android (fichiers XML spécifiques).

L’idée est de réutiliser ces fichiers déjà existant dans une application Windows où Windows Phone.

Il existe fort heureusement un site de conversion en ligne qui réalise tout cela très bien !

Capture d'écran du site WTI Converter

http://converter.webtranslateit.com/

Il suffit de lui donner le fichier en entrée et de choisir le format Microsoft resx, resw.

Pour obtenir un fichier resw, il faudra simplement le renommer comme expliqué dans cet article.

A noter qu’il est également possible de générer du XLIF qui s’impose de plus en plus comme le standard de localisation.

 

Image depuis HTTP avec C# XAML – Comparatifs et Performances – Partie 2

Introduction

 wp_ss_20141223_0001

Cet article traite des résultats des différentes méthodes pour lire une image provenant d’un site Http.

Les différentes implémentations ont été décrites dans l’article

Image depuis http avec C# Xaml – comparatifs et performances.

Mesures

L’image étalon fait 19ko et mesure 400×240 pixels. Elle est présente notamment sur les serveurs de Bing à l’adresse suivante :

http://www.bing.com/az/hprichbg/rb/ChristmasMarketNurnberg_FR-FR11351563819_1280x768.JPG

Le premier test va charger 10 fois la même image suivante :

Poursuivre la lecture

Image depuis HTTP avec C# XAML – Comparatifs et Performances – Partie 1

Introduction

Chargement Bitmap Image en Http

Voici un article en 2 parties pour décrire les différentes implémentations possibles de la lecture d’images provenant d’un serveur en Http.
En terme de performances, il existe des différences assez conséquentes suivant les implémentations choisies.

Nous allons voir que parfois les résultats sont assez surprenants.

Charger une image depuis XAML

Le moyen le plus simple pour charger une image reste l’implémentation XAML.

<Image Source="{Binding ImageUrl}" Width="400" Height="240"/>

ImageUrl est de type Url et peut être déclarée de cette façon dans le viewModel associé à la Page.

public  Uri ImageUrl
{
    get
    {
        return new Uri(@"http://www.bing.com/az/hprichbg/rb/SnowyCP_FR-FR11972876588_400x240.jpg");
    }
}

Cette implémentation est très efficace, le contrôle XAML gère quasiment tout pour vous :

  • le chargement en asynchrone : Ne fige pas l’affichage de l’interface lors du chargement
  • la mise en cache mémoire (un seul chargement)
  • L’optimisation http (évite un échange serveur si l’image est déjà chargée)

Cependant l’image chargée en XAML sera de nouveau rechargée à chaque lancement de l’application.
Afin de mettre en place un système de cache persisté, il est nécessaire de charger le contenu de l’image et de la sauvegarder sur le téléphone dans l’Isolated Storage.

Quelles sont les méthodes possibles pour charger et afficher une image en asynchrone ?

Voici 9 façons de faire en Universal Apps (Windows Phone XAML ou Windows 8.1). Leurs temps de réponse seront mesurés sur Windows Phone 8.1 et exposés dans la 2ème partie de cet article.

Implémentations

 

1 – DataWriter

La première implémentation, la plus classique, est d’utiliser un httpClient pour récupérer le flux sous forme de Stream puis de le transférer dans le BitmapImage en passant par un DataWritter.

Windows 8 et les Universal Apps nous obligent à passer par un nouveau type de Stream le InMemoryRandomAccessStream pour l’afficher comme source dans le BitmapImage. Poursuivre la lecture

Mise en cache d’image dans l’isolated storage avec Windows XAML et SemaphoreSlim

 

Ecriture dans l’isolated Storage d’un fichier image

Ecriture Multiple dans l'Isolated Storage

Il est parfois fort utile de sauvegarder les images provenant d’un serveur HTTP dans un cache afin d’éviter de les charger à chaque fois.

En implémentant ce système de cache en asynchrone, je me suis rendu compte de plusieurs problèmes causant systématiquement un UnauthorizedAccessException: Access is denied (0x80070005).

Poursuivre la lecture

MvvmLight 5.0 et la navigation

Nouveautés

Une grande nouveauté de MVVMLight5 est l’apparition du INavigationService.

Le INavigationService est un Pattern permettant la navigation dans l’application sans utiliser la couche visuelle. Il est alors possible de migrer le même code sous différentes plateformes sans les particularités de la navigation.

Il sera également possible de tester les actions de navigation grâce aux tests unitaires automatisés.

Poursuivre la lecture

Migration du RoundButton en Universal App

Introduction

AppBarButtonsScreenshot

En Windows Phone, les Round Button (Bouton antouré d’un cercle) étaient utilisés à travers un Framework additionnel le Coding4Fun Toolkit.

Exemple d’utilisation en Windows Phone Silverlight :

Ajout de l’espace de nommage dans la page

xmlns:c4f="clr-namespace:Coding4Fun.Phone.Controls;assembly=Coding4Fun.Phone.Controls"

Utilisation dans la page Xaml

<c4f:RoundButtonImageSource="Images/EditImage.png"
    Content="Edition"
    Command="{Binding EditCommand}" />

Avec les Universal Apps, ce Framework se fait malheureusement encore un peu attendre et de nombreux composants standards peuvent remplacer en natif ce fameux Round Button.

AppBarButtoon

Le AppbarButton est un bouton rond qui s’affiche normalement dans la barre de tâche en bas de l’écran.Mais il est également possible de l’utiliser n’importe où dans la page comme l’ancien RoundButton. Poursuivre la lecture

Le jeu 4×3 remporte le concours Microsoft – Docteur Souris

CarHeroLogo_150x150

Le jeu éducatif 4×3 (pour Windows 8.1 et Windows Phone 8.1) remporte la première place du concours organisé par l’association Docteur Souris et Microsoft.

Ce jeu écrit en Unity permet aux enfants d’apprendre ou réviser les tables de multiplications.

docteursouris

Docteur souris est une association permettant au malades hospitalisés (principalement des jeunes enfants) de rester connectés avec l’outil informatique.

 

Un grand merci à Microsoft pour le magnifique Windows Phone Lumia 930 ainsi qu’à Dvlup et Docteur Souris pour l’organisation de ce concours. WP_20141227_16_51_43_Pro

Les liens pour bien démarrer avec Unity3D (Universal Apps)

unity3d

Cet article recense les différents liens qui m’ont été très utiles pour la création d’un jeu 2D avec Unity3D.

Le jeu en question s’appelle 4×3 disponible en Universal Apps sur Windows 8.1 et Windows Phone 8.1.

Unity3D

Unity et Windows 8.1, Windows Phone 8.1 et les universal Apps

Il est essentiel d’installer la version au moins égale à la 4.5.3. Seule cette version supporte les Universal Apps (apps pour Windows Phone et Windows 8.1).

Allez donc directement sur le site. Si vous avez déjà une version installée, ne vous fiez pas trop à la vérification automatique des mises à jour qui ne vérifient que les versions mineures (pour ma part).

Le lien pour télécharger la version est ici (> 1Go !) :

http://unity3d.com/unity/download

Unity et Visual Studio

Pour utiliser visual Studio à la place de MonoDevelop (livré en standard dans le package Unity), il existe un plugin (ex: SyntaxTree) racheté très récemment et offert gracieusement par Microsoft.

http://blogs.msdn.com/b/visualstudio/archive/2014/07/29/visual-studio-tools-for-unity-1-9.aspx

Le plugin existe sur les 3 dernières versions de Visual Studio 2010, 2012 et 2013. Il vous permet de manipuler le c#, débugger votre projet depuis Visual Studio. De quoi être très productif.

Poursuivre la lecture