AndroidAnnotations注解框架之介绍+配置(一)

qsuron 发布于 2014-09-22 Android开发 23 次阅读 4 条评论 1679 字 预计阅读时间: 8 分钟


作为一门开发语言,反射类机制是必不可少的!android也有类似的开源IOC框架,通过依赖注入(IOC)的实现思想,可以把约定好的一大串代码通过注解@的方式,以IOC技术来生成中间件,AndroidAnnotations在这方面出色,不仅体积小,而且功能强大,极大的减少了代码量,下面将带来一系列的教程。

 

 

希望此篇能帮到大家,本系列教程目录:转载请链接并注明:转自 小树技术博客 .

AndroidAnnotations注解框架之介绍+配置(一):飞机直达

AndroidAnnotations注解框架之@Pref(二): 飞机直达

AndroidAnnotations注解框架之@Activity(三):飞机直达

AndroidAnnotations注解框架之@Application(四): 飞机直达

 

 

 

一 Android Annotations 的介绍

 

AndroidAnnotations官网:AndroidAnnotations首页

开源于github的项目地址:AndroidAnnotations Github

AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”.通过一段时间的使用发现,相比原生的Android开发,确实能够让你少些很多代码,它的首页也给出了一个简单的例子,通过例子也可以看到代码比之前几乎少写了一半。由于是开源,所以大家都可以直接拿来使用。

至于使用这个开源框架有什么好处(只有不到50k大小),我这里就不详细翻译github上的介绍了,就简单说一下特性:

1、使用依赖注入(Dependency Injection)#本博接来下几篇的文章将要介绍的开源组件都使用DI, 不熟悉的可以了解一下Inversion of Control(IoC)

2、简化的线程模型(Simplified  threading model)

3、事件绑定(Event binding)

4、REST Client

5、No Magic  [不知道为什么这样称呼,直译过来就是:无魔法,它的意思是:AndroidAnnotations在编译的时候会产生一个子类(接下来你会明白),你查看这个子类,可以看到它是如何工作的]

 

更多的介绍可以前往官网或者Github上的项目去查看,它带有超级详细和全面的wiki,CookBook和API文档,十分爽心悦目。

 

二 Android Annotations 的部署

 

(一) 环境:

 

开发工具:Eclipse & android stdio & other (本篇以eclipse为例子,其他IDE请参考官网)

JDK版本:jdk1.6 以上

构建工具:Ant(Eclipse默认的build tool,因此无需装额外的插件)

androidannotations:3.1 (请前往 发行地址 下载)

(二) 步骤:

 

1,准备好需要的环境,见上文

2,配置好项目文件

3,配置Ant

4,配置Eclipse

 

1. 新建项目配置JAR包

 

首先需要有一个普通的android项目,下载并解压Anno 3.1的JAR包,解压后有两个jar包,androidannotations-api-2.7.1.jar放置于项目libs文件夹,androidannotations-2.7.1.jar放置于项目compile-libs文件夹下

(compile-libs需要自己创建,创建在项目的根目录下)

 

2.  创建配置文件

 

(在项目根目录下,创建  build.xml和custom_rules.xml)

 

创建build.xml,内容如下:(注意修改项目名,其他不变,C+V即可)

 

<?xml version="1.0" encoding="UTF-8"?>
<project name="这里是项目名" default="help">

    <property file="local.properties" />

    <property file="ant.properties" />

    <property environment="env" />
    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
        <isset property="env.ANDROID_HOME" />
    </condition>

    <loadproperties srcFile="project.properties" />

    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
            unless="sdk.dir"
    />

    <import file="custom_rules.xml" optional="true" />
    <import file="${sdk.dir}/tools/ant/build.xml" />

</project>

 

创建 custom_rules.xml,内容如下:C+V即可

 

<?xml version="1.0" encoding="UTF-8"?>
<property
    name="generated.dir"
    value=".apt_generated" />
<property
    name="generated.absolute.dir"
    location="${generated.dir}" />
<property
    name="java.compilerargs"
    value="-s &apos;${generated.absolute.dir}&apos;" />
