AS3.2 和 androidx 爬坑


一、背景

前不久的 Googel IO 大会上亮相的 JetPack ,他为android 开发带来了极大地便利,于是开启了尝(爬)鲜(坑)之旅。
自从接手了一个 MVVM 架构的项目,就喜欢上了这种模式的开发,使用 Kotlin 开发,里面用到了 DatabindingLiveDataLifecyclerviewmodel 等架构组件,代码简洁,流程清晰,整个开发是十分愉快的,慢慢的习惯了用这些东西。
这些组件都是吸引人的,如果还没有了解的可以上手试试。

二、Jetpack 简介

官网介绍:Jetpack 是一套库、工具和架构指南,可以帮助我们快速轻松的构建优秀的Android应用,它提供了公共基础代码,因此我们可以专注于让自己应用独一无二的东西。

主要有三个有点:

  • 加速开发
    组件可以单独使用或者组合是使用,同时利用 Kotlin 语言功能,可以使开发效率更高。
  • 消除样板代码
    Android Jetpack管理诸如后台任务,导航和生命周期管理等繁琐的活动,因此您可以专注于什么使您的应用更棒
  • 构建搞质量健全的应用
    以现代设计实践为基础,Android Jetpack组件可降低崩溃次数并减少内存泄漏,并向后兼容

其中包含组件如下图所示:

以下是官方博客中的图,更加直白:

以上内容来自 Google 官方jetpack文档,更多 jetpack 使用及介绍相关内容请参考官方文档。

三、AS 3.2 爬坑

3.1 转换过项目为 androidx

将项目转换成了 androidx 的,具体转换步骤如下:

  • 将项目编译的sdk 版本调成 android-P
  • 从AS 菜单栏选择 Refactor -> Refactor to AndroidX ..

如下为转换前gradle文件:

如下为转换后gradle文件:

官方博客介绍:Hello World, AndroidX

更多转换库依赖可参考 Google maven repo

3.2 databinding + kotlin

习惯使用 kotlin 开发,配合 databinding 进行数据绑定,但是两者生成的 BR会冲突,解决办法是 使用 kapt 依赖 databinding, 如果 项目的是这样的:

dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
}

那么 model 中的依赖应该是下面的:

// ...
apply plugin: "kotlin-kapt"

android {
   // ...
   databinding {
       enabled = true
   }
   kapt {
       generateStubs = true
   }
}

dependencies {
    // ...
    kapt "com.android.databinding:compiler:3.1.1"
}

$\color{red}{注意: 两者依赖的版本要一致,否者编译时就会抛出异常}$

然后我的 金丝雀 中 使用的 android plugin version3.2.0-alpha16,但是 databinding compile 的版本却没有与之对应的,导致无法依赖使用,折腾了很久没有解决就只好将其移除,放弃使用。还天真的以为是 AS 的 bug ,然后傻傻的去 Issue Tracker 给 Google 提了个 bug 。

最近在 看官方文档时,发现了 $\color{red}{androidx}$,而且在访问 Google maven repo 时 也看到了很多 androidx 的身影,如下图:

3.3 navigation 使用

由于上面将项目转换成 androidx ,而使用 navigation 时,需要在xml 中使用 fragment 标签,但在运行时会抛出找不到 android.support.v4.app.Fragment的问题,

stackoverflow 上有类似的问题,在 google 的 issuetracker 上有相关bug的反馈,点击查看,官方回复下个版本修复,如下图:

$\color{red}{所以: 玩 navigation 的不要用 androidx,或者等下个版本修复}$

上述项目地址:https://github.com/imtianx/JetpackLearning

这里简记最近体验AS3.2经历的坑!


文章作者: imtianx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 imtianx !
评论
 上一篇
Docker的使用及镜像编写 Docker的使用及镜像编写
随着容器技术的普及,越来越多的事情可以在 Docker 中完成。这里简要记录 docker 的常用命令以及镜像的构建与运用。结合gitlab-ci来构建 android apk。 一、docker 安装1.Mac 安装在 mac 上,通常使
下一篇 
Vim 常用命令 Vim 常用命令
推荐几个好用的 vim 软件插件:MacVim客户端,cVim chrome插件,ideaVim idea插件,这里简记自己常用的命令。 一、vim 命令 键 说明 a 插入,ESC 退出 o/O 当前行后/前插入一行
  目录