配置gradle :将properties文件转换为扩展属性

news2024/11/15 8:27:32

配置gradle

为了便于管理项目配置信息,和自动复制应用图标到资源文件夹,为后面的一键生成app做准备。我写了一个gradle文件。

作用

项目启动的时候自动执行以下操作

  1. 在setting.gradle中引入一次后,全局可用。根目录的build.gradle和各个module的build.gradle都可以使用

  2. 访问方式统一,只需要通过gradle.xxx 既可以访问xxx 属性。不需要区分在那个文件。无论是setting.gradle还是各种build.gradle

  3. 每次项目启动事,自动将config目录下的app_config.properties文件转化为扩展属性,后期可以通过gradle.xxx 获取

  4. 可以将config目录下img文件夹中的jpg和png文件复制到app/src/main/res/drawable-xxxhdpi/ 文件中

  5. .根据app名称修改项目名称。

  6. 使用简单,所有文件都在一个文件夹中,集中管理

文件结构

在这里插入图片描述

文件名作用备注
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类型

在使用过程中要转化为对应的类型

类型转化方式
booleangradle.xxx.toBoolean()
intgradle.xxx.toInteger()

关于android studio的显示名称

修改了app_config.properties文件后,不会提示同步gradle,也不需要同步
但是如果修改了app名称,需要让android studio显示的项目名称立刻改变可以手动触发同步,其他情况都不需要触发gralde同步。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何理解Spring?

Spring 是包含了众多⼯具⽅法的 IoC 容器。 那何为容器呢?容器是用来容纳某种东西的装置。比如:List/Map 是数据存储容器,Tomcat 是Web 容器等等。Spring 也是⼀个容器,是⼀个 IoC 容器。 那何为IoC 呢?IoC Inversi…

Buildroot系列开发(四)Linux工具链剖析

内容参考:百问网 文章目录1.什么是工具链2.什么是交叉编译工具链3.ABI4. Multilib工具链5.工具链与SDK的区别6.获得适合的交叉编译工具链7.sysroot8.Toolchain内部剖析9.根文件系统与sysroot10. 工具链组成11.整体构建过程12.自定义工具链1.什么是工具链 2.什么是交…

毕业设计-基于大数据动画电影推荐系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

面试题:三个线程按顺序打印 ABCABC

小伙伴们好呀,最近在重新复习,整理自己的知识库,偶然看到这道面试题:三个线程按顺序打印 ABCABC,尝试着做一下,才发现自己对线程还有好多地方不懂,蓝瘦…… 🐷 思路 很明显&#xf…

Docker可视化工具Portainer安装

一、官网介绍 官方地址:https://www.portainer.io/ 致力于为开发者做最强大的docker管理平台二、在 Linux 上使用 Docker 安装 Portainer 官方文档地址:https://docs.portainer.io/start/install/server/docker/linux 1、部署前需知 (1&a…

SautinSoft JBIG2 .Net提供了解读jb2文档的API

SautinSoft JBIG2 .Net提供了解读jb2文档的API SautinSoft的JBIG2.Net是一个独立且简单的SDK,为您提供了解读jb2文档的API。该部分将使您的软件能够使用3-4个C#行将JBIG2文件的任何网页转换为照片格式:png、Tiff、jpeg。 JBIG2.Net能给我什么 节省项目开…

PyQt中的多线程QThread示例

PyQt中的多线程一、PyQt中的多线程二、创建线程2.1 设计ui界面2.2 设计工作线程2.3 主程序设计三、运行结果示例一、PyQt中的多线程 传统的图形用户界面应用程序都只有一个执行线程,并且一次只执行一个操作。如果用户从用户界面中调用一个比较耗时的操作&#xff0…

JAVA SCRIPT设计模式--结构型--设计模式之Proxy代理模式(12)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能,所以不可能像C,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVA SCRIPT代码,代码只是实现了设计模式的主体功能,不代…

搭建LNMP平台实现负载均衡与高可用

目录 环境要求 安装服务 搭建服务 1. nfs主机操作 2. web1主机操作 3. web2主机操作 4. php主机操作 5. mysql主机操作 6. 验证1 7. lb1主机操作 8. lb2主机操作 9. 验证2 测试1 测试2 网站故障解决 验证 环境要求 实验目标:搭建LNMP平台实现负载均衡与高可用。 拓…

web课程设计——健身俱乐部健身器材网站模板(24页)HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

解析Vue项目每一个文件夹及文件的作用

使用vue-cli2.x脚手架为每个vue项目创建脚手架项目结构,项目结构目录中每个文件夹介绍如下: 1、build 文件夹 里面是对 webpack 开发和打包的相关设置,包括入口文件,输出文件,使用的模块等。 1.1 webpack.base.conf.j…

人大金仓 +用友:助力企业数智化转型,实现高质量发展

金兰组织联合解决方案集数字化浪潮下,联合解决方案已经成为这个时代的必然选择。如何依托各自产品的功能与特点,持续优化和完善解决方案能力,满足客户更多、更复杂的业务诉求,成为数字服务厂商的重要工作内容。为此,金…

我的电脑图标没了怎么办?3个方法找回消失的图标

最近,很多小伙伴都在私信小编,说他们的电脑桌面图标不见了。我的电脑图标没了怎么办?别担心。图标突然消失了,很可能是你不小心隐藏了桌面图标。这里有3个方法可以帮助你快速恢复并找到电脑图标,一起来看看吧&#xff…

现代基准测试程序种类以及使用方法

文章目录基准测试程序种类常见测试程序概述常见测试程序使用Dhrystone的使用UnixBench的使用CPU-Z的安装与使用参考文献现代计算机的性能测量极大地依赖于在其上运行的工作负载,为了测量和分析计算机系统的性能人们常常选择或构造一组能反映其工作负载特征的程序&am…

python文件转换成exe可执行的windows文件

一、介绍 python的程序需要运行环境有时候很不方便,因为要交给别人代码可能因为环境的原因运行各种问题,这里给出直接讲python程序转换成exe文件,很方便直接给执行程序就可以,也不用担心运行环境问题而运行不了 二、工具 1、安装…

[奶奶看了都会]ChatGPT保姆级注册教程

大家好,我是小卷 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜。这个聊天机器人最大的特点是模仿人类说话风格同时回答大量问题。 有人说ChatGPT是真正的人工智能,它不仅能和你聊天,还是写小作文…

[附源码]Python计算机毕业设计SSM基于微信平台的匿名电子投票系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

web课程设计网页规划与设计 HTML+CSS+JavaScript仿英雄联盟LOL首页(1个页面)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

第4季4:图像sensor的驱动源码解析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、sensor驱动源码的框架 mpp定义了一整套sensor驱动的实现和封装,这里以ar0130型号的sensor为例进行说明。 1、sensor层驱动 (1)sensor层驱动位于mpp/componen…

Java基础面试题

请介绍全局变量和局部变量的区别 Java中的变量分为成员变量和局部变量,它们的区别如下: 成员变量: 成员变量是在类的范围里定义的变量;成员变量有默认初始值;未被static修饰的成员变量也叫实例变量,它存储于…