<target name="-pre-compile" >

    <mkdir dir="${generated.absolute.dir}" />

</target><target
    name="-compile"
    depends="-pre-build, -build-setup, -code-gen, -pre-compile" >

    <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping..." >

        <!-- merge the project's own classpath and the tested project's classpath -->

        <path id="project.javac.classpath" >

            <path refid="project.all.jars.path" />

            <path refid="tested.project.classpath" />

            <path path="${java.compiler.classpath}" />

            <fileset
                dir="compile-libs"
                includes="*.jar" />
        </path>

        <javac
            bootclasspathref="project.target.class.path"
            classpathref="project.javac.classpath"
            debug="true"
            destdir="${out.classes.absolute.dir}"
            encoding="${java.encoding}"
            extdirs=""
            fork="${need.javac.fork}"
            includeantruntime="false"
            source="${java.source}"
            target="${java.target}"
            verbose="${verbose}" >

            <src path="${source.absolute.dir}" />

            <src path="${gen.absolute.dir}" />

            <compilerarg line="${java.compilerargs}" />
        </javac>

        <!-- if the project is instrumented, intrument the classes -->

        <if condition="${build.is.instrumented}" >

            <then>

                <echo level="info" >
Instrumenting classes from ${out.absolute.dir}/classes...




                </echo>

                <!-- build the filter to remove R, Manifest, BuildConfig -->

                <getemmafilter
                    appPackage="${project.app.package}"
                    filterOut="emma.default.filter"
                    libraryPackagesRefId="project.library.packages" />

                <!--
                         define where the .em file is going. This may have been
                         setup already if this is a library




                -->

                <property
                    name="emma.coverage.absolute.file"
                    location="${out.absolute.dir}/coverage.em" />

                <!-- It only instruments class files, not any external libs -->

                <emma enabled="true" >

                    <instr
                        instrpath="${out.absolute.dir}/classes"
                        metadatafile="${emma.coverage.absolute.file}"
                        mode="overwrite"
                        outdir="${out.absolute.dir}/classes"
                        verbosity="${verbosity}" >

                        <filter excludes="${emma.default.filter}" />

                        <filter value="${emma.filter}" />
                    </instr>
                </emma>
            </then>
        </if>

        <!-- if the project is a library then we generate a jar file -->

        <if condition="${project.is.library}" >

            <then>

                <echo level="info" >
Creating library output jar file...




                </echo>

                <property
                    name="out.library.jar.file"
                    location="${out.absolute.dir}/classes.jar" />

                <if>

                    <condition>

                        <length
                            length="0"
                            string="${android.package.excludes}"
                            trim="true"
                            when="greater" />
                    </condition>

                    <then>

                        <echo level="info" >
Custom jar packaging exclusion: ${android.package.excludes}




                        </echo>
                    </then>
                </if>

                <propertybyreplace
                    name="project.app.package.path"
                    input="${project.app.package}"
                    replace="."
                    with="/" />

                <jar destfile="${out.library.jar.file}" >

                    <fileset
                        dir="${out.classes.absolute.dir}"
                        excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/BuildConfig.class"
                        includes="**/*.class" />

                    <fileset
                        dir="${source.absolute.dir}"
                        excludes="**/*.java ${android.package.excludes}" />
                </jar>
            </then>
        </if>
    </do-only-if-manifest-hasCode>

</target>

 

3.  配置eclipse

 

在eclipse中,右键项目,选择属性Properties

Properties>> Java Compiler ,勾上Enable,确保编译器版本为1.6以上

Properties >> Java Compiler >> Annotation Processing >> 勾选Enable annotation processing(开启)

Properties >> Java Compiler >> Annotation Processing >> Factory Path >> 添加jar包,选择该项目,打开compile-libs目录下的androidannotations-2.7.1.jar

 

4,重新编译项目

 

选择eclipse菜单,Project>>clean>>选上该项目>>确定clean

 

5,至此,AndroidAnnotations配置完成

 

这里附上一个简单的Demo,可以导入后,继续Ant和eclipse的配置即可正常使用,如有问题,请留言。

AndroidAnnotationsDemo