Android 如何使用gradle.properties

Android gradle.properties 基础使用常规配置 1.什么是GradleGradle 是一个开源构建自动化工具,其设计足够灵活,可以构建几乎任何类型的软件。 2.什么是gradle.properties? 在Android中, 1.使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,它是由IDE自动生成的gradle.properties文件。 2.他是项目级别的Gradle配置文件,gradle.properties里面定义的属性是全局的,可以在各个模块的build. 阅读详情

build.gradle使用gradle.properties配置相关信息

  • 首先build.gradle有哪些常见的参数可以应用到gradle.properties呢?
    以最常见举例:applicationId,versionCode,versionName
    gradle.properties中代码
APPLICATION_ID=com.example.multi
VERSION_CODE=2
VERSION_NAME=1.1

然后在build.gradle中直接引用即可

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId APPLICATION_ID
        minSdkVersion 17
        targetSdkVersion 28
        versionCode VERSION_CODE as int
        versionName VERSION_NAME
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

ok,就这么简单。通过代码动态获取packageName,versionName,versionCode很简单就不用多说了。

  • 除了直接引用,build.gradle还有哪些引用方式呢?
    没错,还有一种就是buildConfigField自定义配置变量
    同样的,首先把需要配置的参数写到gradle.properties
APPLICATION_ID=com.example.multi
VERSION_CODE=2
VERSION_NAME=1.1

# 应用base_url
BASE_API="http://my-api.test.com/"
# 渠道
CHANNEL="xiaomi"
# log开关
LOG_SWITCH=true

然后,在build.gradle中去自定义这些配置

defaultConfig {
        applicationId APPLICATION_ID
        minSdkVersion 17
        targetSdkVersion 28
        versionCode VERSION_CODE as int
        versionName VERSION_NAME

        // 通过buildConfigField自定义配置信息
        buildConfigField("String", "BASE_API", "${BASE_API}")
        buildConfigField("String", "CHANNEL", "${CHANNEL}")
        buildConfigField("boolean", "LOG_SWITCH", "${LOG_SWITCH}")
    }

好了,现在可以尽情的在代码中使用这些配置了

String url = BuildConfig.BASE_API;
String channel = BuildConfig.CHANNEL;
boolean logSwitch = BuildConfig.LOG_SWITCH;

这个时候我们可能想到了,既然gradle.properties中的配置信息可以在build.gradle中运用,那是否可以在AndroidManifest.xml中引用呢?答案是肯定的。

  • gradle.propertiesAndroidManifest.xml中的使用
    首先要知道在AndroidManifest.xml中有哪些常见的需要配置的信息。
    比较常见的有appName,channel,其他的信息这里不做介绍,请自行补充。
    同样的,gradle.properties中配置
# 渠道
CHANNEL="xiaomi"
# app名字
APP_NAME=配置demo

然后需要在build.gradle中进行声明

defaultConfig {
        // 在清单文件中需要引用的参数
        manifestPlaceholders = [
                APP_NAME      : APP_NAME,
                CHANNEL       : CHANNEL]
}

之后就是在AndroidManifest.xml中引用

 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="${APP_NAME}"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data android:name="CHANNEL"
            android:value="${CHANNEL}"/>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

最后,在Java代码中使用

ApplicationInfo appInfo = this.getPackageManager()
                    .getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
String channel = appInfo.metaData.getString("CHANNEL");
  • 说道这里我们可能会奇怪,这些信息配置在gradle.properties中有什么意义呢?直接写到代码里不也一样的效果吗,反正发布之后不能修改了?对,没错哈哈。

但是测试阶段呢,每个环境(测试、预生产、生产)以及bug开启的、关闭的,不同渠道的,甚至不同应用包名、应用名字的、不同版本号的包。要疯?这么多种情况一个一个打吗?
一般公司都有自己的beta服务器,有的公司是使用Jenkins自定义多渠道打包的,这个时候就派上用场了,只需要通过脚本(当然脚本会的话可以自己写)在打包的的时候动态修改gradle.properties配置即可,随便测试人员拿去玩了。

最后附上相关文件的代码
gradle.properties

# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

APPLICATION_ID=com.example.multi
VERSION_CODE=2
VERSION_NAME=1.1

# 应用base_url
BASE_API="http://my-api.test.com/"
# log开关
LOG_SWITCH=true
# 渠道
CHANNEL="xiaomi"
# app名字
APP_NAME=配置demo

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId APPLICATION_ID
        minSdkVersion 17
        targetSdkVersion 28
        versionCode VERSION_CODE as int
        versionName VERSION_NAME

        // 通过buildConfigField自定义配置信息
        buildConfigField("String", "BASE_API", "${BASE_API}")
        buildConfigField("String", "CHANNEL", "${CHANNEL}")
        buildConfigField("boolean", "LOG_SWITCH", "${LOG_SWITCH}")

        // 在清单文件中需要引用的参数
        manifestPlaceholders = [
                APP_NAME      : APP_NAME,
                CHANNEL       : CHANNEL]
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.multi_channel">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="${APP_NAME}"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data android:name="CHANNEL"
            android:value="${CHANNEL}"/>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Android Studio3.0利用gradle.properties添加模块依赖 首先,我们需要有创建模块,如果是直接创建library模块或者从外部导入的话,直接添加依赖便可, 如果是先创建了可单独运行的模块的话,要怎么改成可依赖的模块呢? 假如 模块A 要将原本可独立运行的 模块B 添加为依赖,步骤如下:(gradle.properties使用在文章最后说明) 1.将模块B的 build.gradle 打开,将 apply plugin: ‘com.android.app... 阅读详情

