昨天和一个好哥们一起探讨了一下AndroidAnnotations这个框架,发现网上面好多的博客都无法实现,因为在使用AndroidAnnotations需要在android studio上配置环境,很是有些麻烦。
在使用完AndroidAnnotations后,我感觉对eventBus, Butterknife都没有好感了,因为AndroidAnnotations这个框架实在是太好用了,现在就将配置过程放在下面;
实现AndroidAnnotations这个框架,所以新建一个工程,在新建的工程下面,我们进入Project的目录查看方式
大家可以看到上图有两个build。gradle 文件,一个是在app文件夹下,一个是在MyApplication下的build。gradle,那么下面就要在这两个build.gradle下面做文章了,
首先打开MyApplication下的build。gradle我们需要在
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
中插入代码
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
最后效果:
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
//在此处插入gradle配置目前最高是1.8版本,
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
这样MyApplication下的build.gradle文件就配置完了,配置好的MyApplication中的build.gradle完整代码:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
再来配置app下的build.gradle:
打开build.gradle:
加入
apply plugin: 'android-apt'
def AAVersion = '4.0.0'
这段代码在任意地方都可以放,但是不要放在括号内;
接着还要加入:
apt {
arguments {
androidManifestFile variant.outputs[0]?.processResources?.manifestFile
//这里一定要放你自己的包名
resourcePackageName "com.example.administrator.myapplication"
}
}
加入规则与上面是一致的;
然后在dependencies中需要加入两行代码
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
加入后的效果如下:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.0.0'
//此处为加入后的代码
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
这样我们的环境配置就算是完成了,配置好的app中的build.gradle完整代码:
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def AAVersion = '4.0.0'
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.example.administrator.myapplication"
minSdkVersion 15
targetSdkVersion 24
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:24.0.0'
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt {
arguments {
androidManifestFile variant.outputs[0]?.processResources?.manifestFile
resourcePackageName "com.example.administrator.myapplication"
}
}
然后还需要点击如下图的按钮,进行重新buiild
重新build后 如果报错,我们试着将AndroidManifest.xml中的所有的Activity后面都加上下划线,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
//注意看:MainActivity_;跟原来的不一样哦,后面的Activity都一样的
<activity android:name=".MainActivity_">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//注意看:MainActivity_;跟原来的不一样哦,后面的Activity都一样的
<activity android:name=".Main2Activity_"></activity> </application></manifest> 加完后继续build试试,但是有时候还是会出错,可以尝试一下运行程序,最好在程序新建的时候,搭配环境就直接运行一次,只要运行成功了就没问题。然后再做后面的功能实现
配置了AndroidAnnotations框架的后 我们就可以开始使用注解了:如下
原来的Activity中onCreate中是这样的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
有了AndroidAnnotations框架。后我们就不用这样了
注意看下面的代码:
package com.example.administrator.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
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
EditText editview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
}
@Click
public void jump_button(View view) {
Main2Activity_.intent(this).extra("msg", editview.getText().toString()).start();
}
}
在我的代码中
@ViewById
EditText editview;
是注册EditText这个控件
@Click
public void jump_button(View view) {
Main2Activity_.intent(this).extra("msg", editview.getText().toString()).start();
}
这段代码的功能是:当按下按钮时将第一个Activity中的EditView中的内容发送到第二个页面去,并且跳转到第二个页面,注意看我并没有用StartActivity,而是用的这个方法
Main2Activity_.intent(this).extra("msg", editview.getText().toString()).start();
这样就跳到第二个界面去了,注意看我第二个activity中的代码:
package com.example.administrator.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.ViewById;
@EActivity(R.layout.activity_main2)
public class Main2Activity extends AppCompatActivity {
@Extra
public String msg;
@ViewById(R.id.textview)
public TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main2);
}
@Override
protected void onResume() {
super.onResume();
textview.setText(msg);
}
}
这样我们的AndroidAnnotations这个框架就搭建成功了,本文主要讲解集成
AndroidAnnotations框架,对于使用不做过多的叙述。
具体应用还需要多研究,原始框架的github地址在:
https://github.com/excilys/androidannotations
程序实例下载:点击打开链接
************************************************************************************************
更新部分
关于支持到AndroidStudio3.0以上遇到的大坑:
相关配置 app上 的build.gradle
def AAVersion = '4.5.2' //保持最新版本,不然可能会编译不了//https://github.com/androidannotations/androidannotations/wiki右上方查看版本
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.zs.androidannotationstest"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// 添加下面这一段到defaultConfig下面
javaCompileOptions {
annotationProcessorOptions {
//这里的包名和applicationId一致
arguments = ['resourcePackageName': "com.example.zs.androidannotationstest"]
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
implementation "org.androidannotations:androidannotations-api:$AAVersion"
}
MyApplication下的build。gradle下的配置:
buildscript {
repositories {
jcenter()
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
mavenLocal()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在编译过程中会出现:
Compilation failed; see the compiler error output for details.
这句话,点击左边最下面红色小点点那一行可以看具体出现问题的地方:
The AndroidManifest.xml file contains the original component, and not the AndroidAnnotations generated component. Please register Main2Activity_ instead of Main2Activity
似乎好像是AndroidManifest里面没有注册Main2Activity_这个鬼;
在AndroidManifest里面确实也没有生成这个鬼东西:
如果我们手动添加会怎样?
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" 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> <activity android:name=".Main2Activity"></activity> <activity android:name=".Main2Activity_"></activity> </application>
很明显,没有这个东西,添加进去后这个activity不存在,这时候我们在重新编译一下:
编译后就好了,程序也可以正常执行了;
这就是Androidstudio升级到3.0以上集成的方式,看起来还是很坑的一个框架啊
这就是Androidstudio升级到3.0以上集成的方式,看起来还是很坑的一个框架啊
这就是Androidstudio升级到3.0以上集成的方式,看起来还是很坑的一个框架啊
这就是Androidstudio升级到3.0以上集成的方式,看起来还是很坑的一个框架啊