【[Android] 配置build.gradle 动态传参】满堂花醉三千客,一剑霜寒十四州。这篇文章主要讲述[Android] 配置build.gradle 动态传参相关的知识,希望能为你提供帮助。
(1)一个android工程中有一个build.gradle是负责Project范围的,而Module中又有各自的build.gradle是专门负责模块的。
(2)在Gradle中Task是一等公民,通过gradlew + task名 可以直接执行指定Task,例如下面的命令就是执行:task
releaseAutoBLForAar
gradlew releaseAutoBLForAar
(3)在defaultConfig中可以自定义变量名,编译时可以在java代码中引用到:
defaultConfig { applicationId "com.test" minSdkVersion 15 targetSdkVersion 23 versionCode 5 versionName 1.1.0 buildConfigField("String", "API_HOST", "${API_DEV_HOST}") }
这里面的API_HOST是String型的(第三个参数是表示传值),可以看到Java代码生成,这样就能建立起代码与配置之间的桥梁:
public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "com.test"; public static final String BUILD_TYPE = "debug"; public static final int VERSION_CODE = 6; public static final String VERSION_NAME = "1.1.1"; // Fields from default config. public static final String API_HOST = "http://test.api.cn"; }
(4)通过 buildTypes 可以配置不同的任务参数
buildTypes { release {/* 线上环境 */ buildConfigField "boolean", "LOG_DEBUG", "false"// 不显示Log buildConfigField "String", "API_HOST", "${API_RELEASE_HOST}"//API Host minifyEnabled true//是否混淆 zipAlignEnabled true//是否设置zip对齐优化 shrinkResources true// 移除无用的resource文件 signingConfig signingConfigs.release//签名 proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ } preRelease {/* 预发环境 */ buildConfigField "boolean", "LOG_DEBUG", "false"// 不显示Log // 。。。 } debug {/* 本地开发环境 */ minifyEnabled false } beta {/* 测试环境 */ buildConfigField "boolean", "LOG_DEBUG", "true"// 显示Log // 。。。 } }
可以通过AndroidStudio的Gradle面板看到多个编译任务,原来默认只有assembleDebug,现在就多了assembleBeta、assemblePreRelease、assembleRelease,双击即可执行。
(5)如何通过Gradle动态配置不同的AndroidManifest.xml 变量内容呢?通过自定义manifestPlaceholders 属性值。
首先在AndroidManifest.xml 文件中指定要使用Gradle动态配置值${TALKING_DATA_APP_ID}:
< !--TalkingData 配置--> < meta-data android:name="TD_APP_ID" android:value="https://www.songbingjia.com/android/${TALKING_DATA_APP_ID}" />
可以在build.gradle中配置一个特别的变量属性:
def TEST_TALKING_DATA_APP_ID = "6E5389EAD0C2C2CFB7B379701F6D2BA8"defaultConfig { applicationId "com.test" minSdkVersion 15 targetSdkVersion 23 versionCode 5 versionName 1.1.0 buildConfigField("String", "API_HOST", "${API_DEV_HOST}") manifestPlaceholders = [ /* talkingData 测试环境 */ TALKING_DATA_APP_ID: "${TEST_TALKING_DATA_APP_ID}"/* 可以新增多个键值对,表示变量与对应的值 */ ] }
同理,我们可以在buildTypes中分别指定release、debug等配置的manifestPlaceholders 来达到不同的配置效果。
(6)如何在build.gradle中动态获取参数选项?通过 project.hasProperty(‘VERSION_CODE‘) 的形式来获取动态传参。
defaultConfig { applicationId "com.ixwork" minSdkVersion 15 targetSdkVersion 23 //关键看这两行 versionCode project.hasProperty(‘VERSION_CODE‘) ? Integer.parseInt(VERSION_CODE) : DEF_VERSION_CODE versionName project.hasProperty(‘VERSION_NAME‘) ? VERSION_NAME : "${DEF_VERSION_NAME}" buildConfigField("String", "API_HOST", "${API_DEV_HOST}") }
(7)怎么传参呢?通过-PVAR_NAME=VAR_VALUE 的形式,其中-P就是加参数,例如:
gradle clean assembleBeta -PVERSION_CODE=5 -PVERSION_NAME=1.1.1 -POUT_PUT_DIR=/home/user/Desktop -PFILE_NAME=test.apk
推荐阅读
- Android_(游戏)打飞机03(控制玩家飞机)
- ASP.NET Core(WebAppCoreReact)
- wappalyzer 上各种开源框架功能
- java内存模型(Happens-Before)
- Win 8系统如何删除KB3004394补丁
- win8系统查看安装补丁历史记录的办法【图文详细教程】
- Win8系统电脑设置开机时自已手工打开安全模式的办法
- windows8升级win10后打开系统出现蓝屏怎样处理
- Windows8/8.1系统创建公文包技巧的办法