配置gradle
为了便于管理项目配置信息,和自动复制应用图标到资源文件夹,为后面的一键生成app做准备。我写了一个gradle文件。
作用
项目启动的时候自动执行以下操作
-
在setting.gradle中引入一次后,全局可用。根目录的build.gradle和各个module的build.gradle都可以使用
-
访问方式统一,只需要通过gradle.xxx 既可以访问xxx 属性。不需要区分在那个文件。无论是setting.gradle还是各种build.gradle
-
每次项目启动事,自动将config目录下的app_config.properties文件转化为扩展属性,后期可以通过gradle.xxx 获取
-
可以将config目录下img文件夹中的jpg和png文件复制到app/src/main/res/drawable-xxxhdpi/ 文件中
-
.根据app名称修改项目名称。
-
使用简单,所有文件都在一个文件夹中,集中管理
文件结构
文件名 | 作用 | 备注 |
---|---|---|
img | 用于保存不同项目差异的图片,在脚本运行的时候会自动复制到 app/src/main/res/drawable-xxxhdpi/ 中供项目使用 | 目前只支持jpg和png。可以修改脚本自行扩展功能 |
app_config.properties | 保存了不同项目中差异的属性,比如项目名称,版本号等 | 默认properties文件不支持中文,需要设置,文章后面有设置方法 |
config.gradle | 完成所有功能的脚本 | 需要在setting.gradle中引入 |
相关文件
config.gradle 文件(核心)
//使用该文件
//在setting.gradle中引入
//通过 apply from:"config/config.gradle" 引入
//通过 gradle.xxx 来访问xxx属性
//将config目录下的app_config.properties转化为扩展属性
//转化后的扩展属性可以通过gradle.xxx 访问(xxx为属性名,既properties中的key)
//默认情况下,properties的value都会转化为string类型
//在使用过程中要转化为对应的类型
//boolean 类型:gradle.xxx.toBoolean()
//int 类型:gradle.xxx.toInteger()
//注意:乱码问题,Android Studio默认创建properties文件使用的ISO-8859-1
//不支持中文,需要在设置中修改.
//注意必须使用rootDir.path 这是项目根目录
//不能使用./等相对路径,因为在setting.gradle引入,和在根目录的build.gradle引入
//路径是不一样的,为了保证脚本的稳定性。推荐使用rootDir.path
File file = file("${rootDir.path}/config/app_config.properties")
if(file.exists()){
//加载资源
BufferedReader reader = file.newReader("UTF-8");
Properties properties = new Properties()
properties.load(reader)
for(String key:properties.keySet()){
gradle.ext.setProperty(key, properties.get(key))
}
}
//复制 config/img 下的jpg文件和png文件 到drawable-xxxhdpi下
//目前配置了项目的图标和默认的占位图
//注意图片的命名中不能包含空格
copy {
from("${rootDir.path}/config/img")
into("${rootDir.path}/app/src/main/res/drawable-xxxhdpi/")
include("*.jpg","*.png")
}
参考的 app_config.properties文件
#appId
appId=com.xxx.yyy
#app的名称,会影响setting.gradle的rootProject.name 也就是会影响Android Studio中的窗口显示的名称
#修改app名称以后,如果想修改Android Studio的显示名称。那么需要同步gradle。其他情况都不需要同步gradle。
appName=非洲新闻
#app的版本号
appVersionName=5.1.6
#app的code 必须是int类型
appVersionCode=516
#最低sdk版本
minSdkVersion=20
#目标sdk版本
targetSdkVersion=31
解决properties文件中文乱码
引入和使用
1、创建相关文件
按照上面的文件结构创建相关文件。
2.改造Setting.gradle
3、在其他gradle文件中使用
defaultConfig {
applicationId gradle.appId
minSdkVersion gradle.minSdkVersion.toInteger()
targetSdkVersion gradle.targetSdkVersion.toInteger()
versionCode gradle.appVersionCode.toInteger()
versionName gradle.appVersionName
//应用名称
manifestPlaceholders = [
app_name : gradle.appName
]
//定义res->strings中的app_name
resValue("string","app_name",gradle.appName)
}
关于类型问题
在项目启动的时候,config.gradle脚本将config目录下的app_config.properties转化为扩展属性
转化后的扩展属性可以通过gradle.xxx 访问(xxx为属性名,既properties中的key)
默认情况下,properties的value都会转化为string类型
在使用过程中要转化为对应的类型
类型 | 转化方式 |
---|---|
boolean | gradle.xxx.toBoolean() |
int | gradle.xxx.toInteger() |
关于android studio的显示名称
修改了app_config.properties文件后,不会提示同步gradle,也不需要同步
但是如果修改了app名称,需要让android studio显示的项目名称立刻改变可以手动触发同步,其他情况都不需要触发gralde同步。