├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── mingwei │ │ └── aptdemo │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── mingwei │ │ │ └── aptdemo │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── mingwei │ └── aptdemo │ └── ExampleUnitTest.java ├── bindview-annotation ├── .gitignore ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── mingwe │ └── myanno │ ├── BindView.java │ └── OnClick.java ├── bindview-api ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── mingwei │ │ └── japapi │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── mingwei │ │ │ └── myapi │ │ │ ├── ButterKnife.java │ │ │ ├── Injector.java │ │ │ ├── Unbinder.java │ │ │ └── finder │ │ │ ├── ActivityFInder.java │ │ │ ├── Finder.java │ │ │ └── ViewFinder.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── mingwei │ └── japapi │ └── ExampleUnitTest.java ├── bindview-compiler ├── .gitignore ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── mingwei │ └── myprocess │ ├── BindViewProcessor.java │ ├── TestJavapoet.java │ ├── TypeUtil.java │ └── model │ ├── AnnotatedClass.java │ ├── BindViewField.java │ └── OnClickMethod.java ├── build.gradle ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # apt-demo 2 | ###注解处理器(Annotation Processor Tool) 3 | ####原文链接:一小时搞明白注解处理器 http://blog.csdn.net/u013045971/article/details/53509237 4 | 自定义注解处理器实现简单版的ButterKnife 5 | 1.代码少 6 | 2.一看就懂 7 | 3.适合边开车边看 8 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'com.neenbedankt.android-apt' 3 | 4 | android { 5 | compileSdkVersion 23 6 | buildToolsVersion "23" 7 | 8 | defaultConfig { 9 | applicationId "com.mingwei.aptdemo" 10 | minSdkVersion 14 11 | targetSdkVersion 23 12 | versionCode 1 13 | versionName "1.0" 14 | } 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | } 22 | 23 | dependencies { 24 | compile fileTree(dir: 'libs', include: ['*.jar']) 25 | testCompile 'junit:junit:4.12' 26 | compile 'com.android.support:appcompat-v7:23.0.1' 27 | 28 | compile project(':bindview-annotation') 29 | compile project(':bindview-api') 30 | apt project(':bindview-compiler') 31 | } 32 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/mingwei/Dev/android-sdk-mac/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/mingwei/aptdemo/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.mingwei.aptdemo; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/mingwei/aptdemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.mingwei.aptdemo; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.widget.Button; 6 | import android.widget.TextView; 7 | import android.widget.Toast; 8 | 9 | import com.mingwe.myanno.BindView; 10 | import com.mingwe.myanno.OnClick; 11 | import com.mingwei.myapi.ButterKnife; 12 | 13 | public class MainActivity extends AppCompatActivity { 14 | 15 | @BindView(R.id.btn1) 16 | public Button mBtn; 17 | @BindView(R.id.btn2) 18 | public Button mBtn2; 19 | 20 | @Override 21 | protected void onCreate(Bundle savedInstanceState) { 22 | super.onCreate(savedInstanceState); 23 | setContentView(R.layout.activity_main); 24 | ButterKnife.bind(this); 25 | mBtn.setText("按钮"); 26 | mBtn2.setText("按钮2"); 27 | } 28 | 29 | @OnClick({R.id.btn1}) 30 | public void click() { 31 | Toast.makeText(this, "show", Toast.LENGTH_SHORT).show(); 32 | } 33 | 34 | @OnClick({R.id.btn2}) 35 | public void click2() { 36 | Toast.makeText(this, "show2", Toast.LENGTH_SHORT).show(); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 |