相关推荐

Android中清单文件引入配置参数,Android 使用gradle打包的各种配置

原标题:Android 使用gradle打包的各种配置在AS中利用gradle打包,可以高效并且自由地配置各种参数,发布不同的版本。关于配置gradle文件的一些做法,总结为如下。一.替换AndroidManifest中的占位符举个例子,在AndroidManifest文件中,我们将极光推送的key值指定为一个占位符在build.gradle文件中,这里介绍3种方法去替换该占位符1.接收gradl...

weixin_36289292的博客 1282

如何获取Android project下 build.gradlegradle.properties、local.properties文件中定义的属性或变量

1、读取project下 build.gradle 属性: ext { compileSdk = 28 minSdk = 17 targetSdk = 28 support = "28.0.0" buildTools = "28.0.0" supportLibraryVersion = "28.0.0" versionCode = 4 ...

安卓开发-顺 的博客 1万+

Android Gradle 插件】gradle.properties配置编译参数并在 Java 代码 BuildConfig 中调用该参数

一、gradle.properties配置编译参数、 二、在 build.gradle配置 BuildConfig.java 生成信息、 三、编译后生成的 BuildConfig 类

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4638

gradle配置

android {manifestPlaceholders = [apkName : versions.apkName] 指定apkNameapplicationId versions.applicationId 指定applicationId在 AndroidManifest中使用apkNameandroid:label="${apkName}"> 使用build.gradle定义的 apkName。

xiaowang_lj的博客 1020

Android build.gradle/gradle.properties 相关使用

一、build.gradle 1.可以使用同级或上级目录下*.properties(一般都是在gradle.properties)中所有参数 2.路径表示方式: file:/// 表示的是完整路径, rootDir表示项目根目录,MAVEN_UPLOAD_REPO_URL是常量地址,自己配置.properties中 de...

lhy24680的博客 3247

Android stuido工程中的gradle-wrapper.properties的作用

是项目Gradle环境的锁定文件,保证构建环境统一、可重现,是跨平台团队协作构建的基础。

shiruiyiruo的博客 1242

Android Studio Gradle 配置 gradle-wrapper.properties

系统变量 -> 新建 “GRADLE_HOME”,填写F:\Tools\Gradle\gradle-8.7。经常出现gradle 工具下载fail的问题,期望还是本地能统一管理。gradle-wrapper.properties 文件。在android studio中,在官网下载版本到本地,

1622

android清除代理:在这里gradle.properties

android清除代理:在这里gradle.properties

weixin_65017041的博客 193

Androidgradle.properties gradle-wrapper.properties 作用

我们更深入地了解这两个文件的作用它们可以包含的一些常见配置

浅墨的博客 1507

android gradle.properties

gradle.properties 里面配置的东西,在gradle 文件里面可以直接引用。例如: 在你工程根目录的gradle.properties 文件里面 可以这样配置:## Project-wide Gradle settings. # # For more details on how to configure your build environment visit # http://

男儿不展风云志,空有天生八尺躯 1430

插件properties_Android gradle插件与gradle 版本

Android 构建工具是依托于gradle完成。 搞清楚 gradle插件版本gradle版本的区别以及关系 1、gradle-wrapper.properties 文件 distributionUrl所指定的是gradle 版本 distributionUrl=https://services.gradle.org/distributions/gradle-5.4.1-all.zip 2...

weixin_42514709的博客 114

Android Gradle JVM配置文件gradle.properties优先级查找

目录一、Gradle7.5版本 gradle.properties属性优先级1、优先级2、查找注意事项:3、Gradle 7.5版本官网参考链接:《Gradle环境配置Android 项目根目录下的gradle.properties文件中,可以配置JVMGradle属性,但在Gradle安装目录/.gradle/目录下也存在一个gradle.properties文件,在Gradle7.5版本中,gradle.properties文件中的属性配置优先级如下:

he先森的博客 933

Android Gradle 插件】Gradle 基础配置 ③ ( 生成 Gradle Wrapper 配置 | 分析生成的 gradle-wrapper.properties 配置文件 )

一、生成 Gradle Wrapper 配置、 二、分析生成的 gradle-wrapper.properties 配置文件

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2857

Android studio项目中的gradle.properties详解

Android studio项目中的gradle.properties详解 在使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,我们可以在里面做一些Gradle文件的全局性的配置,也可以将比较私密的信息放在里面,防止泄露。 下面我们就来分析下IDE自动生成的gradle.properties文件,及其常见的用法。 gra...

tinyVampire的博客 1万+

Android build.gradle读取String中文件及gradle.properties数据

在网上找了好久没有一个完整的学习文档,自己总结下,方便后面使用,话不多说直接上代码。读取gradle.properties

Android 1227

Android studio项目中的gradle.properties文件作用

一、简介 在使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,该文件是项目级别的Gradle配置文件,我们可以在里面做一些Gradle文件的全局性的配置,也可以将比较私密的信息放在里面,防止泄露。 二、用法 1、在各个模块的build.gradle里面直接引用 gradle.properties里面定义的属性是全局的,可以在各个模块的build.gradle里面直接引用.gradle.properties文件中新增下面属性:

分享Android开发知识 1863
上一篇: android最简单的生成二维码demo
下一篇: Android开发使用Gradle实现多渠道打包
coder_yao
博客等级 码龄10年 9粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值