1. 程式人生 > >butterknife詳細使用及混淆打包和新版本(8.6.0)的使用方法

butterknife詳細使用及混淆打包和新版本(8.6.0)的使用方法

我們這寫程式碼時會寫很多findViewById(),使用ButterKnife強大的View繫結和Click事件處理功能,簡化程式碼,提升開發效率;

Androidstudio使用要引入以下依賴 Eclipse使用要到官方下載jar包 官方GitHub地址http://jakewharton.github.io/butterknife/

compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'

在專案資料夾下build.gradle檔案下新增

classpath 'com.jakewharton:butterknife-gradle-plugin:8.6.0'
新增後為
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.6.0'
}
}

混淆打包:

6.0版本要在proguard-rules.pro檔案新增

#butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector{ *; }
-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
7.0 和8.0版本ButterKnife混淆
#butterknife
-keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; }-keepclasseswithmembernames class * { @butterknife.* <fields>; } -keepclasseswithmembernames class * { @butterknife.* <methods>; }
ButterKnife新版本和老版本由於官方方法改變所以混淆方法不同(第三行不同)

6.0版本和7.0之後的版本方法使用不同(現在最新版本是8.6.0)

使用:繫結事件ButterKnife.bind(this)必須在setContentView();之後(6.0的老版本繫結事件是ButterKnife.injectView(this)

新版本使用示例

import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MainActivity";
@BindView(R.id.btn)
    Button btn;
@BindView(R.id.tabs)
    TabLayout tabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
btn.setOnClickListener(this);
initView();
initData();
}

    @Override
public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn:

                break;
}
    }
}