关于支持包:
原文:部分支持库软件包的名称会指示其最初支持的最低 API 级别。这些名称使用 v# 表示法,例如 support-v4 软件包。从支持库版本 26.0.0(2017 年 7 月发布)开始,所有支持库软件包所支持的最低 API 级别已更改为 Android 4.0(API 级别 14)。因此,在使用任何最新版本的支持库时,您不应假设 v# 软件包表示法会指示最低 API 支持级别。最新版本中的这项更改还意味着,名称为 v4 和 v7 的库软件包与其支持的最低 API 级别本质上等效。例如,对于 26.0.0 或更高版本的支持库,support-v4 和 support-v7 软件包支持的最低 API 级别均为 14。
具体而言,发布版本号的第一部分(例如版本号 24.2.0 中的 24)通常与相应版本发布时可用的平台 API 版本对应。支持库的发布版本级别可以指示此版本集成了相应 API 的部分功能,但您不应假设其可以兼容新的平台 API 版本中发布的所有功能。
理解:对于26.0.0及更高版本,v4库和v7库所支持的最低版本是相同的,但对低于26.0.0的版本则不一定。其中,v7库包含v4库
关于系统内存分配:
因为 Android 系统下,每个 APP 就是一个独立用户,Android 系统分配给这个用户的内存非常小,一般只有 32MB 64MB 左右
这个配置一般在文件 /system/build.prop
中。
更改资源目录:
默认情况下,您的资源位于 module-name/src/source-set-name/res/
。例如,模块的主源代码文件集的资源位于 src/main/res/
,调试源代码文件集的资源则位于 src/debug/res/
。
不过,您可以使用 sourceSets {}
块中的 res.srcDirs
属性将这些路径更改为任何其他位置(相对于 build.gradle
文件)。例如:
android {
sourceSets {
main {
res.srcDirs = ['resources/main']
}
debug {
res.srcDirs = ['resources/debug']
}
}
}
您还可以为一个源代码文件集指定多个资源目录,编译工具会将它们合并在一起。例如:
android {
sourceSets {
main {
res.srcDirs = ['res1', 'res2']
}
}
}
关于资源合并:
最终 APK 文件中的资源可能有 3 个不同的来源:
如果来自各个源代码文件集或库的所有资源都是唯一的,则它们均会添加到最终 APK 中。如果某项资源的文件名在其资源类型目录和资源限定符(如果已定义)中都是唯一的,系统即会将该资源视为唯一的。
如果存在同一资源的两个或多个匹配版本,则只有一个版本会包含在最终 APK 中。编译工具会根据以下优先级顺序(左侧的优先级最高)选择要保留的版本:
编译变体 > 编译类型 > 产品特性 > 主源代码文件集 > 库依赖项
例如,如果主源代码文件集包含:
res/layout/foo.xml
res/layout-land/foo.xml
并且调试编译类型包含:
res/layout/foo.xml
则最终 APK 会包括来自调试编译类型的 res/layout/foo.xml
和来自主源代码文件集的 res/layout-land/foo.xml
。
但是,当您的编译配置为一个给定的源代码文件集指定了多个资源文件夹时,如果这些来源之间存在冲突,则会发生错误,并且合并会失败,因为各个资源目录的优先级相同。