Article complet: Développer sur Android derrière un proxy avec l’émulateur

15/01/2010

Permalink 15:33:25, Catégories: Android, Android, 732 mots   French (FR) , Nicolas Druet

[Android][Java] Développer sur Android derrière un proxy avec l’émulateur

C’est un peu la croix et la bannière de développer sous Eclipse derrière un proxy nécessitant une authentification avec l’émulateur d’Android. Nous allons voir ce qui est possible et ce qui ne l'est pas :

[Suite:]


> Installation de l’environnement : windows, Eclipse 3.5, ADT 0.9.7 et le SDK r6

[edit du 11/06/2010 ]
Si les précédents SDK pouvaient être installés directement sans nécessiter une connexion internet, Google a décidé depuis Décembre de changer sa façon de faire. L’archive du SDK ne contient que le répertoire sdk/tools.

La plateforme Android (1.5, 1.6, 2.1 et 2.2), la documentation, les drivers USB se téléchargent via l'installateur (sdk/SDK Setup.exe). C'est une vision plus modulaire et plus pratique pour eux.

Allez dans Settings et saisissez l’adresse et le port du proxy. Cochez éventuellement Force Https.

install-sdk2

Mais si comme moi votre Proxy nécessite une identification, et bien l’erreur 407 sera la seule donnée que vous récupérerez.

Deux solutions existent:


> Spécifier le proxy à l'émulateur

[edit du 11/06/2010 ]
-http-proxy est une option au lancement de l’émulateur. Je n'ai jamais réussi à faire fonctionner le navigateur internet et GoogleMap avec.

Du temps du SDK 1.6, il était possible d'utiliser le navigateur en définissant l'adresse du proxy et son port en éditant un APN : Home > Menu > Settings > Wireless Controls > Mobile networks > Access Point Names

Depuis le SKD d'Android 2.0.1, 2.1 et la récente 2.2, plus rien de marche :
http://code.google.com/p/android/issues/detail?id=5508

C'est tout même absurde qu'on ne puisse pas développer correctement derrière un proxy d'entreprise.


> Se connecter à un serveur distant via HttpURLConnection

Vous pouvez récupérer les préférences de l’utilisateur :

final String proxyHost = android.net.Proxy.getDefaultHost(); 
final int proxyPort = android.net.Proxy.getDefaultPort(); 

Puis...

String url = "http://www.google.com/ig/api?weather=Nantes.FRANCE", username = "username ", password = "password "; 
 
Authenticator.setDefault(new SimpleAuthenticator(username,password)); 
URL server = new URL(url); 
 
Properties systemProperties = System.getProperties(); 
systemProperties.setProperty("http.proxyHost",proxyHost ); 
systemProperties.setProperty("http.proxyPort",proxyPort ); 
 
HttpURLConnection connection = (HttpURLConnection)server.openConnection(); 
connection.connect(); 
InputStream xmlGoogleWeather = connection.getInputStream() 
...

La classe SimpleAuthenticator :

public class SimpleAuthenticator extends Authenticator { 
  private String username, password; 
 
  public SimpleAuthenticator(String username, String password) { 
    this.username = username; 
    this.password = password; 
  } 
 
  protected PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(username, password.toCharArray()); 
  } 
}


> Se connecter à un serveur distant via DefaultHttpClient

final String proxyHost = android.net.Proxy.getDefaultHost(); 
final int proxyPort = android.net.Proxy.getDefaultPort(); 
 
DefaultHttpClient client = new DefaultHttpClient(); 
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, new HttpHost(proxyHost , proxyPort )); 
 
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("username:password"); 
client.getCredentialsProvider().setCredentials(new AuthScope(proxyHost ,proxyPort ),credentials); 
 
HttpResponse response = client.execute(new HttpGet("http://...")); 
InputStream xmlGoogleWeather = response.getEntity().getContent(); 
...



> Conclusion

On ne peut pas dire que Google nous facilite la tâche. Travailler derrière un proxy n'est pourtant pas si étonnant que cela en entreprise. Et cette histoire dure depuis les premières versions du SDK.

Je tiendrai à jour le post au fil de mes recherches...



> Ressources

Social Bookmarking:

                                     

Commentaires:

Connectez-vous pour vous abonner à cet article:

Flux de commentaires pour cet article : Atom 1.0  RSS 2.0
Commentaire de: pedro242 [Membre]
La gestion du proxy est enfin fonctionnelle sur le SDK android V2.2:

- en ligne de commande: emulator -avd MonAvd2.2 -http-proxy http://:

- sous Eclipse: rajouter dans le menu "Debug configuration", sous l'onglet "Target" au niveau du champ "Additional Emulator Command Line Options", l'option: -http-proxy http://:

Ex: -http-proxy http://:
Permalien 25/05/2010 @ 11:08
Commentaire de: Nicolas Druet [Membre]
Après de nombreux tests, je n'ai pas réussi à me connecter à internet via le browser de l'émulateur; le proxy nécessitant une authentification.
Permalien 11/06/2010 @ 15:39

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Android - Le blog d'un développeur

Nicolas DRUET

Catégories


Rechercher

<  Février 2012  >
Lun Mar Mer Jeu Ven Sam Dim
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web