赞
踩
Android 的构建系统能编译应用资源和源代码,然后将它们打包成可进行测试、部署、签署和分发的 APK。
对于Gradle,做过Android 开发的猿们都不会陌生。因为 Android Studio 是使用 Gradle 构建工具包来自动执行和管理构建流程的。
Gradle 和 Android 插件可独立于 Android Studio 运行, 这意味着,即使不使用Android Studio 我们也可以通过Gradle 构建工具构建Android 应用。无论是从命令行、在远程计算机上还是使用 Android Studio 构建项目,构建的输出都相同。
典型 Android 应用模块的构建流程通常依循下列步骤:
编译器将您的源代码转换成 DEX(Dalvik Executable) 文件(其中包括 Android 设备上运行的字节码),将所有其他内容转换成已编译资源.
APK 打包器将 DEX 文件和已编译资源合并成单个 APK。 不过,必须先签署 APK,才能将应用安装并部署到 Android 设备上
APK 打包器使用调试或发布密钥库签署您的 APK:
如果您构建的是调试版本的应用(即专用于测试和分析的应用),打包器会使用调试密钥库签署您的应用。 Android Studio 自动使用调试密钥库配置新项目。
如果您构建的是打算向外发布的发布版本应用,打包器会使用发布密钥库签署您的应用。 要创建发布密钥库,请阅读在 Android Studio 中签署您的应用。
4.在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少其在设备上运行时占用的内存。
5.构建流程结束将会生成应用的调试 APK 或发布 APK,可使用它们进行部署、测试,或向外部用户发布。
settings.gradle 文件位于项目根目录,用于指示 Gradle 在构建应用时应将哪些模块包括在内。
// 比如包含app和library两个模块
include ':app'
include 'library'
位于项目根目录的 build.gradle文件。 用于定义适用于项目中所有模块的构建配置,默认情况下,此顶级构建文件使用 buildscript 代码块来定义项目中所有模块共用的 Gradle 存储区和依赖项。
文件示例:
buildscript { // 配置Gradle使用的存储库或下载依赖项 repositories { google() jcenter() } // 配置项目的Gradle 插件,这里表示Gradle插件版本为3.4.2 dependencies { classpath 'com.android.tools.build:gradle:3.4.2' } } //配置所有项目的存储库和依赖项 allprojects { repositories { google() jcenter() } }
注意: 有时一个项目中包含多个模块,为了在多个模块中可以共享某些公共配置。我们可以在顶级的构建文件中添加公共配置来进行共享。
如:多个模块都使用 compileSdkVersion = 28和supportLibVersion = "28.0.0"这两个属性,通过ext{ } 定义。
buildscript {...}
allprojects {...}
ext {
compileSdkVersion = 28
supportLibVersion = "28.0.0"
}
在模块的 build.gradle 中通过“rootProject.ext.属性名” 的方式引用。
android {
// Use the following syntax to access properties you defined at the project level:
// rootProject.ext.property_name
compileSdkVersion rootProject.ext.compileSdkVersion
...
}
...
dependencies {
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
...
}
位于模块中的 build.gradle文件
我们可以在这里配置构建设置来提供自定义打包选项和替换应用清单文件中的设置。
/** * 该设置确定模块是一个库(com.android.library)还是一个可运行应用(com.android.application) */ apply plugin: 'com.android.application' //apply plugin: 'com.android.library' // 配置Android特定构建配置 android { // 指定编译应用的Android API版本,表示该应用可以使用这个API级别或更低的API特性。 compileSdkVersion 28 // 指定SDK的构建工具、命令行工具和编译器版本。在未指定时,默认使用推荐的版本 buildToolsVersion "29.0.0" // defaultConfig 封装了所有构建变体的默认设置和条目,并且可以从构建系统动态地覆盖main/AndroidManifest.xml中的一些属性。 defaultConfig { // 应用的唯一标识(包名)。main/AndroidManifest.xml 中package属性定义的包名将被源码引用,如生成R文件(package.R.xxx) applicationId 'com.example.myapp' // 运行应用的最低API版本,主要针对设备的Android版本,标明该设备的Android版本不得低于19(4.4) minSdkVersion 19 // 应用通过测试的API版本,意思是该版本已经通过测试 targetSdkVersion 28 // 版本号 versionCode 1 // 版本名 versionName "1.0" } /** *构建类型,我们可以在里面配置多个类型,根据不同出包需求选择不同的类型。 *默认情况下系统定义两种类型:debug(调试类型)和release(发布类型)。 * debug 在默认的配置中没有显式显示,但是它包含调试工具,并使用debug键进行签名。 * release 应用 Proguard 设置,默认情况下不签名 */ buildTypes { // 定义 release release { minifyEnabled true // 定义是否开启代码混淆,true(开启)、false(不开启) // 指定混淆文件,文件里面可以配置混淆信息。如果不开启混淆,则不起作用 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } /** * productFlavors可以理解为产品定制,在这里可以用自己的设置覆盖defaultConfig中的* 同名设置,以创建应用不同版本。 * 这个定制是可选的,默认情况系统不会自动创建 * */ // 如果要设置productFlavors那么flavorDimensions是必须的。 flavorDimensions "tier" productFlavors { free { dimension "tier" applicationId 'com.example.myapp.free' } paid { dimension "tier" applicationId 'com.example.myapp.paid' } } /** * splits 可以配置不同密度和资源的APK构建信息 */ splits { // 根据屏幕密度设置构建多个APK density { // 是否开启构建多个APK,false(禁用)、true(开启) enable false // 构建多个APK时,排除以下列出的密度 exclude "ldpi", "tvdpi", "xxxhdpi", "400dpi", "560dpi" } } } /** * 构建项目的依赖 */ dependencies { implementation project(":lib") implementation 'com.android.support:appcompat-v7:28.0.0' implementation fileTree(dir: 'libs', include: ['*.jar']) }
Gradle 有两个属性文件,均位于项目根目录中,可用于指定适用于 Gradle 构建工具包本身的设置。
1. gradle.properties
可以在其中配置项目范围 Gradle 设置,例如 Gradle 后台进程的最大堆大小。
2. local.properties
为构建系统配置本地环境属性,例如 SDK 安装路径。 由于该文件的内容由 Android Studio 自动生成并且专用于本地开发者环境,因此我们不用手动修改该文件,或将其纳入版本控制系统。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。