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.
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.
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.
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
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 ...
Voici l'exemple avec Android Studio.
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'
==> }
}
}
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'
}
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" />
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>
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!");
}
}
Essayez de l'exécuter avec un appareil ou un émulateur pour voir à quel point cela fonctionne.