<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>android - In Fine - Le Blog</title>
	<atom:link href="https://blog.infine.com/tag/android/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.infine.com</link>
	<description>Le blog des technos de demain !</description>
	<lastBuildDate>Tue, 03 Apr 2012 09:42:50 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://blog.infine.com/wp-content/uploads/2021/03/cropped-vignette-32x32.png</url>
	<title>android - In Fine - Le Blog</title>
	<link>https://blog.infine.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>L&#8217;application Devoxx France d&#8217;In Fine est disponible sur le Google Play Store</title>
		<link>https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store</link>
					<comments>https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954#comments</comments>
		
		<dc:creator><![CDATA[Florian Boulay]]></dc:creator>
		<pubDate>Fri, 30 Mar 2012 11:21:45 +0000</pubDate>
				<category><![CDATA[Conférence]]></category>
		<category><![CDATA[Mobile (Android/iOS)]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[devoxx]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[play framework]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1954</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span> In Fine, en tant que partenaire de l&#8217;évènement majeur qu&#8217;est Devoxx France, a le plaisir de mettre à disposition une application pour Devoxx France sur Android. Cette première version permet : De mettre en favoris vos sessions préférées De consulter le planning des sessions, et le détail des speakers De voir ce qui se passe &#8230;</p>
<p>The post <a href="https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954">L’application Devoxx France d’In Fine est disponible sur le Google Play Store</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span><p><a href="https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate.jpg" class="fancyboxgroup" rel="gallery-1954" title="Logo Devoxx France"><img decoding="async" src="https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate-300x154.jpg" alt="Logo Devoxx France" title="Logo Devoxx France" width="300" height="154" class="alignright size-medium wp-image-1984" srcset="https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate-300x154.jpg 300w, https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate.jpg 400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>In Fine, en tant que partenaire de l&#8217;évènement majeur qu&#8217;est Devoxx France, a le plaisir de mettre à disposition une application pour Devoxx France sur Android. Cette première version permet :</p>
<ul>
<li>De mettre en favoris vos sessions préférées</li>
<li>De consulter le planning des sessions, et le détail des speakers</li>
<li>De voir ce qui se passe sur Twitter avec le tag <em>devoxxfr</em></li>
<li>D&#8217;avoir accès au plan des 2 étages de l&#8217;hôtel où se déroulera la conférence</li>
<li>Et d&#8217;autres fonctionnalités&#8230;</li>
</ul>
<p><span id="more-1954"></span></p>
<p>Cette application fonctionne parfaitement sur téléphone , mais n&#8217;est pas encore totalement adaptée pour les tablettes. Dans les semaines qui viennent, nous allons continuer à mettre à jour l&#8217;application pour qu&#8217;elle soit la plus simple à utiliser possible. Voici une prévision des futures évolutions  :</p>
<ul>
<li>Complète adaptation de l&#8217;ergonomie de l&#8217;application aux tablettes</li>
<li>Ajout de la recherche sur les speakers. Actuellement elle ne fonctionne que sur les sessions</li>
<li>Quand on clique sur une salle, afficher la carte de l&#8217;étage correspondant</li>
<li>Pouvoir mettre en favori des speakers</li>
<li>Et bien d&#8217;autres choses qui dépendront des retours que nous aurons</li>
</ul>
<p>Nous sommes très fiers de mettre à disposition cette application. Elle sera mise en open source au moment de la conférence Devoxx France, certainement en licence Apache 2.<br />
Si vous rencontrez des problèmes ou avez des suggestions, écrivez un commentaire ici, ou envoyer un mail au compte indiqué sur la fiche du Google Play Store.</p>
<p>Dans la suite de l&#8217;article, nous allons approfondir l&#8217;aspect technique de l&#8217;application. Si au contraire vous souhaitez directement aller télécharger l&#8217;application, alors il faut aller ici : <a href="https://play.google.com/store/apps/details?id=com.infine.android.devoxx">Play Store</a></p>
<h2>Architecture technique</h2>
<figure id="attachment_1964" aria-describedby="caption-attachment-1964" style="width: 300px" class="wp-caption aligncenter"><a href="https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1.png" class="fancyboxgroup" rel="gallery-1954"><img decoding="async" class="size-medium wp-image-1964" src="https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1-300x164.png" alt="Architecture applicative de l'application Devoxx France In Fine" width="300" height="164" srcset="https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1-300x164.png 300w, https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1.png 660w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-1964" class="wp-caption-text"><em>Architecture applicative de l&#039;application Devoxx France In Fine</em></figcaption></figure>
<p>Comme le montre le schéma ci-dessus, nous n&#8217;avons pas directement connecté l&#8217;application Android avec les API RESTful fournies par le site Devoxx. En effet les temps de réponse sont très variables, certains service ont déjà mis plus de 5 minutes à répondre. D&#8217;autre part, certains service renvoient des données en double ou incomplètes.<br />
Le serveur intérmédiaire permet donc de mieux maîtriser les données. Grâce à Play et à Mongo DB, les temps de réponse sont excellents et la charge que peut encaisser le serveur est bien au dessus de ce que nous atteindrons. Un test JMeter a mesuré que le serveur pouvait encaisser 300 requêtes par secondes. La plupart des requêtes répondent en moins de 0.1 seconde. Nous estimons que le serveur aurait à supporter, au maximum de son activité, 25 requêtes par minute</p><p>The post <a href="https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954">L’application Devoxx France d’In Fine est disponible sur le Google Play Store</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Devoxx 2011 &#8211; Utilisation du GPU pour les applis Android</title>
		<link>https://blog.infine.com/devoxx-2011-utilisation-du-gpu-pour-les-applis-android-1452?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=devoxx-2011-utilisation-du-gpu-pour-les-applis-android</link>
					<comments>https://blog.infine.com/devoxx-2011-utilisation-du-gpu-pour-les-applis-android-1452#respond</comments>
		
		<dc:creator><![CDATA[Victor Bonnet]]></dc:creator>
		<pubDate>Fri, 25 Nov 2011 09:00:06 +0000</pubDate>
				<category><![CDATA[Conférence]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[devoxx]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1452</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span> Chet Haase et Romain Guy nous ont présenté pendant Devoxx lors de la conférence Graphics goodies in Android, les nouveautés d’Android pour développer des applications qui tuent. Nous allons voir dans cet article l’utilisation de l&#8217;accélération graphique pour les rendus 2D des applications Android 3.0 et supérieures. L’openGL existe depuis les premières versions d’Android pour &#8230;</p>
<p>The post <a href="https://blog.infine.com/devoxx-2011-utilisation-du-gpu-pour-les-applis-android-1452">Devoxx 2011 – Utilisation du GPU pour les applis Android</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span><p><a href="http://graphics-geek.blogspot.com/">Chet Haase</a> et <a href="http://www.curious-creature.org/">Romain Guy</a> nous ont présenté pendant Devoxx lors de la conférence <a href="http://www.devoxx.com/display/DV11/Graphics+Goodies+in+Android">Graphics goodies in Android</a>, les nouveautés d’Android pour développer des applications qui tuent. Nous allons voir dans cet article l’utilisation de l&#8217;accélération graphique pour les rendus 2D des applications Android 3.0 et supérieures.</p>
<p>L’openGL existe depuis les premières versions d’Android pour les jeux et certains autres composants mais l&#8217;interface graphique des applications a toujours été “SOFTWARE”.<br />
Depuis Android 3.0 il est possible d’activer l&#8217;accélération graphique pour chaque application ce qui nous permet d’avoir une meilleur expérience utilisateur, avoir des animations plus fluides et de libérer un peu le CPU.</p>
<p><span id="more-1452"></span></p>
<h1 style="margin-top: 30px">Software rendering vs Hardware rendering</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2011/11/img3.jpg" class="fancyboxgroup" rel="gallery-1452"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-1453" src="https://blog.infine.com/wp-content/uploads/2011/11/img3.jpg" alt="Software vs Hardware" width="642" height="498" srcset="https://blog.infine.com/wp-content/uploads/2011/11/img3.jpg 642w, https://blog.infine.com/wp-content/uploads/2011/11/img3-300x232.jpg 300w" sizes="(max-width: 642px) 100vw, 642px" /></a></p>
<p>Lorsqu’une application utilise l&#8217;accélération matérielle, l’OpenGL est utilisé lors de l’appel de la fonction Canvas.draw().</p>
<h1 style="margin-top: 40px">Activation de l&#8217;accélération matérielle</h1>
<p>Pour activer l’utilisation du GPU sur Android 3.0+, il suffit d’ajouter <span style="color: blue">android:hardwareAccelerated=</span><span style="color: green">&#8220;true&#8221;</span> dans le tag application du fichier AndroidManifest.xml. Ce simple ajout devrait activer l&#8217;accélération matérielle pour toute votre application, cependant certains composant ne peuvent pas (encore) bénéficier de cette fonctionnalité c’est pourquoi nous allons voir par la suite comment la contrôler.<br />
<a href="https://blog.infine.com/wp-content/uploads/2011/11/andro.jpg" class="fancyboxgroup" rel="gallery-1452"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1464" style="margin-top: 15px" src="https://blog.infine.com/wp-content/uploads/2011/11/andro.jpg" alt="" width="331" height="232" srcset="https://blog.infine.com/wp-content/uploads/2011/11/andro.jpg 331w, https://blog.infine.com/wp-content/uploads/2011/11/andro-300x210.jpg 300w" sizes="(max-width: 331px) 100vw, 331px" /></a></p>
<h1 style="margin-top: 40px">Contrôle de l&#8217;accélération matérielle</h1>
<p>Si votre application a des problèmes sur certains éléments  avec l&#8217;accélération matérielle, il est tout à fait possible de définir quels éléments doivent ou non utiliser le GPU.</p>
<p>On peut donc l’activer ou la désactiver sur ces différents éléments :</p>
<ul>
<li>Application</li>
<li>Activity</li>
<li>Window</li>
<li>View</li>
</ul>
<p style="margin-top: 30px">Pour utiliser l&#8217;accélération matérielle au niveau Application ou Activity il faut utiliser le fichier AndroidManifest.xml</p>
<pre class="brush: xml; title: ; notranslate">
&lt;application android:hardwareAccelerated=&quot;true&quot;&gt;
    &lt;activity ... /&gt;
    &lt;activity android:hardwareAccelerated=&quot;false&quot; /&gt;
&lt;/application&gt;
</pre>
<p style="margin-top: 30px">Voici ci-dessous un exemple de code à utiliser pour l’utiliser au niveau “Window” :</p>
<pre class="brush: java; title: ; notranslate">
getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
</pre>
<p style="margin-top: 30px">Pour finir, on peut désactiver l’utilisation du GPU seulement pour un partie de l&#8217;écran (View) :</p>
<pre class="brush: java; title: ; notranslate">
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
</pre>
<h3 style="margin-top: 30px">Vérifier si un élément utilise le GPU</h3>
<p>Il peut être important de savoir si un élément utilise l&#8217;accélération matérielle à un moment donné.<br />
Il existe 2 façons de le vérifier :</p>
<ul>
<li><a href="http://developer.android.com/reference/android/view/View.html#isHardwareAccelerated()"><span style="color: blue">View.isHardwareAccelerated()</span></a>, retourne “true” si la View est attachée à une Windows qui utilise le GPU</li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#isHardwareAccelerated()"><span style="color: blue">Canvas.isHardwareAccelerated()</span></a>, retourne “true” si le Canvas est acceleré</li>
</ul>
<h1 style="margin-top: 40px">Fonctions supportant l&#8217;accélération matérielle</h1>
<p>La plupart des fonctions habituelles de la classe Canvas sont supportées, cependant certaines ne le sont pas mais le seront peut-être dans les futures versions d’Android.</p>
<p>Voici la liste des fonctions <strong>non supportées</strong> :</p>
<div style="margin-left: 15px;margin-right: 15px;padding: 5px">
<div><a href="http://developer.android.com/reference/android/graphics/Canvas.html"><span style="color: blue;font-size: 16px;font-weight: bold">Canvas</span></a></div>
<ul class="tinylist">
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#clipPath(android.graphics.Path)"><span style="color: green">clipPath()</span></a></li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#clipRegion(android.graphics.Region)"><span style="color: green">clipRegion()</span></a></li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#drawPicture(android.graphics.Picture)"><span style="color: green">drawPicture()</span></a></li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#drawPosText(char[], int, int, float[], android.graphics.Paint)"><span style="color: green">drawPosText()</span></a></li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#drawTextOnPath(char[], int, int, android.graphics.Path, float, float, android.graphics.Paint)"><span style="color: green">drawTextOnPath()</span></a></li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#drawVertices(android.graphics.Canvas.VertexMode, int, float[], int, float[], int, int[], int, short[], int, int, android.graphics.Paint)"><span style="color: green">drawVertices()</span></a></li>
</ul>
<div><a href="http://developer.android.com/reference/android/graphics/Paint.html"><span style="color: blue;font-size: 16px;font-weight: bold">Paint</span></a></div>
<ul class="tinylist">
<li><a href="http://developer.android.com/reference/android/graphics/Paint.html#setLinearText(boolean)"><span style="color: green">setLinearText()</span></a></li>
<li><a href="http://developer.android.com/reference/android/graphics/Paint.html#setMaskFilter(android.graphics.MaskFilter)"><span style="color: green">setMaskFilter()</span></a></li>
<li><a href="http://developer.android.com/reference/android/graphics/Paint.html#setRasterizer(android.graphics.Rasterizer)"><span style="color: green">setRasterizer()</span></a></li>
</ul>
</div>
<p>Certaines autres fonctions fonctionnent <strong>différemment</strong> lorsque l’accélératrion matérielle est activée :</p>
<div style="margin-left: 15px;margin-right: 15px;padding: 5px">
<div><a href="http://developer.android.com/reference/android/graphics/Canvas.html"><span style="color: blue;font-size: 16px;font-weight: bold">Canvas</span></a></div>
<ul class="tinylist">
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#clipRect(android.graphics.Rect)"><span style="color: green">clipRect()</span></a> : XOR, Difference and ReverseDifference clip modes are ignored; 3D transforms do not apply to the clip rectangle</li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#drawBitmapMesh(android.graphics.Bitmap, int, int, float[], int, int[], int, android.graphics.Paint)"><span style="color: green">drawBitmapMesh()</span></a> : colors array is ignored</li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#drawLines(float[], android.graphics.Paint)"><span style="color: green">drawLines()</span></a> : anti-aliasing is not supported</li>
<li><a href="http://developer.android.com/reference/android/graphics/Canvas.html#setDrawFilter(android.graphics.DrawFilter)"><span style="color: green">setDrawFilter()</span></a> : can be set, but ignored</li>
</ul>
<div><a href="http://developer.android.com/reference/android/graphics/Paint.html"><span style="color: blue;font-size: 16px;font-weight: bold">Paint</span></a></p>
<div>
<ul class="tinylist">
<li><a href="http://developer.android.com/reference/android/graphics/Paint.html#setDither(boolean)"><span style="color: green">setDither()</span></a> : ignored</li>
<li><a href="http://developer.android.com/reference/android/graphics/Paint.html#setFilterBitmap(boolean)"><span style="color: green">setFilterBitmap()</span></a> : filtering is always on</li>
<li><a href="http://developer.android.com/reference/android/graphics/Paint.html#setShadowLayer(float, float, float, int)"><span style="color: green">setShadowLayer()</span></a> : works with text only</li>
</ul>
<div><a href="http://developer.android.com/reference/android/graphics/ComposeShader.html"><span style="color: blue;font-size: 16px;font-weight: bold">ComposeShader</span></a></div>
<p><a href="http://developer.android.com/reference/android/graphics/ComposeShader.html"> </a></p>
<ul class="tinylist"><a href="http://developer.android.com/reference/android/graphics/ComposeShader.html"> </a></p>
<li><a href="http://developer.android.com/reference/android/graphics/ComposeShader.html"></a><a href="http://developer.android.com/reference/android/graphics/ComposeShader.html"><span style="color: green">ComposeShader</span></a> can only contain shaders of different types (a BitmapShader and a LinearGradientShader for instance, but not two instances of BitmapShader)</li>
<li><a href="http://developer.android.com/reference/android/graphics/ComposeShader.html"><span style="color: green">ComposeShader</span></a> cannot contain a ComposeShader</li>
</ul>
</div>
<h1 style="margin-top: 40px">Les View Layers</h1>
<p>Les layers sont présents depuis la première version d’Android. Ils permettent d’avoir plusieurs couches (différentes vues) en cache et d’avoir de meilleures performances pour des animations ou des effets.</p>
<p>Android 3.0 introduit une nouvelle API appelée <a href="http://developer.android.com/reference/android/view/View.html#setLayerType(int, android.graphics.Paint)">View.setLayerType(int type, Paint p)</a>. Cette fonction prend 2 paramètres, le premier définit le type de layer que l’on souhaite utiliser et le second (facultatif) définit grâce à un <a href="http://developer.android.com/reference/android/graphics/Paint.html">Paint</a> comment la couche doit être composée (<a href="http://developer.android.com/reference/android/graphics/Paint.html#getAlpha()">Translucency (alpha)</a>, <a href="http://developer.android.com/reference/android/graphics/Paint.html#getXfermode()">Blending mode</a>, <a href="http://developer.android.com/reference/android/graphics/Paint.html#getColorFilter()">Color filter</a>).</p>
<p>Il existe 3 différents types de layer :</p>
<ul>
<li><a href="http://developer.android.com/reference/android/view/View.html#LAYER_TYPE_NONE"><span style="color: blue">LAYER_TYPE_NONE</span></a> : Rendu normal sans mémoire tampon.</li>
<li><a href="http://developer.android.com/reference/android/view/View.html#LAYER_TYPE_HARDWARE"><span style="color: blue">LAYER_TYPE_HARDWARE</span></a> : Rendu utilisant les textures matérielles seulement si l’application utilise l&#8217;accélération matérielle, sinon le layer sera de type LAYER_TYPE_SOFTWARE.</li>
<li><a href="http://developer.android.com/reference/android/view/View.html#LAYER_TYPE_SOFTWARE"><span style="color: blue">LAYER_TYPE_SOFTWARE</span></a> : Rendu transformé par le software en bitmap.</li>
</ul>
<p>Vous pouvez choisir le type de Layer en fonction des objectifs de ceux-ci :</p>
<ul>
<li><strong>Performance :</strong> Utilisation du type hardware. Une fois que le rendu est calculé, le code générant le rendu de la View ne sera plus éxecuté tant que la fonction invalidate() de la View ne sera pas appelé. Quelques animations comme celles utilisant la transparence peuvent utiliser directement le layer généré ce qui est très efficace à faire par le GPU.</li>
<li><strong>Effets Visuel :</strong> Utilisation du hardware ou software layer en appliquant un “Paint”, le second paramètre de la fonction View.setLayerType(int type, Paint p). Par exemple, c’est assez simple d’avoir un rendu noir et blanc sur une image en utilisant “ColorMatrixColorFilter”.</li>
<li><strong>Compatibilité :</strong> Utilisation du software layer pour forcer le calcul du rendu de la View par le software. Ça permet contourner toutes les restrictions hardware vues précédemment.</li>
</ul>
<h1 style="margin-top: 40px">Conclusion</h1>
<p>Lors de <a href="http://www.devoxx.com/display/DV11/Android+Keynote">l&#8217;Android keynote</a> Devoxx 2011, <a href="http://en.wikipedia.org/wiki/Tim_Bray">Tim Bray</a> a annoncé que l’Android market avait plus de 300 000 applications et que maintenant l’objectif est d’avoir un maximum d’applications “géniales” (make it great&#8230;). Le but de cette conférence était donc non seulement de présenter les nouveautés d’Android mais aussi de motiver les développeurs à créer de super applications (belle, rapide, fluide, &#8230;).<br />
Cet article reprend les explications, présentées lors de la conférence <a href="http://www.devoxx.com/display/DV11/Graphics+Goodies+in+Android">Graphics goodies in Android</a>, pour activer et jouer avec l&#8217;accélération matérielle dans nos applications. Vous pouvez retrouver une documentation plus précise sur le <a href="http://www.google.com/url?q=http%3A%2F%2Fdeveloper.android.com%2Fguide%2Ftopics%2Fgraphics%2Fhardware-accel.html">site Android developers</a>.<br />
J’espère que cet article est assez clair et que les développeurs francophones pourront s&#8217;en inspirer pour améliorer l’expérience utilisateur de leurs applis.</p>
</div>
</div><p>The post <a href="https://blog.infine.com/devoxx-2011-utilisation-du-gpu-pour-les-applis-android-1452">Devoxx 2011 – Utilisation du GPU pour les applis Android</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/devoxx-2011-utilisation-du-gpu-pour-les-applis-android-1452/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Développement d’une application Android</title>
		<link>https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=developpement-d%25e2%2580%2599une-application-android</link>
					<comments>https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181#comments</comments>
		
		<dc:creator><![CDATA[Victor Bonnet]]></dc:creator>
		<pubDate>Tue, 15 Nov 2011 15:30:59 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1181</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span> Développement d’une application Android</p>
<p>The post <a href="https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181">Développement d’une application Android</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span><p>Cet article a pour but d’expliquer les bases du développement d’une application Android. Il est accompagné d’un exemple que vous pouvez télécharger sur <a href="https://github.com/victorbonnet/SayHello">github</a>.</p>
<h1 style="margin-top: 30px">Préambule</h1>
<p>Pour le développement de  l’exemple qui va suivre nous allons utiliser Eclipse avec le plugin de google (<a href="http://developer.android.com/sdk/eclipse-adt.html">ADT</a>). Ces outils nécessitent bien entendu que vous ayez téléchargé le sdk d’Android que vous pouvez récupérer <a href="http://developer.android.com/sdk/index.html">ici</a>.<br />
Ce tutoriel n’explique pas comment installer ces différents outils étant donné que la documentation de google est déjà très claire pour les anglophiles et que vous pouvez trouver facilement de nombreux tutoriels en français en utilisant votre moteur de recherche préféré.</p>
<p><span id="more-1181"></span></p>
<h1 style="margin-top: 30px">Les composants d’Android</h1>
<p>Pour développer une application Android, il est essentiel de connaître et de comprendre les différents composants que nous propose le framework.<br />
Une application Android ne possède pas de point d’entrée comme une application Java standard, elle se compose de différents composants qui sont lancés lorsque c’est nécessaire.<br />
Il existe 4 types de composants :</p>
<h4 style="margin-left: 40px">Activity</h4>
<p>L’Activity représente une “page” de l’interface visuelle de l’utilisateur. Elle est composée d’objets dérivés de la classe View (boutons, images, zone de texte, &#8230;).<br />
Dans notre exemple nous allons utiliser 2 différentes Activity :</p>
<ul>
<li>Une qui permettra de saisir un nom, composé d’une zone de texte et d’un bouton pour envoyer l’information.</li>
<li>Une seconde qui va simplement afficher du texte (“Bonjour …!”) avec le nom qui sera saisi dans la précedente Activity.</li>
</ul>
<h4 style="margin-left: 40px">Services</h4>
<p>Un service est un programme lancé en tâche de fond. Il ne possède pas d’interface et ne se stoppe pas lorsque l’on change d’application. Il peut être utile pour des applications de musique par exemple : l’utilisateur peut changer d’application sans que la musique ne s&#8217;arrête.</p>
<h4 style="margin-left: 40px">Content providers</h4>
<p>Les content providers permettent de gérer les données d’une application afin de les partager ou non avec d’autres applications. Une application tierce peut par exemple récupérer avec les bonnes permissions les contacts qui sont enregistrés dans le téléphone.</p>
<h4 style="margin-left: 40px">Broadcast Receivers</h4>
<p>Les Broadcast Receivers sont des composants qui permettent de recevoir des messages d&#8217;autres applications. Ils sont en permanence à l’écoute et réagissent en fonction des différents signaux (par exemple ajout d’une notification).</p>
<h1 style="margin-top: 30px">Activation des composants</h1>
<p>Les Activity, Service et Broadcast receivers sont activés par des messages asynchrones appelés <a href="http://developer.android.com/reference/android/content/Intent.html">intents</a>. Ils permettent donc de lancer d’autres composants et d’envoyer les URI des données sur lesquelles le composant peut agir.<br />
Les Content providers sont quant à eux activés lorsqu’ils sont sollicités par un <a href="http://developer.android.com/reference/android/content/ContentResolver.html">Content Resolver</a>.</p>
<h1 style="margin-top: 30px">Le fichier AndroidManifest.xml</h1>
<p>Toutes les applications Android doivent contenir un fichier AndroidManifest.xml. C’est un fichier xml qui doit être placé à la racine du projet, il contient tous les composants qui peuvent être activés dans l’application. Il permet de définir le nom et l&#8217;icône de l’application, la version minimale d’Android pouvant exécuter l’application, de déclarer toutes les permissions nécessaires à l’application : l&#8217;accès à internet, l&#8217;écriture de données sur la carte sd&#8230;</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
      package=&quot;com.infine.sayHello&quot;
      android:versionCode=&quot;1&quot;
      android:versionName=&quot;1.0&quot;&gt;
    &lt;uses-sdk android:minSdkVersion=&quot;6&quot; /&gt;

    &lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&gt;
        &lt;activity android:name=&quot;.SayHelloActivity&quot;
                  android:label=&quot;@string/app_name&quot;&gt;
            &lt;intent-filter&gt;
                &lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
                &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
            &lt;/intent-filter&gt;
        &lt;/activity&gt;

        &lt;activity android:name=&quot;.HelloActivity&quot;
                  android:label=&quot;@string/app_name&quot;&gt;
        &lt;/activity&gt;

    &lt;/application&gt;
&lt;/manifest&gt;
</pre>
<h1 style="margin-top: 30px">Arborescence d’une application</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25.png"><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1209" src="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25.png" alt="Arborescence" width="207" height="369" srcset="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25.png 207w, https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25-168x300.png 168w" sizes="(max-width: 207px) 100vw, 207px" /></a></p>
<ul>
<li><strong>src :</strong> ce répertoire contient l’implémentation des différents composants et ainsi que l’ensemble du code Java de l’application.</li>
<li><strong>AndroidManifest.xml :</strong> fichier d’informations de l’application pour le système que l’on a vu précedemment</li>
<li><strong>res :</strong> répertoire contenant les ressources de l’application (images, mise en page, &#8230;)</li>
<li><strong>gen :</strong> Généré par ADT et non modifiable. Il contient les références des ressources présentent dans le répertoire res, afin de pouvoir les utiliser dans le code Java.</li>
</ul>
<h1 style="margin-top: 160px">Exemple d’application SayHello</h1>
<p>Voici l&#8217;explication d&#8217;une application simple appelée SayHello, vous pouvez directement récupérer les sources <a href="https://github.com/victorbonnet/SayHello">ici</a> pour les fans de github.</p>
<p>Commençons par la création du projet : Eclipse &gt; File &gt; New &gt; Other &#8230; &gt; Android Project<br />
<a href="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1216" src="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35.png" alt="Création projet" width="337" height="496" srcset="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35.png 527w, https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35-203x300.png 203w" sizes="(max-width: 337px) 100vw, 337px" /></a><br />
SayHelloActivity est la classe générée lors de la création du projet, elle est aussi lancée par défaut lors du lancement de l&#8217;application (intent MAIN dans l&#8217;AndroidManifest.xml).</p>
<pre class="brush: java; title: ; notranslate">
public class SayHelloActivity extends Activity {
    private final String SAY_HELLO = &quot;sayHello&quot;;
    private Context context;
    private EditText editText;
    private Button button;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        context = this;
        editText = (EditText) findViewById(R.id.name);
        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                if (editText.getText().toString().equals(&quot;&quot;)) {
                    Toast.makeText(context, R.string.error, 1000).show();
                } else {
                    Intent intent = new Intent(context, HelloActivity.class);
                    intent.putExtra(&quot;Name&quot;, editText.getText().toString());
                    context.startActivity(intent);
                }

            }
        });
    }
}
</pre>
<p>Cette classe est liée avec le fichier main.xml (ci-dessous) qui va définir l&#8217;interface de l&#8217;activity. Lorsque l&#8217;utilisateur va cliquer sur le bouton, un contrôle va permettre de vérifier si le champs texte n&#8217;est pas vide et lancer <em>HelloActivity</em> grâce à un intent.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    &gt;

	&lt;TextView
		android:id=&quot;@+id/lbl_name&quot;
		android:layout_width=&quot;fill_parent&quot;
		android:layout_height=&quot;wrap_content&quot;
		android:text=&quot;@string/name&quot;
		android:textSize=&quot;28px&quot;
	    /&gt;

	&lt;EditText
		android:id=&quot;@+id/name&quot;
		android:layout_width=&quot;fill_parent&quot;
	    android:layout_height=&quot;wrap_content&quot;
		/&gt;

	&lt;Button
		android:id=&quot;@+id/button&quot;
		android:layout_width=&quot;wrap_content&quot;
	    android:layout_height=&quot;wrap_content&quot;
	    android:text=&quot;@string/send&quot;
		/&gt;

