Sur la route d'Oxiane digressions diverses

LeBlog OXiane

22 sept
2014

Droidcon Paris 2014 – Manipulation du byte code sous Android

J’ai eu la chance d’assister à la présentation sur la manipulation du byte code sous Android à la Droidcon 2014.

Deux librairies ont été présentées:

Afterburner

Une librairie qui permet d’éviter le code redondant lors de l’écriture de librairies. On peut ainsi injecter un morceau de code à des endroits bien précis, aussi précisément que « dans telle méthode de telle classe et après l’appel de telle méthode ». Par exemple, avec une classe qui ressemble à ça:

public class A {
  private int foo;
  public void bar() {}
  public void foo() {
     bar();
  }
}

On peut donner une valeur à la variable « int foo », dans la méthode « foo() », après l’appel de la méthode « bar() »:
InsertableMethod.Builder builder = new InsertableMethod.Builder( new AfterBurner() );

CtClass classToInsertInto = ClassPool.getDefaultPool().get(A.class.getName());
builder
  .insertIntoClass(A.class.getName())
  .inMethodIfExists("foo")
  .afterACallTo("bar")
  .withBody("this.foo = 2;")
  .elseCreateMethodIfNotExists("public void foo() { this.foo = 2; }")
  .doIt();

Cela reviendrait à écrire:

public class A {
  private int foo;
  public void bar() {}
  public void foo() {
     bar();
     //ADDED by AfterBurner
     this.foo = 2;
  }
}

Alors bien sûr, à priori, on ne voit pas forcément l’intérêt de la chose. Pourquoi s’embêter à injecter quand on peut écrire soi même « this.foo = 2; » dans le corps de sa méthode? Il s’avère que c’est très pratique!
Un petit projet d’implémentation a été présenté sous Android, il permet d’afficher dans les logs tous les appels aux méthode du cycle de vie des activités. Il s’agit de Loglifecycle. Avec une seule annotation sur les activités que l’on veut observer, on obtient dans les logs tous les appels aux méthodes onCreate, onContentChanged, onResume etc.
On peut imaginer tout un tas d’autres cas d’applications pour cette librairie, peut-être même la modification d’un code dont on n’a pas les sources (mais dont on connaît les classes/méthodes)!

Mimic

Mimic est une librairie qui permet, en quelque sorte, d’accéder à l’héritage multiple sous Java/Android. Le principe est de copier coller tous les attributs, constructeurs et méthodes d’une classe A dans une classe B.
Par exemple,

public class A{
    public void foo() {
    }
}

@Mimic(sourceClass = B.class,
    mimicMethods = {@MimicMethod(methodName="foo",mode=MimicMode.AT_BEGINNING)}
)
public class Aprime extends A{
    @Override
    public void foo() {
        super.foo();
    }
}

public class B{
    public void foo() {
        System.out.println("Hello B !");
    }
}

La méthode foo() de Aprime ne fait qu’appeler la méthode foo() de A. Or, comme on a appelé Mimic sur A et qu’on lui a demandé de remplacer « foo », c’est bien « Hello B! » qui sera appelé!

Johann Hilbold

jhilbold

5 sept
2014

Construire des thèmes facilement sous iOS

Un problème

Récemment j’ai eu besoin de pouvoir changer facilement et rapidement
la couleur de tous mes boutons et de tous mes titres.

Généralement, on a des images pour nos contrôles ou on utilise des couleurs
depuis le code/storyboard.

Si on le fait par image, on change donc l’image et c’est fini.
Si on utilise des couleurs via le code, on change éventuellement une macro :

//#define activeColor [UIColor redColor]
#define activeColor [UIColor blueColor]

Oui mais personnellement, je préfère définir mes couleurs dans Lire la suite du bllet »

Manuel François

tHeFeaTuReDMaN

3 sept
2014

iOS 7 atteint les 91%

Puisqu’iOS 8 sort bientôt…
voici un lien intéressant à consulter chaque mois pour Lire la suite du bllet »

Manuel François

tHeFeaTuReDMaN

2 sept
2014

Xcode Plus DeleteLine

Bonjour à tous,

une chose vraiment énervante avec Xcode : impossible d’effacer une ligne simplement !
On est obligé de retourner en début ou fin de ligne puis on peut effacer la ligne :

Ctrl+A puis Ctrl+K

Il existe plusieurs solutions pour palier à ce que Eclipse (et d’autres) fournissent par défaut
mais celle que je préfère est sans doute Lire la suite du bllet »

Manuel François

tHeFeaTuReDMaN

25 août
2014

De retour d’ESUG 2014

Salle de dîner de Saint John's collegeLes conférences ESUG, le rendez-vous incontournable des Smalltalkers de tous horizons, se sont terminées vendredi dernier.
Cette année l’événement se déroulait à Cambridge et réunissait pour l’occasion plus de 100 personnes.

C’est évidemment peu lorsqu’on compare avec des événements type Devoxx mais pour mon langage fétiche dont on m’annonce la mort prochaine depuis près de 20 ans je trouve ça plutôt encourageant de voir que le nombre de participants se maintient d’année en année.

J’ai coutume de dire que l’informatique est un métier génial dans lequel on peut croiser des dinosaures (au sens noble du terme bien sûr, c’est-à-dire des gens qui ont connu la préhistoire de l’informatique).

Lire la suite du bllet »

Jean-Francois Lefevre

jflefevre