开源项目收集我的Android开源之旅

XPage系列|是时候抛弃ButterKnife了

2021-08-10  本文已影响0人  xuexiangjys

前言

作为 X-Library系列框架 的灵魂所在,XPage 开源两年以来,一直致力于降低Fragment使用的难度,努力实现一个Activity多Fragment的Android开发模式。

前段时间, 在观望了许久之后, 我终于更新了Android Studio的最新版本(北极狐), 发现项目中使用ButterKnife注解id的代码出现了警告,警告信息如下:

Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes

警告信息告诉我们在Gradle 5.0的插件中Resource 的Id值将不会再是final类型,因此应该避免在注解属性中使用Id。这意味着如果我们把Gradle插件升级到5.0版本之后ButterKnife将无法再被使用!而且在ButterKnife的官方文档上也看到了ButterKnife被标注弃用的信息:

image

因为当初设计XPage是为了能够更方便的使用Fragment, 所以就默认集成了ButterKnife. 如果我还想继续使用XPage的话, 就不得不把Gradle插件降到5.0版本以下, 这在ButterKnife被废弃, Viewbinding取而代之的大趋势下, 显然是不合适的.

果不其然, 我的XPage的开源项目很快就被使用者提了去除ButterKnife的issue, 具体如下:

image

这样看来, XPage去除ButterKnife依赖是势在必行的, 于是就有了这次XPage 3.3.0版本的升级.

升级后有什么变化

这次升级主要包含了两个部分: 使用gson代替fastjson去除butterknife依赖, 全方面向Google看齐。

使用gson代替fastjson

为什么使用gson代替fastjson呢? 我主要是出于以下两点考虑:

去除butterknife依赖

去除butterknife依赖, 使用ViewBinding代替是趋势所向. 那么使用ViewBinding代替有哪些好处呢? 下面我简单列举一下:

升级3.3.0版本注意事项

依赖发生变化

3.3.0版本之后无需依赖butterknife.

dependencies {
  ...
  implementation 'com.github.xuexiangjys.XPage:xpage-lib:3.3.0'
  annotationProcessor 'com.github.xuexiangjys.XPage:xpage-compiler:3.3.0'
}
dependencies {
  ...
  // XPage
  implementation 'com.github.xuexiangjys.XPage:xpage-lib:3.2.0'
  annotationProcessor 'com.github.xuexiangjys.XPage:xpage-compiler:3.2.0'
  // ButterKnife的sdk
  implementation 'com.jakewharton:butterknife:10.1.0'
  annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
}

接口发生变化

为了能够让XPage更好地使用上ViewBinding, 我对XPageFragment以及XPageActivity的部分接口做出了调整.

    /**
     * 加载控件
     *
     * @param inflater  inflater
     * @param container 容器
     * @return 根布局
     */
    protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
    /**
     * 获取自定义根布局
     *
     * @return 自定义根布局
     */
    protected View getCustomRootView() {
        return null;
    }

混淆配置发生变化

由于此次XPage升级使用gson代替了fastjson, 因此混淆配置需要进行修改.

# gson
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn sun.misc.**
-keep class com.google.gson.examples.android.model.** { <fields>; }
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken

# xpage
-keep class com.xuexiang.xpage.annotation.** { *; }
-keep class com.xuexiang.xpage.config.** { *; }
# fastjson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }
-keepattributes Signature

# xpage
-keep class com.xuexiang.xpage.annotation.** { *; }
-keep class com.xuexiang.xpage.config.** { *; }

模板工程

以上的升级内容, 我已在最新的模板工程中做了相应的更新, 想偷懒的同学可以直接拿模板工程使用.

相关链接

最后

非常感谢大家对XPage 的支持,喜欢的小伙伴可以到项目的Github主页:https://github.com/xuexiangjys/XPage 点击star支持一下哦!

我是xuexiangjys,一枚热爱学习,爱好编程,致力于Android架构研究以及开源项目经验分享的技术up主。获取更多资讯,欢迎微信搜索公众号:【我的Android开源之旅】

上一篇下一篇

猜你喜欢

热点阅读