安卓框架搭建(二)引入第三方插件butterknife

前言:

在项目开发中难免会引入一些第三方插件 如 butterknife , databanding 等id查找相关 最为常见 , 这里简单介绍一下常用的butterknife在多模块中的引入方式 及注意事项

项目(project)下的build.gradle内增加

classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'

如:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: "config.gradle"
buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
//引入butterknife插件
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

在公共配置中加入butterknife 库

//文件内部使用 
def butterknifeLatestReleaseVersion = '8.5.1' //butterknife插件的版本
def supportLibraryVersion = '27.1.1'
//外部使用的安卓版本相关
ext {
    applicationId = 'com.yc.androidarchitecture'
    compileSdkVersion = 27
    targetSdkVersion = 27
    minSdkVersion = 19
    buildToolsVersion = "27.1.1"
    versionCode = 0
    versionName = "1.0.0"
}

//compile依赖的第三方库
ext.deps = [
        supportv4          : "com.android.support:support-v4:$supportLibraryVersion",
        supportv7          : "com.android.support:appcompat-v7:$supportLibraryVersion",
        recyclerviewv7     : "com.android.support:recyclerview-v7:$supportLibraryVersion",
        constraintlayout   : 'com.android.support.constraint:constraint-layout:1.1.2',
//增加butterknife 插件相关的库 (版本用内部定义的方式,方便管理)      
  butterknife        : "com.jakewharton:butterknife:$butterknifeLatestReleaseVersion",
        butterknifeCompiler: "com.jakewharton:butterknife-compiler:$butterknifeLatestReleaseVersion",
]

然后在模块中引入插件 `如app主模块

apply plugin: 'com.android.application'
//引入butterknife插件
apply plugin: 'com.jakewharton.butterknife'
android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    defaultConfig {
        applicationId rootProject.ext.applicationId
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation project(':homelibrary')
    implementation project(':mylibrary')
//添加butterknife插件
    implementation deps.butterknife
    annotationProcessor deps.butterknifeCompiler

}

在app中的用法 大家都很熟悉 直接快捷键 即可  这里不在做阐述

下面说一下在modle中的用法  及遇到的坑

引入方式与 app引入方式一致, 但是如果在公共modle中引入 插件后  在主工程中或者 其他模块中想要用 butterknife插件 还要在添加一次插件 具体的原因可以去官网查看  这里不过详细分解 , 并且在公共模块中最好不要用api引入的方式 否则 在其他模块中 导入包的时候  会提示  在其他库中的包 ,  用起来比较麻烦  所以直接用 implementation  只在本库中用即可 这样 butterknife在编译的时候 只编译到当前的modle中 

用法 及  注意事项

对于在app中习惯快捷键的同学 在这里就会遇到问题  在用快捷键生成之后 会报错 原因是 butterknife 在modle中用的时候 1是需要8.4版本以上  以及 注解不在是 用 R  而是 用 R2  来寻找控件 

但是在在点击事件的时候 如果  用下面的方法 是错误的 

    @BindView(R2.id.home)
    TextView mHome;
    @BindView(R2.id.home_to_my)
    TextView mHomeToMy;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        ButterKnife.bind(this);
    }



    @OnClick({R2.id.home, R2.id.home_to_my})
    public void onViewClicked(View view) {

//错误写法

//点击事件 如果也用 R2 是不起作用的
        switch (view.getId()) {
            case R2.id.home:
                Toast.makeText(this,"这是首页",Toast.LENGTH_SHORT).show();
                break;
            case R2.id.home_to_my:
                Toast.makeText(this,"跳转到到我的页面",Toast.LENGTH_SHORT).show();
                break;
        }
    }

正确写法:

    //在点击事件的id 用 R2 而不是用R 
    @OnClick({R2.id.home, R2.id.home_to_my})
    public void onViewClicked(View view) {

    //正确写法

    //不能直接用swich 而是用if else 的方式  并且id不能用R2 而是用R 
        if (view.getId() == R.id.home) {
            //点击事件处理
         Toast.makeText(this,"这是首页",Toast.LENGTH_SHORT).show();
        } else if (view.getId() == R.id.home_to_my) {
            //点击事件处理
         Toast.makeText(this,"跳转到到我的页面",Toast.LENGTH_SHORT).show();
        } 

    } 

注意 :

在各个modle 中都要引入 插件butterknife库 , 如app  , homelibrary , mylibraty 等 ,如果公共库 common要用的话也要引入 ,并且注意引入方式要是 implementation 方式

以上就是多模块引入 butterknife 的全部详解 

如有不了解的 可以去github下载源码 基础部分为分支2

github项目地址 dev2分支

或 加入安卓开发交流群:安卓帮595856941

相关链接:

下一篇:

安卓框架搭建(三)Base类的封装及工具类合集

猜你喜欢

转载自blog.csdn.net/q9104422999/article/details/81201245
今日推荐