PhoneGap “Onboard” avec Android.

Préambule

Peut-on coder directement une application Android sur son smartphone, et tant que l’on y est, peut-on aussi compiler l’apk (toujours sur le smartphone) ? 


La rĂ©ponse est “OUI !”. Je reconnais que ce n’est pas trĂšs pratique (plus confortable sur une tablette). Quels sont les avantages rĂ©els ? Je ne sais pas trop (quoique 
 pour tester une idĂ©e rapido dans le train), en tous les cas c’est trĂšs geek. Voyons donc comment faire.

Nous allons faire une application hybride avec PhoneGap (on peut trĂšs bien faire une “pure” application native, mais je voulais vĂ©rifier que mon idĂ©e fonctionnait de bout en bout).

Pré-Requis

Vous aurez besoin de

  • AIDE https://play.google.com/store/apps/details?id=com.aide.ui qui est un mini IDE “Onboard” qui permet d’éditer un projet Android et de le compiler, qui sai se connecter Ă  un repository GIT et Ă  un compte Dropbox. Il existe une version payante et une version free (j’ai la payante, mais normalement cela devrait fonctionner avec la free).
  • l’Android SDK, thĂ©oriquement, nous pourrions tout faire avec AIDE, vous n’avez pas besoin d’installer Eclipse et le plugin Android, juste le SDK (Pensez Ă  mettre Ă  jour vos variables d’environnement %ANDROID_HOME%\tools;%ANDROID_HOME%\platforme-tools;, oĂč ANDROID_HOME est le chemin vers le rĂ©pertoire d’installation du SDK).
  • le framework PhoneGap qui permet de dĂ©velopper facilement des applications hybrides http://phonegap.com/download, downloadez, dĂ©zippez, nous y reviendrons plus tard.
  • un compte Dropbox (il y a une version gratuite) http://www.dropbox.com

Si vous n’avez pas de compte Dropbox, et que vous ne souhaitez pas en avoir, vous pouvez facilement adapter ce tuto et utiliser un cable USB pour transfĂ©rer vos fichiers vers votre smartphone.

Création du squelette de projet Android

  • Allez dans votre rĂ©pertoire Dropbox
  • Positionnez vous oĂč vous voulez (Ă  la racine de Dropbox ou dans un sous rĂ©pertoire)
  • Tapez la commande : android create project --target 1 --name demophonegap --path demophonegap --activity DemoPhoneGap --package org.k33g.demophonegap (Ă  adapter selon vos besoins, --target : la cible de compilation, 1 = par dĂ©faut, --name : nom du projet, --path : rĂ©pertoire du projet, --activity : la classe principale de votre projet, --package : le package/domaine de votre projet )

Remarque : j’ai crĂ©Ă© le projet sur mon desktop, mais AIDE peut trĂšs bien le faire directement sur votre smartphone.

Maintenant, vous disposez d’un rĂ©pertoire projet android que nous allons “prĂ©parer” pour qu’il fonctione avec PhoneGap.

“Hybridons” notre projet Android

  • Dans le rĂ©pertoire libs de votre projet android, copiez la librairie cordova-2.0.0.jar que vous trouvez dans le rĂ©pertoire \lib\android du framework PhoneGap.
  • Dans le rĂ©pertoire de votre projet android, crĂ©ez un sous-rĂ©pertoire assets\www dans lequel vous copierez la librairie javascript cordova-2.0.0.js que vous trouvez dans le rĂ©pertoire \lib\android du framework PhoneGap.
  • Copiez le rĂ©pertoire xml que vous trouvez dans le rĂ©pertoire \lib\android du framework PhoneGap dans le rĂ©pertoire res de votre projet android

Modifions DemoPhoneGap.java

Ouvrez avec votre éditeur de texte préféré DemoPhoneGap.java (plus tard vous pourrez le faire directement sur votre smartphone), vous devez avoir le code suivant :

package org.k33g.demophonegap;

import android.app.Activity;
import android.os.Bundle;

public class DemoPhoneGap extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}


 que vous allez modifier de la façon suivante :

package org.k33g.demophonegap;

import android.app.Activity;
import android.os.Bundle;
import org.apache.cordova.*;

public class DemoPhoneGap extends DroidGap
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
    }
}


 sauvegardez

