Android使用gradle读取并保存数据到BuildConfg流程详解
作者:捡一晌贪欢 发布时间:2022-01-07 19:31:43
问题
最近 Cordova 项目里有一个需求,这里需要从 assets 目录中读取文件,加载配置信息,并且代码中要用到。因为看到 gradle 内写过类似的了,就照着使用 gradle 读取的,后面又使用了 BUildConfig 来保存,觉得这样子用起来很不错,分享下。
描述
在 Cordova 项目里,前端页面会打包到 assets 目录的 www 文件夹里,这里需要从这个文件夹的 index.html 内读取信息域名信息 domain。
assets/www/index.html
_domain_ = 'xxx';
gradle读取操作
本来想用 R 类来试试的,后面觉得算了,不太可行。接下来使用 gradle 解决,在 gradle 文件内的 android 闭包里,定义一个变量 DOMAIN,写一个函数去获取它。
android {
//其他代码
def DOMAIN = getDomainFromIndexHtml()
}
函数写在android 闭包外:
String getDomainFromIndexHtml() {
//从index.html中获取环境
String envContent = getFileContent(rootDir.absolutePath + "/assets/www/index.html");
envContent = envContent.replace(" ", "");
String reg = "_domain_=(.*?);"
Pattern corPattern = Pattern.compile(reg);
Matcher corMatcher = corPattern.matcher(envContent);
corMatcher.find();
String result = corMatcher.group(0)
result = result.replace("_domain_=", "").replace("\"", "").replace("\'", "\"").replace(";", "");
return result;
}
String getFileContent(String path) {
File file = new File(path);
byte[] buffer = new byte[file.length()];
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(buffer);
fileInputStream.close();
String content = new String(buffer, "UTF-8");
return content;
}
BuildConfig 配置
写好上面代码,在安卓工程编译的时候就会运行这段代码,就能拿到域名了。如果把读取到的域名写入 BuildConfig 里,实际是编译完就保存了,并不需要在运行时去读取文件,这能提高应用的运行效率。
还是在 android 闭包内,找到 buildTypes 闭包,在 debug 和 release 内加入 buildConfigField,就能配置好 BuildConfig 变量了,语法很简单。
android {
//其他代码
def DOMAIN = getDomainFromIndexHtml()
buildTypes {
release {
//其他代码
buildConfigField("String", "DOMAIN", "${DOMAIN}")
}
debug {
//其他代码
buildConfigField("String", "DOMAIN", "${DOMAIN}")
}
}
}
代码中使用
配置好 BuildConfig 后,最好 rebuild 一下,在 Build -> Rebuild Project,在代码中使用如下:
String domain = BuildConfig.DOMAIN;
来源:https://blog.csdn.net/lfq88/article/details/127082876


猜你喜欢
- 文章主要涉及到以下几个问题:怎么实现Java的序列化为什么实现了java.io.Serializable接口才能被序列化transient的
- 之前做了一个小的应用程序,用的是c#语言,涉及到了多线程的多参数传递,经过查找资料总结了一下解决方案!第一种解决方案的原理是:将线程执行的方
- Android 读取文件内容实现方法,这里整理了几种方法,大家需要可以看下。如果要打开存放在/data/data/<package n
- 目录1. SpringMVC默认三个异常处理类2. @ExceptionHandler注解异常3. @ResponseStatus注解异常4
- 前言C# 时间戳与 标准时间的转其实不难,但需要注意下,基准时间的问题。格林威治时间起点: 1970 年 1 月 1 日的 00:00:00
- 本文实例讲述了C#监控文件夹变化的方法。分享给大家供大家参考。具体实现方法如下:当需要监控某一文件,FileSystemWatcher类提供
- 动态获取对象的性能值,这个在开发过程中经常会遇到,这里我们探讨一下何如高性能的获取属性值。为了对比测试,我们定义一个类Peoplepubli
- Feign调用服务Headers传参在使用springcloud中经常会出现个服务调用,一般情况下会在Headers加上token的验证,那
- 文件上传大小设置#文件大小 MB必须大写# maxFileSize 是单个文件大小# maxRequestSize是
- /// <summary> /// 删除掉空
- 一、前言前面我们介绍了运算符的一部分运算符,现在我们把剩余的他介绍完全来二、运算符赋值运算符所谓赋值,就是一个等于号连接的两个如int a=
- JDBC操作MySQL在实际的企业级开发环境中,如果数据规模特S别大,此时采用传统的SQL语句去处理的话一般需要分成很多批次处理,而且很容易
- SpringBoot整合Log4j2以及配置详解SpringBoot整合Log4j2步骤:1、删除spring-boot-starter-p
- 你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去?一般的做法就是 一个达到try catch,然后在finally里面
- 本文实例讲述了Android实现手机壁纸改变的方法。分享给大家供大家参考。具体如下:main.xml布局文件:<?xml versio
- 手机或照机拍摄的照片名称通常是”IMG_001.JPG”这种格式,这种文件名称是无意义的。使用照片拍摄时间命名可以让我们在多年以后查找照片时
- 在我们将Winform自带的边框隐藏之后,我们需要自己编写窗口的移动。思路就是1.获得点击左键时当前鼠标的坐标2.获得移动后鼠标的坐标3.窗
- 1 什么是cookie浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就
- 目录一.数组的基本概念二.数组的声明三.数组的创建及初始化1.数组的创建2.数组的初始化四.访问数组元素五.for each 循环六.数组的
- 常规调用方式:(这个肯定会弹出cmd窗口)Runtime.getRuntime().exec("cmd.exe &nbs