昨天和一個好哥們一起探討了一下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以上集成的方式,看起來還是很坑的一個框架啊