我们开发过程中都需要写些findViewByid、serOnclickListener等类似的代码,虽然不费事,但是一个项目下来,工作量还是很大的。为了节省工作量,运生了很多对应的注解框架。网上的博客、身边的同事大多使用的是 xUtils、ButterKnife实现注解,我初次使用的也是ButterKnife。然而,今天小试了下Android Annotations注解框架,用起来确实比ButterKnife爽。其他的介绍和废话就不多说了,下面就介绍如何在


Android Studio中配置Android Annotations框架,以及我所发现的坑。
AA官网:http://androidannotations.org/
AA Github:https://github.com/excilys/androidannotations
AA Github wiki页:https://github.com/excilys/androidannotations/wiki
AA Github Gradle配置页:https://github.com/excilys/androidannotations/wiki/Building-Project-Gradle
以上网址是很有用的,尤其是Gradle配置页。AA框架配置比较蛋痛,看似简单,但是有很多小细节。我今天在网上搜了很多博客,都没弄成功,总是报错。英文不好而官网的配置有一直没找到。其实不用再去看其他人写的博客文档了,或过时或错误很误导人。接下来我带领大家根据官方Gradle配置搭建和使用AA框架。


一、新建一个项目。
二、在project根目录下的build.gradle文件中,添加:

Android Studio配置Android Annotations框架详解--说说那些坑_第1张图片

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

这个地方的版本号是1.8,就用最新的吧,怎么知道这个最新的版本号呢?去这儿查:右键整个项目-》Open Module Settings-》点击左侧的app-》点击右边顶部的Dependencies-》右上角的+号-》选择1.Dependency-》输入com.neenbedankt.gradle.plugins:android-apt 回车查询版本号。
这个文件的配置就完成了。官网文档和许多网上的博客都说还要修改依赖库,即mavenCentral()发现也可以不改,无所谓。

apply plugin: 'com.android.application'  apply plugin: 'android-apt'  //1处添加  def AAVersion = '4.0.0'    android {      compileSdkVersion 23      buildToolsVersion "24.0.0"        defaultConfig {          applicationId "com.znke.androidannotations_test"          minSdkVersion 15          targetSdkVersion 23          versionCode 1          versionName "1.0"      }      buildTypes {          release {              minifyEnabled false              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'          }      }  }    dependencies {      compile fileTree(include: ['*.jar'], dir: 'libs')      testCompile 'junit:junit:4.12'      compile 'com.android.support:appcompat-v7:23.4.0'        apt "org.androidannotations:androidannotations:$AAVersion"  //2处添加      compile "org.androidannotations:androidannotations-api:$AAVersion"  }    apt {  //3处添加      arguments {          androidManifestFile variant.outputs[0]?.processResources?.manifestFile//new style          //androidManifestFile variant.processResources.manifestFile           //old style          resourcePackageName "com.znke.androidannotations_test"                //your pakcage name      }  } 

说明:apply plugin: 'android-apt'  是引用下面的这部分:
三、接下来在app module下的build.gradle文件中添加配置:

apt {      arguments {          androidManifestFile variant.outputs[0]?.processResources?.manifestFile//new style          //androidManifestFile variant.processResources.manifestFile           //old style          resourcePackageName "com.znke.androidannotations_test"                //your pakcage name      }  }
apt这部分是需要查找和解析androidManifestFile文件吧!切记,需要注意的地方
androidManifestFile variant.outputs[0]?.processResources?.manifestFile

这句话,中间有问号,根据官网的来。有很多博客上都不是这么写的,坑死我了,总是报属性为空错误。里面的resourcePackageName可不写,无大碍。def AAVersion = '4.0.0'部分,就是定义了一个变量名AAVersion的值是'4.0.0',此处版本号用最新的吧。在dependencies 节点中添加

apt "org.androidannotations:androidannotations:$AAVersion"  compile "org.androidannotations:androidannotations-api:$AAVersion"

两句,引用上面的版本号,貌似也可直接把$AAVersion替换成4.0.0版本号,去掉def AAVersion = '4.0.0',试过可行。算了还是根据上面官网的配置来吧。
def AAVersion = '4.0.0'里面的版本号根据org.androidannotations:androidannotations去搜索查询(依照最开始说的方式查询)。

配置完毕。接下来做个小例子试试手。第一个界面,一个输入框和一个按钮。点击按钮获取值,跳转到第二个页面并显示值。就这么简单,看看AA注解怎么用。上代码:


AndroidManifest.xml                                                                                                //对,没错,最后面加下划线      

MainActivity  @EActivity(R.layout.activity_main)  //注入页面  public class MainActivity extends AppCompatActivity {        @ViewById      public EditText username;//如果页面的id与此处对象名一样,@ViewById后面可以省略      @Override      protected void onCreate(@Nullable Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          //setContentView(R.layout.activity_main);//这儿不要了            //跟UI无关的数据初始化可以写在这里        }        @Click      void submit(){//如果页面button的id和方法名一样,@Click后面可以省略          //跳转到Main2Activity界面,看看这个跳转牛逼不,包含了intent,extra带参数,start启动。          Main2Activity_.intent(this).extra("msg",username.getText().toString()).start();      }  }

R.layout.activity_main                  

Main2Activity  @EActivity(R.layout.activity_main2)  public class Main2Activity extends AppCompatActivity {        @ViewById      public TextView text;        //获取intent里面的扩展值      @Extra      public String msg;        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          //@EActivity(R.layout.activity_main2)处已经setContentView          //setContentView(R.layout.activity_main2);            /**           * 请关注Main2Activity_源码分析           * 懂我的意思吗?           */          /*          Main2Activity_类的定义          public final class Main2Activity_ extends Main2Activity                  implements HasViews, OnViewChangedListener {*/            /*          Main2Activity_类的onCreate方法          @Override          public void onCreate(Bundle savedInstanceState) {              ......              super.onCreate(savedInstanceState);              ......              setContentView(R.layout.activity_main2);          }*/      }        @Override      protected void onStart() {          super.onStart();            text.setText(msg);        }  }

此文件中,我为什么没有吧text.setText(msg);放在onCreate方法中,而放在了onStart中?你试试,根据错误排查。


R.layout.activity_main2            

代码使用部分,初略的贴出来了,有注释。
本文重点说配置,正确引导初学者。  



demo下载





更多相关文章

  1. MVP框架搭建
  2. Android tree应用框架
  3. Android主流IOC框架浅析(Java注解反射原理)
  4. android框架设计
  5. Android注解框架 AndroidAnnotations
  6. Android获取手机型号,系统版本,App版本号等信息
  7. android studio中AndroidJUnit4单元测试注解错误和recyclerview-
  8. 直播源码用Glide框架缓存压缩图片做一个网络图片查看器
  9. slidingmenu框架

随机推荐

  1. Retrofit 原理浅析
  2. Android调用ITelephony类的endCall()方法
  3. Android中解析doc、docx、xls、xlsx格式
  4. android 启动模式的坑
  5. 【Android】AlertDialog与ListAdapter
  6. Android显示PDF文件之iText
  7. 利用Android提供的标签对UI进行复用
  8. Android:Android O hidl简述
  9. BroadcastReceiver 10秒 ANR
  10. android读取大图片并缓存