1 | ############################################# |
Android代码混淆及ProGuard手册
为什么把这三个内容放到一起说?因为在 Android Gradle 中配置方法基本是在一起的。
官方说明如下:
为了尽可能减小应用的大小,您应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,您还会受益于两项功能,一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功能会采用更积极的策略来进一步减小应用的大小。本页介绍 R8 如何为项目执行这些编译时任务,以及您如何对这些任务进行自定义。
当您使用 Android Gradle 插件 3.4.0 或更高版本构建项目时,该插件不再使用 ProGuard 执行编译时代码优化,而是与 R8 编译器协同工作,处理以下编译时任务:
- 代码缩减(即摇树优化):从应用及其库依赖项中检测并安全地移除不使用的类、字段、方法和属性(这使其成为了一个对于规避 64k 引用限制非常有用的工具)。例如,如果您仅使用某个库依赖项的少数几个 API,那么缩减功能可以识别应用不使用的库代码并仅从应用中移除这部分代码。如需了解详情,请转到介绍如何缩减代码的部分。
- 资源缩减:从封装应用中移除不使用的资源,包括应用库依赖项中不使用的资源。此功能可与代码缩减功能结合使用,这样一来,移除不使用的代码后,也可以安全地移除不再引用的所有资源。如需了解详情,请转到介绍如何缩减资源的部分。
- 混淆:缩短类和成员的名称,从而减小 DEX 文件的大小。如需了解详情,请转到介绍如何对代码进行混淆处理的部分。
- 优化:检查并重写代码,以进一步减小应用的 DEX 文件的大小。例如,如果 R8 检测到从未采用过给定 if/else 语句的
else {}
分支,则会移除else {}
分支的代码。如需了解详情,请转到介绍代码优化的部分。默认情况下,在构建应用的发布版本时,R8 会自动执行上述编译时任务。不过,您也可以停用某些任务或通过 ProGuard 规则文件自定义 R8 的行为。事实上,R8 支持所有现有 ProGuard 规则文件,因此您在更新 Android Gradle 插件以使用 R8 时,无需更改现有规则。
开启混淆功能
上面没有提到的一个代码混淆的重要作用:我们知道 apk 文件是相对容易被反编译的,未加混淆的 apk,反编译后基本裸奔。而混淆的 apk 即使被反编译,类名与变量名都会处理成无意义的字符,很大程度上降低了源码的可读性。
Jetpack架构组件之Room
Entity(实体)
一个 Entity 对应于数据库中的一张表。Entity 类是 Sqlite 表结构对 Java/kotlin 的映射,在 Java 中可以看作一个 Model 类。
Entity(注解实体类)
1 | @Entity(tableName = "word_table") |
每个实体必须至少有 1 个使用 PrimaryKey 注释的字段。您还可以使用 primaryKeys 属性来定义主键。
Linux Sed命令详解
概述
sed
是stream editor
的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为"pattern space"
,接着用sed
命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有
改变,除非你使用重定向存储输出。
语法
命令格式
sed [option] 'command' input_file
TypeScript学习笔记 - 变量声明
TypeScript学习笔记 - 基础类型
布尔值(boolean)
1 | let isDone: boolean = false; |
数字(number)
所有数字都是浮点数。 这些浮点数的类型是 number
。
1 | let decLiteral: number = 6; |
TypeScript学习笔记 - 接口
1 | interface LabelledValue { |
1 可选属性
接口里的属性不全都是必需的。
有些是只在某些条件下存在,或者根本不存在。
带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?
符号。
1 | interface SquareConfig { |
TypeScript学习笔记 - 额外的属性检测
先来看个例子:
1 | interface Config { |
我们传入的参数是widdth
,并不是width
。
此时TypeScript会认为这段代码可能存在问题。对象字面量当被赋值给变量或作为参数传递的时候,会被特殊对待而且经过“额外属性检查”。
如果一个对象字面量存在任何“目标类型”不包含的属性时,你会得到一个错误。
Docker命令大全
1. Docker 引擎命令
1.1 Docker version 命令
docker version : 显示 Docker 版本信息。
1 | Usage: |
1.2 Docker info 命令
Android 控件缩写
控件 | 缩写 | 控件 | 缩写 | 控件 | 缩写 |
---|---|---|---|---|---|
TextView | txt | CheckBox | chk | Switch | sbtn |
EditText | edt | RadioGroup | rgrp | ToggleButton | tbtn |
Button | btn | RadioButton | rbtn | ImageView | img |
ViewPager | vp | RecyclerView | rv | ||