web-dev-qa-db-fra.com

qu'est-ce que Android Annotations et pourquoi nous utilisons Android Annotations?

Je veux en savoir plus sur Android Annotations, est-il préférable d'utiliser dans tous les projets Android?).

S'il est correct, comment le mettre en œuvre. Existe-t-il un bon tutoriel pour cela?

Si c'est une mauvaise façon. quels sont les tirages de Android Annotations?

Merci d'avance pour l'aide.

29
Android Tutorial

Les annotations Android sont un cadre basé sur des annotations qui vous permet de simplifier le code dans vos applications et réduit le passe-partout des modèles courants, tels que la définition d'écouteurs de clic, appliquer les exécutions de threads d'interface utilisateur/d'arrière-plan, etc.

Vous pourriez passer d'avoir quelque chose comme ça:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView descriptionTextView = (TextView) findViewById(R.id.tv_description);
        final Button hideButton = (Button) findViewById(R.id.btn_hide);
        hideButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                descriptionTextView.setVisibility(View.INVISIBLE);
            }
        });
    }
}

Pour quelque chose comme ça:

@EActivity(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {

    @ViewById(R.id.tv_description)
    TextView mDescriptionTextView;

    @Click(R.id.btn_hide)
    protected void onHideButtonClick() {
        mDescriptionTextView.setVisibility(View.INVISIBLE);
    }
}

Comment ça marche

Vous annotez vos activités et composants, le processeur d'annotations génère ensuite des classes (au moment de la compilation) qui étendent vos activités et composants (c'est-à-dire que vos activités ne peuvent pas être finales) avec un suffixe de soulignement par défaut, donc si vous avez MainActivity, maintenant, vous aurez également une classe MainActivity_.

Cette nouvelle classe contient un code passe-partout bien écrit qui fait tout ce que l'annotation spécifie.

Comment implémenter

J'ai écrit ce tutoriel sur la façon d'intégrer Android Annotations et même d'inclure un exemple sur la façon dont les tests d'intégration sont mis à jour, vérifiez ici .

Ce tutoriel est valable à partir d'aujourd'hui, en utilisant Android Studio ~ 1.5.1, et il essaie d'expliquer un peu le fonctionnement interne.

Devriez-vous l'utiliser?

Je dirais que si vous avez un petit projet moyen, ça va. Cela rendra votre code plus facile à lire . Mais si votre application est plus volumineuse et contient beaucoup de flux de navigation avec des cycles de vie d'activité/de composants complexes, elle peut devenir un peu difficile à implémenter ou difficile à déboguer et à comprendre les erreurs si quelque chose n'est pas correctement annoté.

En raison de la façon dont Android Annotations fonctionnent, ils s'intègrent dans le cycle de vie et ce faisant, vous êtes désormais dépendant de leur cycle de vie (par exemple, si vous annotez vos vues avec @ViewById, alors vous ne pouvez pas les référencer dans onCreate(), vous devez créer une méthode et l'annoter avec @AfterViews et quand cela La méthode est exécutée, puis vos vues sont prêtes à être utilisées. Ce n'est pas nécessairement un problème, il vous suffit d'avoir une bonne compréhension des comportements d'Android et bien, Android Comportements d'annotations également.

En résumé, comme dans n'importe quelle bibliothèque, si vous en dépendez, eh bien vous en dépendez, vous pourriez donc aussi bien comprendre comment cela fonctionne. Votre projet dépend maintenant de quelqu'un d'autre.

34
rastadrian

Je n'utilise pas Android Annotations, plus maintenant. Lorsque j'ai utilisé cette bibliothèque, elle était buggée et a fait du débogage un cauchemar. Un autre inconvénient est qu'elle réduit la portabilité de votre code. Si vous '' travailler seul sur le projet, alors ça va, vous n'avez pas ce problème, mais quand vous travaillez en équipe, vous devez y réfléchir à deux fois.

Si vous souhaitez l'utiliser, il existe de nombreux tutoriels sur leur site .

Une alternative: si vous voulez diminuer la quantité de code tout en le rendant très facile à utiliser et à comprendre, je vous suggère la bibliothèque Butter Knife . J'utilise beaucoup et je n'ai rencontré aucun bogue jusqu'à présent. Très facile à utiliser et à lire.

6
DDsix

Android Annotations est une bibliothèque tierce conçue pour être un outil tout en un pour Android. Il est capable d'injecter des dépendances, de gérer les threads, etc. Je ne recommande pas de l'utiliser; c'est buggy et instable. Dans mon travail actuel, je travaille sur un projet et ma tâche consiste à supprimer Android Annotations. Je suggère d'utiliser Dagger 2, Butterknife et RxJava

4
Zeyad Gasser

Android Annotations est une bibliothèque qui "génère automatiquement" du code pour nous en utilisant certains attributs ou anotations comme @EActivity, @ViewById, @OnClick. Il est destiné à faciliter et à réduire le temps de codage.

"AndroidAnnotations est un framework Open Source qui accélère Android. Il s'occupe de la plomberie et vous permet de vous concentrer sur ce qui est vraiment important. En simplifiant votre code, il facilite sa maintenance."

(Documentation ici: https://github.com/excilys/androidannotations/wiki )

Mais ... Nous ne l'utilisons pas, je suis entièrement d'accord avec la réponse DDsix. Utilisez SOLID et codez ce qui doit être codé quand et où il devrait être ...

4
Juan

Voici l'exemple avec Android Studio.

  1. Créez un projet Android avec le modèle "Activité vide".
  2. Modifiez le projet_root/build.gradle

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.Android.tools.build:gradle:1.5.0'
    ==>     classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
    ==>     maven {
    ==>         url = 'https://oss.sonatype.org/content/repositories/snapshots'
    ==>     }
        }
    }
    
  3. Modifiez l'application/build.gradle

    apply plugin: 'com.Android.application'
    apply plugin: 'Android-apt'  <============
    
    Android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"
    
        defaultConfig {
            applicationId "com.just.myapplication"
            minSdkVersion 19
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.Android.support:appcompat-v7:23.1.1'
    
    ==> apt "org.androidannotations:androidannotations:4.0-SNAPSHOT"
    ==> compile 'org.androidannotations:androidannotations-api:4.0-SNAPSHOT'
    }
    
  4. Ajoutez une TextView et un Button dans la disposition principale, activity_main.xml

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Not Click Yet"
        Android:id="@+id/textView"/>
    
    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="10dp"
        Android:id="@+id/button"
        Android:text="Click"
        Android:layout_below="@+id/textView" />
    
  5. Changez le nom de l'activité en "MainActivity_" dans AndroidManifest.xml

    <application
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">
    ==> <activity Android:name=".MainActivity_">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN"/>
    
                <category Android:name="Android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
    
  6. Maintenant, votre MainActivity.Java pourrait être simplifié comme ci-dessous

    package com.just.myapplication;
    
    import Android.support.v7.app.AppCompatActivity;
    import Android.widget.TextView;
    
    import org.androidannotations.annotations.Click;
    import org.androidannotations.annotations.EActivity;
    import org.androidannotations.annotations.ViewById;
    
    @EActivity (R.layout.activity_main)
    public class MainActivity extends AppCompatActivity {
    
        @ViewById(R.id.textView)
        TextView mText;
    
        @Click
        void button() {
            mText.setText("Button Clicked!");
        }
    }
    
  7. Essayez de l'exécuter avec un appareil ou un émulateur pour voir à quel point cela fonctionne.

2
Jared Tsai