android知识要点整理(17)----gradle之自定义构建(代码片段)

znapast znapast     2023-04-04     664

关键词:

通过Gradle,我们可以灵活地定制构建中的变量,从而方便灵活地控制构建过程。

1.理解三个文件

Gradle项目有3个重要的文件需要深入理解:项目根目录的build.gradle,settings.gradle和模块目录的build.gradle

  • 1.settings.gradle文件会在构建的initialization阶段被执行,它用于告诉构建系统哪些模块需要包含到构建过程中。对于单模块项目,settings.gradle文件不是必需的。对于多模块项目,如果没有该文件,构建系统就不能知道该用到哪些模块。更详细的用法见https://gradle.org/docs/current/dsl/org.
    gradle.api.initialization.Settings.html
  • 2.项目根目录的build.gradle文件用来配置针对所有模块的一些属性。它默认包含2个代码块:buildscript...allprojects...。前者用于配置构建脚本所用到的代码库和依赖关系,后者用于定义所有模块需要用到的一些公共属性。
  • 3.模块级配置文件build.gradle用于配置只应用于本模块的一些属性 ,它可以重写在项目根目录中定义的一些全局属性。它有3个重要的代码块:plugin,android 和 dependencies

2.定制清单项(manifest entries)

我们已经知道,通过gradle可以直接设置applicationId, minSdkVersion,targetSdkVersion, versionCode, 和versionName 。除此之外,我们还可以设置如下一些清单属性:

  • testApplicationId:为测试用apk 设置应用ID;
  • signingConfig:签名配置;
  • proguardFile:混淆配置。

3.定制编译常量和字符串

从SDK tool 17 开始,编译工具在编译时会生成BuildConfig类,这个类里包含一些编译相关的常量,比如DEBUG常量是一个BOOL值,表示当前的buildType 是否是debug,通过这个常量,我们可以在代码中控制Log只在DEBUG版本的APK中打印。我们甚至可以扩展BuildConfig类,定义自己的一些常量。实例方法如下:

android 
    buildTypes 
        debug 
            buildConfigField "String", "API_URL",
                    "\\"http://test.example.com/api\\""
            buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
        
        release 
            buildConfigField "String", "API_URL",
                    "\\"http://example.com/api\\""
            buildConfigField "boolean", "LOG_HTTP_CALLS", "false"
        
    

上面的代码定义了2个常量,一个是服务器URL,一个是日志调用开关。它们在debug版本和release版本中拥有不同的值。语法如下:

buildConfigField "常量类型" "常量名称" "常量值"

特别注意的是,如果常量类型是String,则常量的值是要带双引号的。

除了定制BuildConfig类的常量,在新版编译工具中,我们还可以定制res资源。如下所示:

android 
    buildTypes 
        debug 
            resValue "string", "app_name", "Example DEBUG"
        
        release 
            resValue "string", "app_name", "Example"
        
    

定义res资源用到的关键字是resValue,语法和上面一样,也是类型,名称,值。支持整型,布尔型,字符串等类型。但是这里的字符串类型的值本身不需要带上双引号。因为在res资源定义中,它的值总是由双引号包围着的。

4.定制项目属性(project properties)

在项目根目录的build.gradle配置文件中,我们可以定制适用于所有模块的属性,通过ext 代码块来实现。如下所示:

ext 
    compileSdkVersion = 22
    buildToolsVersion = "22.0.1"

然后我们可以在模块目录的build.gradle配置文件中引用这些属性,引用语法为rootProject.ext.属性名。如下:

android 
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

此外,在项目根目录的build.gradle配置文件中,我们可以定义默认的task,示例如下:

defaultTasks 'clean', 'assembleDebug'

除了在build.gradle文件中定制属性外,还可以在项目根目录的gradle.properties或者local.properties文件中定制属性。语法如下所示:

propertiesFile = Hello from gradle.properties

同时我们在命令行执行task时也可以定制属性,使用-P参数指定参数名和参数值,如下:

$ gradlew printProperties -Pcmd='Hello from the command line'

通过以上这些定制方法,我们可以非常灵活地控制构建过程。

android知识要点整理(13)----网络连接(代码片段)

...,监控网络状态以及控制网络的使用。连接到网络在Android平台,首先要声明使用网络的权限。<uses-permissionandroid:name="android.permission.INTERNET"/><uses-permis 查看详情

android知识要点整理(12)----animation(动画)

动画分类Android动画有3类:帧动画、视图动画、属性动画。帧动画和视图动画又统称为补间动画。Android3.0(APILEVEL11)开始支持属性动画。帧动画帧动画是针对Drawable资源的动画。其本质是一系列Drawable资源的连续变化,... 查看详情

android知识要点整理(19)----gradle之构建变体(代码片段)

构建类型(BuildType)和产品渠道(ProductFlavor)的结合,称之为构建变体(BuildVariants)。1.构建类型(BuildType)构建类型用于定义如何去构建一个APP.每一种类型可以定义是否包含DEBUG信息,applicationId等信息。我们可以... 查看详情

