Tip
好消息,好消息!
Android module 在 编译期 有办法使用不同的代码啦
说人话就是 : A 是一个 module , B 和 C 使用了 A 。 B 和 C 可以分别设置使用 A 里的不同的代码。这不是使用代码里的判断来进行的,而是使用 gradle 设置项目依赖完成的
用处
- 在有多个项目依赖于同一个 module 的时候,可以指定使用不同的内容来进行编译(即选择不同的文件进行打包)。
- 不同的配置使用不同的源码,源文件
- 不同的配置使用不同的资源文件
步骤如下(假设 module 名称为 A , 依赖 module 的两个 module 是 B 和 C ) :
- A module 的
build.gradle
中增加编译类型的声明。
android {
// 声明一个类型叫做 type
publishNonDefault true
flavorDimensions "type"
// type 又两个取值,一个叫做 type1 , 一个叫做 type2
productFlavors {
type1 {
dimension "type"
}
type2 {
dimension "type"
}
}
}
- 设置不同的 type 所使用的文件
- 不同的源码
- 在
src/main/java
里新建目录src/type1/java/
, 并在目录下新建对应的 package ,这样在编译type1
的时候会使用 该目录下的文件。type2
的同理。
- 在
- 不同的资源(我还未测试)
- 同上,目录为
src/type1/res
- 同上,目录为
- B module 如果要使用 A 的 type1 。在
build.gradle
中加入
android {
// 这表示对于 B module 依赖的库,默认使用其 type1 flavor ,如果没有的话, 就使用 type2 .
// 但是注意,这会应用到所有的依赖库上。
// 那为什么不单独对于某个以来进行配置呢? 因为 我不会啊。
missingDimensionStrategy 'type', 'type1', 'type2'
}
Rev
看了一些 webRTC 的知识,包括
- webRTC 的功能
- 音视频捕获输出编解码
- 信道沟通
webRTC数据通道介绍
基于 web 的 webRTC 官方demo
知乎上的一篇 webRTC 简介
Alg
算法简单的让人惊叹,当然了都是依赖 kotlin 强大的运算符的支持滴。。。
val m = strs.groupBy {
// 按照下面的规则对 strs 里的元素进行分组,分成一个 map.
val r = it.toList().sorted().joinToString("")
r
}
return m.values.toList()