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 librairiecordova-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 javascriptcordova-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épertoireres
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 deDroidGap
et non plus deActivity
- nous avons supprimé
setContentView(R.layout.main);
pour le remplacer parsuper.loadUrl("file:///android_asset/www/index.html");
, ce qui signifie quâau chargement de lâapplication, la pageindex.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
- SĂ©lectionnez âDownload Dropbox Folder here âŠâ
- Sélectionnez le répertoire
demophonegap
- Vous obtenez le contenu du répertoire
demophonegap
, SĂ©lectionnezDownload
- Patientez pendant la synchronisation âŠ
- Une fois la synchronisation terminée, un nouveau répertoire projet android
demophonegap
est créé sur votre smartphone
- Vous pouvez mĂȘme aller vĂ©rifier que vous avez bien tĂ©lĂ©charger le bon code
- Allez dans le menu et sélectionnez
Run
- Vous ĂȘtes maintenant en train de compiler une vraie application android directement sur votre smartphone !!!
- Une fois la compilation terminĂ©e, AIDE vous propose dâinstaller votre nouvelle application
- Câest compilĂ©, vous pouvez lancer votre application
- RĂ©sultat :
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 :
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 :)
Tweet