Android进阶之路-自定义ButterKnife(下)

Android进阶之路-自定义ButterKnife(下)

自定义butterknife(上)
自定义butterknife(中)
自定义butterknife(下)

本篇实现效果:
在这里插入图片描述
在这里插入图片描述

本篇可以学到两个技能

  1. 使用动态累加载封装绑定API
  2. Jitpack上构建,制作个人依赖库

背景

前面自定义ButterKnife(中),已经实现ButterKnife的功能。但是仅仅在同一个project下,移植性较低,如果给其他项目用,我们需要复制gavin-butterknife-annotation,gavin-butterknife-processor两个module代码,毫无高端大气的感觉,对于有追求的人是绝对不会被允许的。

依然保持着靓仔的风范!

正文

分几个步骤优化一下我们的项目如下:

  1. 动态类加载封装API
  2. 在 JitPack 完成构建获取依赖库路径
  3. 在项目使用个人依赖库完成ButterKnife功能

动态类加载封装API

gavin-butterknife module中新建GavinButterKnife
在这里插入图片描述

public class GavinButterKnife {
    public static void bind(Activity activity) {
//       动态类加载
        try {
            Class<?> obj = Class.forName(activity.getClass().getName() + Constant.CODE_CLASS_EXT_NAME);
            GavinViewBinder viewBinder = (GavinViewBinder) obj.newInstance();
            viewBinder.bind(activity);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

从上面的代码可以看到,我们创建GavinViewBinder对象没有通过new的方式,而是通过className字符串去获取到一个新的GavinViewBinder对象。实际上是jvm帮我们自动调用他的无参构造方法来生成新对象了,当然,如果你的构造方法有入参,也是可以动态类加载生成对象的。不展开讲了,想要了解的自行百度。

完成后,app module测试工程依赖这个module

//:app/build.gradle
dependencies{
	implementation project(path: ':gavin-butterknife')
}

TestActivity引用
在这里插入图片描述

在 JitPack 完成构建获取依赖库路径

到github分别为注解和注解编译器新建一个工程
GavinButterKnifeAnnotation
gavinbutterknifecompiler
注意:project 和module的区别必须理解清楚。
在这里插入图片描述

project作用
GavinButterKnife暴露API公调用方使用
gavinbutterknifecompiler注解编译器
GavinButterKnifeAnnotation注解

下面我们就用结构最简单的GavinButterKnifeAnnotation工程来说:

1、GitHub创建Project仓库

GavinButterKnifeAnnotation

在这里插入图片描述

2、project下的build.gradle引入依赖插件地址
//...
buildscript {
    dependencies {
      //...
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'//公共仓库
      //...
    }
}

allprojects {
    repositories {
      //...
        maven {url "https://jitpack.io" }
    }
}
//...
在需要被构建成依赖库的module/Java library下,build.gradle声明Group

这里我们将前面对应功能的module :gavin-butterknife-annotation 复制过来

记得根目录的settings.gradle里加上模块声明
include ':gavin-butterknife-annotation'

在这里插入图片描述

//:gavin-butterknife-annotation/build.gradle
plugins {
	//...
    id 'com.github.dcendents.android-maven'
}
// group='com.github.你的github用户名'
group='com.github.KubyWong'
//...
Github上打Release标签

在这里插入图片描述
在这里插入图片描述

在JitPack进行构建打包

打开https://jitpack.io/,用github账号登录,把要打包到公共仓库的github地址粘贴上去,点击绿色按钮,会展示出刚才我们打release标签的版本。
在这里插入图片描述
这里会自动构建,如果不会的话,点击status下的绿色按钮。构建成功后log是绿色的,失败则是红色。在这里插入图片描述

好了,到这里我们就成功生成个人的依赖库了。努力了这么久,给大家放个福利。评论区告诉我,有没有初恋的感觉
==等待图片本人授权中...====等待图片本人授权中...====等待图片本人授权中...====等待图片本人授权中...====等待图片本人授权中...====等待图片本人授权中...====等待图片本人授权中...====等待图片本人授权中...==

测试效果

这里我偷下懒,直接在GavinButterKnife工程下测试。

在这里插入图片描述
在这里插入图片描述

拓展

如果全部放在同一个项目,多个module一起上传也是可以的,但是注解编译器的引入方式与普通的依赖库引入有别,关键字不一样,分别是annotationProcessorimplementation。所以我们还是需要分开制作依赖库。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值