我想了解Android Annotations,它是否可以在所有Android项目中使用?
如果正确,如何实现它。它有什么好的教程吗?
如果是错误的方式。什么是Android Annotations的绘制?
提前感谢您的帮助。
答案 0 :(得分:30)
Android Annotations 是一个注释驱动的框架,允许您简化应用程序中的代码并减少常见模式的样板,例如设置单击侦听器,强制执行ui /后台线程执行等。
你可能会有这样的事情:
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);
}
});
}
}
对于这样的事情:
@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);
}
}
工作原理
您注释了您的活动和组件,注释处理器然后生成类(在编译时),扩展您的活动和组件(即您的活动不能是最终的)默认情况下使用下划线后缀,所以如果您有{{1} },现在你还有一个MainActivity
类。
这个新类包含一个编写良好的样板代码,可以执行注释指定的任何内容。
如何实施
我写了这篇关于如何集成Android注释的教程,甚至还包括了一个关于如何更新集成测试的示例check here。
该教程在今天使用Android Studio~1.5.1时有效,它试图解释一下内部是如何工作的。
你应该使用它吗?
我想说如果你有一个中小型项目就好了。 这将使您的代码更易于阅读。但是,如果您的应用程序更大并且包含大量具有复杂活动/组件生命周期的导航流程,则可能会有一点难以实现,或者难以调试和理解错误如果没有适当地注释某些内容
由于Android Annotations如何运作,他们将自己嵌入生命周期并且这样做,您现在依赖于他们的生命周期(例如,如果您使用MainActivity_
注释您的观点,那么您无法在@ViewById
中引用它们,您需要创建一个方法并使用onCreate()
对其进行注释,并且当执行此方法时,您的视图就可以使用了)。这不一定是个问题,你只需要很好地理解Android的行为以及Android Annotations行为。
总而言之,就像在任何图书馆中一样,如果你依赖它,那么你依赖它,所以你也可以非常彻底地理解它是如何工作的。您的项目现在取决于其他人的。
答案 1 :(得分:6)
我不使用Android Annotations,现在不再使用。当我使用这个库时,它是错误的,并使调试成为一场噩梦。另一个缺点是它降低了代码的可移植性。如果你单独在这个项目上工作,那么没关系,你就没有这个问题,但是当你在团队中工作时,你必须再考虑一下。
如果您想使用它,their site上有很多教程。
替代方案: 如果您希望减少代码量,同时使其易于使用和理解,我建议您使用Butter Knife库。我使用的很多,到目前为止还没有遇到任何错误。非常容易使用和阅读。
答案 2 :(得分:4)
Android Annotations是第三方库,它是一款适用于Android的工具。它具有依赖注入,线程处理等功能。我不建议使用它;它的马车,不稳定。在我目前的工作中,我正在开发一个项目,我的任务是删除Android Annotations。我建议使用Dagger 2,Butterknife和RxJava
答案 3 :(得分:4)
Android Annotations是一个通过使用@EActivity,@ ViewById,@ OnClick等属性或语言为我们“自动生成”代码的库。它旨在促进和减少编码时间。
“AndroidAnnotations是一个开源框架,可以加速Android开发。它可以处理管道,让您专注于真正重要的事情。通过简化代码,它便于维护。”
(此处的文档:https://github.com/excilys/androidannotations/wiki)
但是......我们不使用它,我完全同意DDsix的答案。使用SOLID原则并编码应该在何时何地编码的内容...
答案 4 :(得分:2)
以下是Android Studio的示例。
编辑project_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'
==> }
}
}
编辑app / 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'
}
在主布局activity_main.xml
中添加TextView和Button
<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" />
将活动名称更改为AndroidManifest.xml中的“MainActivity_”
<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>
现在,您的MainActivity.java可以简化如下
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!");
}
}
尝试使用设备或模拟器运行它,看它有多简单。