BlogList
BlogList copied to clipboard
我的博文列表,按系列分类,方便查找。地址:https://flywith24.gitee.io/
## 前言 市面上权限请求的库很多,而前段时间官方刚刚将 `requestPermissions()` + `onRequestPermissionsResult()` API 弃用,那么官方的替代方案是什么呢?本文将介绍如何借助 Activity Result API 进行权限请求以及如何使用 Kotlin 扩展函数自己封装一个权限请求库 ## Activity Result API 在 Android Jetpack `Activity 1.2.0-alpha02` 和 `Fragment 1.3.0-alpha02` 中,Google 提供了全新的 **Activity Result...
## 前言 很高兴见到你! 基于搞一个多人协作项目的想法,我们首先找到一个切入点:提供了 [开源项目:Jetpack 从 Java 到 Kotlin 无痛上车指南](https://juejin.im/post/5edf3397e51d4578587769ca) 而今天,我们的多人协作的想法又向前迈进一步,就是这——[ **Motion 挑战**](https://github.com/Jetpack-Missionary/MotionChallenge) ## Motion 挑战 Android Studio 4.0 为我们提供了全新的工具:`MotionEditor`,得益于它,我们创建动画变得十分简单 在此我们发起一个 Motion 挑战,欢迎小伙伴发挥自己的想象力,将原创作品与我们分享 ### 参与方式 - fork [该项目](https://github.com/Jetpack-Missionary/MotionChallenge) - 创建自己的动画并录制显示...
## buildSrc 的缺陷 Android 开发中统一不同 module 的依赖版本十分重要,传统的方式是使用 ext 的方式  之前我发过关于使用 buildSrc 简化项目中 gradle 代码的译文:[什么?项目里gradle代码超过200行了!你可能需要 Kotlin+buildSrc Plugin](https://juejin.im/post/5e22c2ce6fb9a02ff67d41c3) 该种方式可以很好的管理 gradle 的公共配置,这其中当然包括依赖版本  如图,在使用依赖时有代码提示,而且可以点击进入查看 但是由于 buildSrc 是对全局的所有 module 的配置,因此在构建速度上会慢一些。那么有没有一个更纯净的方式来配置依赖版本呢? 今天我们来介绍一种新的方式 ## 自定义...
## 关于 LiveData 两个常用的姿势 ### 使用包装类传递事件 我们在使用 LiveData 时可能会遇到「粘性」事件的问题,该问题可以使用包装类的方式解决。解决方案见 [[译] 在 SnackBar,Navigation 和其他事件中使用 LiveData(SingleLiveEvent 案例)](https://juejin.im/post/5b2b1b2cf265da5952314b63#heading-7) 使用时是这样的 ``` kotlin class ListViewModel : ViewModel { private val _navigateToDetails = MutableLiveData() val navigateToDetails...
`androidx navigation 2.3.0` 加入了对 `dynamic feature module` 的导航支持,因此我们利用这个来分离出多个功能 module 来实现模块化  ## 国内基本不用的 dynamic feature module [Android App Bundle](https://developer.android.com/guide/app-bundle) 是官方 18 年推出的动态发布方案,类似国内各种插件化方案。不过它需要 Google Play Store 支持,这导致在国内无法使用 借着 navigation...
## 新的图片加载库——Coil [Coil](https://coil-kt.github.io/coil/) 是 [Instacart](https://www.instacart.com/) 团队研发的新的的图片加载库,它使用了很多高级功能,例如协程,`Okhttp`,`androidx.lifecycle`。`Coil` 还包括一些高级功能,例如图像采样,有效的内存使用以及请求的自动取消/暂停 默认情况下 `Coil` 与 R8 完全兼容,开箱即用,不需要添加额外的规则。如果使用 Proguard ,您可能需要为 [Coroutines](https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-coroutines-core/jvm/resources/META-INF/proguard/coroutines.pro), [OkHttp](https://github.com/square/okhttp/blob/master/okhttp/src/main/resources/META-INF/proguard/okhttp3.pro) 和 [Okio](https://github.com/square/okio/blob/master/okio/src/jvmMain/resources/META-INF/proguard/okio.pro) 添加规则 ## Coil 的优势 - 快速:`Coil` 进行了很多优化,包括内存和磁盘缓存,对内存中的图像进行采样,重新使用位图,自动暂停/取消请求等等 - 轻量:`Coil` 在您的APK中添加了约 2000 种方法(对于已经使用...
## 前言 越来越多的项目使用了组件化,组件之间的通信是一个比较重要的问题。`ARouter` 等路由方案为我们提供了解决办法。那么如果不使用 Router 如何实现组件间的界面跳转呢? ## 万能的 `setClassName` 从一个 Activity 跳转到另一个Activity 的最直接方法如下: ``` kotlin val intent = Intent(this, TestActivity::class.java) startActivity(intent) ``` 但是,采用这种方法,当原 activity 位于一个 module(例如 `FeatureA` )中,而目标 activity 位于另一个...
> 作为 Android 开发者,项目中引入 gradle 依赖是家常便饭,但是 Android Studio 自带的依赖查询工具并不好用,mac 上使用 [Alfred](https://www.alfredapp.com/) 搭配 [workflow](https://github.com/xfslove/alfred-mvns) 可以方便地 copy gradle dependency。但 [Alfred](https://www.alfredapp.com/) 是mac独占的,如果有一个跨平台的插件就好了。 「每当你在感叹,如果有这样一个东西就好了的时候,请注意,其实这是你的机会..」,于是这款插件诞生了。 ### [uTools](https://www.u.tools/) > uTools是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。 当你熟悉它后,能够为你节约大量时间,让你可以更加专注地改变世界。 来自官网介绍 这是一款类似 [Wox](http://www.wox.one/) 和 [Alfred](https://www.alfredapp.com/)...
> 本文内容来自博文 [I hated Gradle! Kotlin and the buildSrc Plugin made me love it](https://quickbirdstudios.com/blog/gradle-kotlin-buildsrc-plugin-android/) 英文好的可直接前往 注意科学上网 gradle是如何帮助我们构建的?对于这个问题大所数人可能是这样的  图片摘自上述博文 [I hated Gradle! Kotlin and the buildSrc Plugin made me love...
> 之前写过 [Android Studio 多个项目依赖同一个模块的用法](https://www.jianshu.com/p/42a2890d4b4b) 不过在使用中遇到了几个问题,编译速度慢,总是显示出关联项目。 所以决定将公共模块`aar`使用 `maven` 私服管理,在此记录之。 ### Nexus3 下载与安装 [官网](https://www.sonatype.com/nexus-repository-oss) 下载后解压,这里以windows为例 打开 `D:\nexus-3.20.1-01-win64\nexus-3.20.1-01\bin` 目录 在该目录下执行 ``` nexus.exe /run ``` 见到 `Started Sonatype Nexus OSS 3.20.1-01` 字样即成功 打开...