转载请标明出处:http://write.blog.csdn.net/postedit/41577317
androidannotation是一个非常牛逼的框架(https://github.com/excilys/androidannotations/wiki),可以做到:依赖注入(Dependency Injection),简化的线程模型(Simplified threading model),事件绑定(Event binding),REST Client。
非常好用,更重要的是它对性能无影响!本文我们简要的来看一下一些入门的东西。
1.从例子开始(参考https://github.com/excilys/androidannotations/wiki/FirstActivity):
AndroidManifest.xml
-
<?xml version="1.0" encoding="utf-8"?>
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-
package="com.example.hello"
-
android:versionCode="1"
-
android:versionName="1.0" >
-
<uses-sdk
-
android:minSdkVersion="14"
-
android:targetSdkVersion="18" />
-
<application
-
android:allowBackup="true"
-
android:icon="@drawable/ic_launcher"
-
android:label="@string/app_name">
-
<activity
-
android:name="com.example.hello.MainActivity_"
-
android:label="@string/app_name" >
-
<intent-filter>
-
<action android:name="android.intent.action.MAIN" />
-
<category android:name="android.intent.category.LAUNCHER" />
-
</intent-filter>
-
</activity>
-
<activity android:name="com.example.hello.SecondActivity_" />
-
</application>
-
</manifest>
里面定义了两个activity,注意名字后面都带了一个下划线。
2.MainActivity.java:注意这里的名字没有下划线
-
@EActivity(R.layout.activity_main)
-
public class MainActivity extends Activity {
-
@ViewById(R.id.myInput)
-
EditText myInput;
-
@ViewById(R.id.myTextView)
-
TextView textView;
-
@ViewById(R.id.myButton2)
-
Button btn2;
-
@StringRes(R.string.go_to_second)
-
String btn2Txt;
-
@AfterViews
-
protected void afterViews(){
-
btn2.setText(btn2Txt);
-
}
-
@Click
-
void myButton() {
-
String name = myInput.getText().toString();
-
textView.setText("Hello " + name);
-
}
-
@Click
-
void myButton2(){
-
SecondActivity_.intent(this).start();
-
}
-
}
-
activity_main.xml
-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
xmlns:tools="http://schemas.android.com/tools"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:orientation="vertical" >
-
<EditText
-
android:id="@+id/myInput"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content" />
-
<Button
-
android:id="@+id/myButton"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="Click me!" />
-
<TextView
-
android:id="@+id/myTextView"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content" />
-
<Button
-
android:id="@+id/myButton2"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/go_to_second"/>
-
</LinearLayout>
SecondActivity的源码就不贴了。
使用注入以后,代码看上去变得很简洁,再也没有那一大堆findViewById之类的了。
如何进行编译运行呢(参考https://github.com/excilys/androidannotations/wiki/CustomizeAnnotationProcessing):
(1)如果是使用javac,需要传递-AandroidManifestFile=/path/to/AndroidManifest.xml这个参数,指明Manifest文件。
(2)如果是使用Eclipse,在项目上点击右键->Properties->Java Compiler->Annotation Processing->Enable annotation processing,
然后在Factory Path中添加AndroidAnnotations的jar包。
(3)如果是使用maven,maven-compiler-plugin的3.1版本可以设置编译参数。
-
<plugin>
-
<artifactId>maven-compiler-plugin</artifactId>
-
<version>3.1</version>
-
<configuration>
-
<encoding>UTF-8</encoding>
-
<source>1.6</source>
-
<target>1.6</target>
-
<compilerArgs>
-
<arg>-Atrace=true</arg>
-
<arg>-AlogLevel=trace</arg>
-
<arg>-AlogConsoleAppender=true</arg>
-
<arg>-AandroidManifestFile=/path/to/AndroidManifest.xml</arg>
-
</compilerArgs>
-
</configuration>
-
</plugin>
所有的可用的参数如下:
(1)trace:boolean,用来启用或者禁用@Trace注解,这个注解用会通过log记录方法的执行。
(2)androidManifestFile:string,默认情况下,AndroidAnnotations会在它的父文件夹中递归查找AndroidManifest.xml,假如你的工程的结构比较特殊,可以用这个进行指定。
(3)resourcePackageName:string,默认情况下,AndroidAnnotations会从AndroidManifest.xml文件中提取应用的package来找到R文件,假如R文件是在一个定制的package中,可以用它来设置。
(4)logFile:string,从3.0开始,AndroidAnnotations使用自定义的logger来在记录代码执行过程中的日志。日志默认会写在{outputFolder}/androidannotations.log文件中。
{outputFolder}参数按照下面的顺序进行查找:target-> build -> bin -> root project folder。如果找不到{outputFolder},可以使用logFile指定输出的文件。{outputFolder}可以使用占位符来动态改变文件名。
(5)logLevel:string,enum(trace, debug, info, warn, error):默认的日志级别是DEBUG,改为TRACE可能会有用。
(6)logAppenderConsole:boolean,默认情况下,AndroidAnnotations会使用FileAppender和MessagerAppender2个日志appender,FileAppender会写在日志文件中,MessagerAppender在IDE的消息列表中显示。可以设置logAppenderConsole为true来启用另一个ConsoleAppender。
(7)threadControl:boolean,用来启用或者禁用@SupposeUiThread和@SupposeBackground注解,默认是true,可以保证方法是在正确的线程中调用。
3.对性能的影响
无影响!因为它的原理是生成Activity类的子类,并不是使用反射!我们可以看下编译器帮我们自动生成的activity:
最后看一下完整的pom.xml的例子(https://github.com/excilys/androidannotations/blob/develop/examples/maveneclipse/pom.xml):
-
<?xml version="1.0" encoding="UTF-8"?>
-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
<modelVersion>4.0.0</modelVersion>
-
<groupId>org.androidannotations</groupId>
-
<artifactId>maveneclipse</artifactId>
-
<version>0.0.1-SNAPSHOT</version>
-
<packaging>apk</packaging>
-
<name>maveneclipse</name>
-
-
<properties>
-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
<android.version>4.1.1.4</android.version>
-
<android.platform>16</android.platform>
-
<androidannotations.version>3.2</androidannotations.version>
-
<java.version>1.6</java.version>
-
</properties>
-
-
<dependencies>
-
<dependency>
-
<groupId>com.google.android</groupId>
-
<artifactId>android</artifactId>
-
<version>${android.version}</version>
-
<scope>provided</scope>
-
</dependency>
-
<dependency>
-
<groupId>org.androidannotations</groupId>
-
<artifactId>androidannotations</artifactId>
-
<version>${androidannotations.version}</version>
-
<scope>provided</scope>
-
</dependency>
-
<dependency>
-
<groupId>org.androidannotations</groupId>
-
<artifactId>androidannotations-api</artifactId>
-
<version>${androidannotations.version}</version>
-
</dependency>
-
</dependencies>
-
-
<build>
-
<plugins>
-
<plugin>
-
<artifactId>maven-compiler-plugin</artifactId>
-
<version>3.1</version>
-
<configuration>
-
<source>${java.version}</source>
-
<target>${java.version}</target>
-
<compilerArgs>
-
<arg>-AlogLevel=trace</arg>
-
</compilerArgs>
-
</configuration>
-
</plugin>
-
<plugin>
-
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
-
<artifactId>android-maven-plugin</artifactId>
-
<version>3.9.0-rc.3</version>
-
<configuration>
-
<sdk>
-
<platform>${android.platform}</platform>
-
</sdk>
-
<undeployBeforeDeploy>true</undeployBeforeDeploy>
-
</configuration>
-
<extensions>true</extensions>
-
</plugin>
-
</plugins>
-
</build>
-
-
</project>
android-annotations使用入门
原文:http://blog.csdn.net/goldenfish1919/article/details/41577317