&lt;/LinearLayout&gt;
</pre>
<p><em>HelloActivity</em> va afficher Bonjour, &#8220;utilisateur&#8221; dans les différentes langues qu&#8217;on aura ajoutés. Dans l&#8217;exemple présent sur github, l&#8217;anglais est par défaut et le français est utilisé pour les appareils utilisant ce langage. (values et values-fr dans le dossier res)</p>
<pre class="brush: java; title: ; notranslate">
public class HelloActivity extends Activity {
    private Context context;
    private TextView textView;
    private Button button;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hello);

        context = this;
        textView = (TextView) findViewById(R.id.hello);
        button = (Button) findViewById(R.id.back);

        textView.setText(getResources().getString(R.string.hello) + this.getIntent().getStringExtra(&quot;Name&quot;) + &quot;!&quot;);

        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                ((Activity) context).finish();
            }
        });
    }
}
</pre>
<p><em>HelloActivity</em> est liée avec le <em>hello.xml</em> ci-dessous. Elle est composée d&#8217;une zone de texte et d&#8217;un bouton qui stop l&#8217;activity, <em>SayHelloActivity</em> repasse donc en premier plan.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    &gt;

	&lt;TextView
        android:id=&quot;@+id/hello&quot;
        android:layout_width=&quot;fill_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:textSize=&quot;28px&quot;
	    /&gt;

	&lt;Button
		android:id=&quot;@+id/back&quot;
		android:layout_width=&quot;wrap_content&quot;
	    android:layout_height=&quot;wrap_content&quot;
	    android:text=&quot;@string/back&quot;
		/&gt;
&lt;/LinearLayout&gt;
</pre>
<h1 style="margin-top: 30px">Conclusion</h1>
<p>L’article touche à sa fin, nous avons vu les points fondamentaux pour la création d’applications Android. L’exemple ci-dessus présente seulement un seul des composants d’Android : les “Activity”. Elles sont indispensables pour créer des applications, nous verrons dans de prochains articles comment utiliser les autres composants pour des besoins plus spécifiques.<br />
J’espère avoir été clair et que cet article va permettre aux nouveaux développeurs Android de partir sur de bonnes bases.</p><p>The post <a href="https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181">Développement d’une application Android</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
