Android Weekly Issue #287

December 10th, 2017

Android Weekly Issue #287

圣诞节快要来了,小编也偷懒了,本期内容包括如何通过AS添加网络字体库,以及如何使用Dagger.Android等实现Clean Architecture,还包含一篇Android安全系列的文章,介绍如何实现长数据的加密.

关于Kotlin的技巧以及系统数据库的替代品,也有各有两篇系列文章,值得一看.

ARTICLES & TUTORIALS

The Android Developer’s Guide to Better Typography

文章介绍了如何利用Androis Studio为你的View添加新的Font.

在AS3.0中,可以通过从Layout的的Design Tab中的Component Tree里选择你想要添加font的View,然后在右侧的Attribute里面找到font family,然后就可以添加自己想要的font,还可以是通过Google Font Provider来的网络字体.

其会在你的res/font下生成字体配置文件,这里可以通过app:fontProviderFetchStrategy设置加载策略,如block,可以避免没下载完成字体被切.

在生成的配置文件中,还有一个比较重要的就是,res/values下面的preloaded_fonts,定义了会加载的字体名字.

Clean Architecture - Kotlin, Dagger 2, RxJava, MVVM and Unit Testing

文章介绍了Clean Architecture的结构以及如何对ViewModel进行测试(mock Repository).

值得一提的是,这里大概介绍了Dagger2.Android,帮助我们轻松的进行DI,通过ContributesAndroidInjector将zhiding的Activity生成AndroidInjector,来帮助我们更轻松的对Activity以及Fragment进行注入.

关于Dagger2.Android详情也参考之前的文章.

Secure data in Android — Encrypting Large Data

文章继续介绍如何对大量数据的加密,在Android里非对称加密RSA对加密长度有限制,并且只能在Android18以上可以设置,最大4096bit,显然不符合我们的要求.

对于Android M以上,系统的KeyStore可以支持生成对称加密秘钥了,所以我们可以直接通过生成ASE秘钥对大量数据进行对称加密.

但是对于M以下的系统,我们只能通过Java的Key Provider生成一个秘钥文件,存放在某处,这样不是非常安全.解决方案就是,通过RSA对生成的ASE秘钥进行加密后在放在储存器中,解密时先通过RSA对秘钥进行解密,然后再进而解密我们的数据. (因为KeyStore是支持生成RSA非对称秘钥,并随着App的拆卸而销毁的.)

Kotlin Playground

作者通过一个Demo记录自己的Kotlin学习之旅,并附上了一些自己的学习资料,包含视频资料哦.

6 magic sugars that can make your Kotlin codebase happier - Part 1

一个系列文章,介绍Kotlin的牛逼之处.

本篇介绍了通过seal class来将不同的类型关联起来实现更强功能的Enum,然后配合when来方便swich逻辑.

还可以将几种seal class合成Pair(left to right)或者Triple(left to mid to right)来穿给when做条件筛选.

6 magic sugars that can make your Kotlin codebase happier - Part 2

系列文章的第二篇,涉及到如何用with来简化你的代码,并且还介绍了如何封装一个具备类型检测的withCorrectType,这里涉及到一个kotlin的知识点,我们在很早之前的Weekly有提到:

就是通过inlinereified让泛型参数可以在运行时被is检测,否则泛型类型会被摸去.

Lessons from my first multiplatform Kotlin project

Kotlin 1.2推出了多平台功能的支持,其提出了将一个程序分为common module, platform moduleregular module三层,并且还提供了expectactual的新特性,可以在common层定义expect类与方法,并通过在platform层实现.

其相较于接口好的一点是,对于expect类用起来跟一个完整的类一样,可以有构造,可以实例化,可以调用所定义的expect方法.

文章介绍了自己的思路,并指出了MVP在这种跨平台代码中的妙用,让逻辑代码可以共用.

Tuning your SQLite with SQLDelight & SQLBrite: Part 1

文章介绍了SQLBrite相较于系统ContentProvider好用之处,主要是其实对系统API的Rx封装,使得整个数据库的操作做到React.

Tuning Your SQLite With SQLDelight & SQLBrite: Part 2

文章介绍了SQLDelight,它是一个通过gradle plugin将.sq文件生成Java代码的db.

如:

getImagesById:
SELECT *
FROM images
WHERE ad_id = ?
ORDER BY _id ASC;

就可以生成对应getImagesById(long ad_id)的Java代码.

LIBRARIES & CODE

Transitioner

定义两个使用ConstraintLayout封装的View,包装成一个transitioner,实现类似Shared Element的那种动画效果.

HighLite

高度基于Annotation的一个Android DB,通过@SQLiteDatabaseDescriptor,@SQLiteTable,@SQLiteColumn,@PrimaryKey等为主要注解,并且通过@JvmField支持Kotlin.

android-disposebag

通过绑定Activity或者Fragment的生命周期,初始化一个DisposeBag,将Rx的析构交给它做.支持RxJava/RxKotlin.

EasyAdapter

简化使用RecyclerView实现多类型复杂的List.

CounterView

简单的安卓计数器View控件.

Android Weekly Notes Issue #287的更多相关文章

  1. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  2. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  3. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  6. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  7. Android Weekly Notes Issue #236

    Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...

  8. Android Weekly Notes Issue #235

    Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...

  9. Android Weekly Notes Issue #234

    Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...

随机推荐

  1. iOS 输入时键盘处理问题

    最正规的办法,用通知 step 1:在进入视图的时候添加监视:(viewDidLoad什么的) //监听键盘的通知 [[NSNotificationCenter defaultCenter] addO ...

  2. 利用python深度学习算法来绘图

    可以画画啊!可以画画啊!可以画画啊! 对,有趣的事情需要讲三遍. 事情是这样的,通过python的深度学习算法包去训练计算机模仿世界名画的风格,然后应用到另一幅画中,不多说直接上图! 这个是世界名画& ...

  3. Leetcode题解(34)

    113. Path Sum II 题目 分析: 主要考察二叉树深度优先遍历(DFS),递归调用当前节点的左右结点即可,代码如下(copy网上): /** * Definition for binary ...

  4. Day1作业-模拟登录

    # /usr/bin/env python# -*- coding: utf-8 -*-# Author:jenvid.yangimport getpassimport shutiluserspwd ...

  5. 使用Mongodb+Shiro+SpringMVC实现动态权限分配

    此次的文档只对Mongodb整合Shiro并且实现动态权限分配做整理,其它的内容以后会补上. 第一步.创建在web.xml中配置 Spring .Shiro shiroFilter 过滤器是用来将请求 ...

  6. Cache 和 Buffer 都是缓存,主要区别是什么?

    存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址.当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址.如果存有该地址,则将数据返回处理器;如果没有保存该地址 ...

  7. Apache降权和禁用PHP危险函数

    测试环境: Windows Server 2003 + phpstudy 首先在win2003里运行phpstudy,这里注意需要选择应用系统服务模式,应用之后重启phpstudy. 打开系统服务(开 ...

  8. 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行

    宿主机:Ubuntu16.04 x64(Linux内核4.4.0) 交叉编译工具链:gcc-arm-linux-gnueabiarm-linux-gcc:4.4.3QEMU:2.5.0Linux ke ...

  9. How to set up Dynamics CRM 2011 development environment

    Recently I have been starting to learn Microsoft Dynamics CRM 2011 about implement plugin and workfl ...

  10. python变量命名规则

    在Python中使用变量时,需要遵守一些规则和指南.违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解.请务必牢记下述有关变量的规则.  变量名只能包含字母.数字和下划线.变量名可以字 ...