android知识要点整理(20)----gradle之多模块管理(代码片段)

AndroidStudio不仅支持创建library和app模块,还支持为AndroidWear,AndroidTV,GoogleAPPEngine等创建模块。1.多模块结构多模块结构可以是如下所示的结构:project├───setting.gradle├───build.gradle├───app│└───build.gradl... 查看详情

android知识要点整理(11)----scenesandtransitions(场景和变换)(代码片段)

...间动画、属性动画)等作用于单个控件的动画,Android还提供了一种类似的动画的功能,用于在两个不同的布局切换时提供过渡动画效果—-TransitionsFramework。TransitionsFramework简介该框架帮助在布局改变的时候增加动画效... 查看详情

android知识要点整理(21)----gradle之创建任务和插件(代码片段)

1.定义Tasks先看创建Tasks的代码示例://方式1taskhello//方式2taskhelloprintln'Hello,world!'//方式3taskhello<<println'Hello,world!'//方式4task(hello)<<println'Hello,world!'//方式5tas 查看详情

android知识要点整理----拍照和录像(代码片段)

...c;有两种方式可以实现,一种是调用拍照APP,比如Android系统自带的CameraAPP;另一种就是完全自己写,自己调用照相机的API,控制快门等,实现类似CameraAPP的应用。第一种相对简单,第二种就比较复杂。... 查看详情

android知识要点整理(18)----gradle之依赖管理(代码片段)

Gradle在依赖管理方面非常出色,要添加依赖有多种方式,每种方式都特别方便。接下来就讲一讲以依赖管理方面的要点。1.仓库(Repositories)仓库可以看作文件的集合,它可以用来提供依赖源。Gradle支持3种类型的仓... 查看详情

android知识要点整理(10)----bitmap缓存策略(代码片段)

...存,减少从磁盘或网络加载的次数,提升性能。Android系统为 查看详情

android知识要点整理(16)----gradle之项目结构(代码片段)

Androidapp由Gradle负责构建。Gradle构建系统定义了许多概念。1.Project和Tasks这个Gradle中最重要的两个概念。每次构建(build)至少由一个project构成,一个project由一到多个task构成。项目结构中的每个build.gradle文件代表一个p... 查看详情

android知识要点整理----音频播放管理(代码片段)

APP中播放音频,最重要的一点就是要保证用户能够按预期的来控制音频的播放,还有就是保证多个APP不会同时播放音频。为了达到这两点要求,我们需要掌握如何控制音频的音量和播放,如何控制同一时刻只有有... 查看详情

android知识要点整理----bitmap图片处理和展示(代码片段)

在Android系统中,图片都是以Bitmap的形式呈现在UI界面上的。Bitmap通常是比较消耗内存的,而AnroidAPP都有内存大小限制,所以当我们显示比较大的图片时很容易出现内存溢出的情况。下面就重点讲一讲如何更好地处理Bit... 查看详情

android知识要点整理(19)----gradle之构建变体(代码片段)

...以在buildTypes代码块下定义构建类型,如下所示:androidbuildTypesreleaseminifyEnabledfalseproguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'我们可以很容易的创建自定义的构建类型,如下的构建类型定... 查看详情

android知识要点整理(18)----gradle之依赖管理(代码片段)

Gradle在依赖管理方面非常出色,要添加依赖有多种方式,每种方式都特别方便。接下来就讲一讲以依赖管理方面的要点。1.仓库(Repositories)仓库可以看作文件的集合,它可以用来提供依赖源。Gradle支持3种类型的仓... 查看详情

android知识要点整理(21)----gradle之创建任务和插件(代码片段)

1.定义Tasks先看创建Tasks的代码示例://方式1taskhello//方式2taskhelloprintln'Hello,world!'//方式3taskhello<<println'Hello,world!'//方式4task(hello)<<println'Hello,world!'//方式5task('hello')<<println'Hello,world!'//... 查看详情

知识要点整理

extjs以及serverlessapi突破 extjs是基础javapython可以写serverlessapijava可以理解webbuilder解析器,李金良要推进xwl2html抽离,等李金良完成java版本xwl2html,郭廷涛完成pythonxwl2html李金良郭丰王占兴郭庭涛都要掌握extjs李金良郭丰王占兴郭庭... 查看详情

elasticsearch基础知识要点qa

...果的记录型博客。在此统一感谢各原作者,如果你对基础知识不甚了解,可以通过查看Elasticsearch权威指南中文版,此处注意你的elasticsearch版本,版本不一样,可能有偏差Q1:Elasticsearch是如何实现Master选举的Elasticsearch的选主是ZenDisc... 查看详情

linux:crontab要点整理(表达式,转义,权限管理,日志)

参考技术A摘要:Linux,crontab整理crontab的使用,包括cron表达式,设置和删除任务,权限管理,查看日志crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装... 查看详情