Donc :

  • nous avons ajoutĂ© la rĂ©fĂ©rence Ă  import org.apache.cordova.*;
  • DemoPhoneGap hĂ©rite maintenant de DroidGap et non plus de Activity
  • nous avons supprimĂ© setContentView(R.layout.main); pour le remplacer par super.loadUrl("file:///android_asset/www/index.html");, ce qui signifie qu’au chargement de l’application, la page index.html sera chargĂ©e dans une UIWebview

Modifions AndroidManifest.xml

Ouvrez AndroidManifest.xml qui est Ă  la racine de votre projet android, et qui doit ressembler Ă  ceci :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.k33g.demophonegap"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="DemoPhoneGap"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Juste avant le tag <application>, insérez ceci :

    <supports-screens 
        android:largeScreens="true" 
        android:normalScreens="true" 
        android:smallScreens="true" 
        android:resizeable="true" 
        android:anyDensity="true" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />

Et pour le support des changements d’orientation, copiez ceci android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" dans le tag activity. Au final votre fichier devrait ressembler à ceci :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.k33g.demophonegap"
      android:versionCode="1"
      android:versionName="1.0">

        <supports-screens 
            android:largeScreens="true" 
            android:normalScreens="true" 
            android:smallScreens="true" 
            android:resizeable="true" 
            android:anyDensity="true" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.RECEIVE_SMS" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.READ_CONTACTS" />
        <uses-permission android:name="android.permission.WRITE_CONTACTS" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="android.permission.BROADCAST_STICKY" />

    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="DemoPhoneGap"
                  android:label="@string/app_name"
                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Passons Ă  la crĂ©ation de la partie “applicative” en html

Dans le répertoire assets\www, créez un fichier index.html avec le code suivant :

<!DOCTYPE HTML>
<html>
	<head>
	    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">		
		<title>DEMO</title>
		<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
	</head>
	<body>
		<h1>PhoneGapDemo</h1>
		<p id="infos"></p>

	</body>
	<script>

		document.addEventListener("deviceready", onDeviceReady, false);
		function onDeviceReady() {
			document.querySelector("# infos").innerHTML = [
				device.name,
				device.cordova,
				device.platform,
				device.uuid,
				device.version
			].join("<br>");
		}

	</script>
</html>

Prenez votre smartphone

  • Lancez AIDE, Ă  la demande de crĂ©ation d’un nouveau projet, faites Cancel

Alt "aide_001.jpg"

  • SĂ©lectionnez “Download Dropbox Folder here 
”

Alt "aide_002.jpg"

  • SĂ©lectionnez le rĂ©pertoire demophonegap

Alt "aide_003.jpg"

  • Vous obtenez le contenu du rĂ©pertoire demophonegap, SĂ©lectionnez Download

Alt "aide_004.jpg"

  • Patientez pendant la synchronisation 


Alt "aide_005.jpg"

  • Une fois la synchronisation terminĂ©e, un nouveau rĂ©pertoire projet android demophonegap est crĂ©Ă© sur votre smartphone

Alt "aide_006.jpg"

  • Vous pouvez mĂȘme aller vĂ©rifier que vous avez bien tĂ©lĂ©charger le bon code

Alt "aide_007.jpg"

  • Allez dans le menu et sĂ©lectionnez Run

Alt "aide_008.jpg"

  • Vous ĂȘtes maintenant en train de compiler une vraie application android directement sur votre smartphone !!!

Alt "aide_009.jpg"

  • Une fois la compilation terminĂ©e, AIDE vous propose d’installer votre nouvelle application

Alt "aide_010.jpg"

  • C’est compilĂ©, vous pouvez lancer votre application

Alt "aide_011.jpg"

  • RĂ©sultat :

Alt "aide_012.jpg"

Maintenant 


Vous pouvez modifier directement votre application sur le smartphone et la compiler, tout cela sans repasser par votre desktop. Dans notre exemple, c’est mĂȘme relativement facile, puisque l’essentiel du code Ă  modifier est du HTML et du javascript.

Petit conseil pour la route, si vraiment cela vous tente de code “onboard”, pour la partie HTML/JS, je prĂ©fĂšre utiliser un Ă©diteur externe : DroidEdit https://play.google.com/store/search?q=droidedit&c=apps, voyez vous mĂȘme :

Alt "aide_013.jpg"

Conclusion ?

Geekerie ? Oui, certainement, mais pratique tout de mĂȘme, si vous voulez tester/vĂ©rifier quelque chose d’urgence sans ordinateur sous la main (genre, durant un trop long repas de (belle)famille ;) ).

Si vous connaissez d’autres outils de ce genre, j’en suis friand :)

blog comments powered by Disqus

Related posts