Android Gradle 配置打包信息
前言
在Android应用开发完成准备上线时,就会将代码打包成apk文件,此时就需要将测试环境切换为正式环境,一些简单的项目就只是简单的替换服务器地址和更改apk文件名而已,但是随着项目需要配置的东西越多,每次打包前都需要逐项修改配置文件,不仅十分繁琐而且稍有不慎忘记修改,将会酿成大错。因此,使用Gradle打包就可以完全自动修改,简直爽得不要不要的。
开始
先来看看Android项目中Gradle文件结构。
-Project
-app
-build.gradle
-build.gradle
-settings.gradle
-gradle.properties
我们一个一个文件的来看。
-
app
目录下的build.gradle
这个文件中的内容不用多说,大家肯定都十分熟悉了,因此我们只需要关注buildTypes
就好了,其默认代码如下:
buildTypes {
release {
minifyEnabled false // 是否混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //混淆文件
}
}
默认的release
就是我们打包release版本
时候的配置,默认只配置了不开启混淆以及指定了默认的混淆文件。如果我们需要构建其他类型的包或者修改参数则可以在这里进行操作。
-
Project
目录下的build.gradle
这里的build.gradle
是针对整个project
下所有的module
而言的,在这里配置的东西可以在任何一个module
使用。默认代码如下:
buildscript {
ext.kotlin_version = "1.3.72"
repositories {
google()
jcenter()
}
dependencies {
...
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
-
settings.gradle
这个文件内容比较简单,只定义了包含的module
以及项目名,代码如下。
include ':app'
rootProject.name = "GradleTest"
熟悉了这几个文件,我们就可以进行操作起来了。
开始操作
首先我们解决第一个问题。
- 应用配置信息杂乱繁多
为了解决这个问题,我们可以考虑将需要配置的信息单独存放在一个配置文件,统一修改配置。因此,在项目根目录下创建文件config.gradle
。要想在整个项目中使用该文件,则需要在项目根目录下的build.gradle
导入该文件,代码如下。
apply from: "config.gradle"
然后点击右上角的Sync Now完成导入。接下来就可以编辑配置信息了。
这里以App版本信息和服务器地址为例进行配置,代码如下。
ext{
// 版本号以及版本名
VERSION_CODE = 1
VERSION_NAME = "1.0.0"
// 服务器地址
BASE_URL_DEBUG = "\"https://test.holo.com/\""
BASE_URL_RELEASE = "\"https://api.holo.com/\""
}
配置完成后同样点击右上角的Sync Now完成导入。完成后打开app目录下的build.gradle
,对config.gradle
中的信息进行配置。
...
def config = rootProject.ext // 导入配置信息对象
android {
...
defaultConfig {
...
versionCode config.VERSION_CODE // 应用配置信息
versionName config.VERSION_NAME
...
}
}
这样应用的信息配置问题就解决了,但是还没有解决服务器地址以及各种SDK的key的问题,那么我们继续。
- 服务器地址及key的自动配置
同样在app目录下的build.gradle
下,在buildTypes
对象下进行配置,代码如下:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// 在BuildConfig.java中声明一个类型为String,变量名为BASE_URL,值为config.BASE_URL_RELEASE的变量
buildConfigField "String","BASE_URL",config.BASE_URL_RELEASE
}
// debug版本
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "String","BASE_URL",config.BASE_URL_DEBUG
}
}
点击Build->Rebuild Project重新构建工程,随后会自动生成BuildConfig.java
文件,然后可以直接在代码中引用刚才声明的变量。跑一下看看,测试代码如下:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<TextView>(R.id.text_view).text = BuildConfig.BASE_URL
}
效果图如下
直接显示的为BASE_URL_DEBUG
的值,其他SDK的key类似配置。
- 打包apk自动命名
一般情况下,我们都是将打包后的apk手动重命名为我们想要的名字,这样一点都不优雅而且比较麻烦,不如自动生成指定文件名的apk。
首先创建一个productFlavors,然后进行配置。
flavorDimensions "type"
productFlavors{
// 声明一个变体
holoApp{
versionCode = config.VERSION_CODE
versionName = config.VERSION_NAME
}
}
对变体进行输出配置。
android.applicationVariants.all{
variant ->
switch (variant.flavorName){
case 'holoApp':
if(variant.name.contains("Release")){
// release版本
variant.outputs.all{
outputFileName = "HoloApp_${config.VERSION_NAME}_${today()}_release.apk"
}
}else if(variant.name.contains("Debug")){
// debug版本
variant.outputs.all{
outputFileName = "HoloApp_${config.VERSION_NAME}_${today()}_debug.apk"
}
}
break
}
}
// 获取当前日期
static def today(){
def c = Calendar.getInstance()
return "${c.get(Calendar.YEAR)}_${c.get(Calendar.MONTH)}_${c.get(Calendar.DAY_OF_MONTH)}"
}
最后配置签名信息。
signingConfigs{
release{
// holo.jks 应位于app目录下
storeFile file("./holo.jks")
storePassword '123456'
keyAlias = 'holokey'
keyPassword = '123456'
}
}
添加签名信息到变体。
flavorDimensions "type"
productFlavors{
holoApp{
versionCode = config.VERSION_CODE
versionName = config.VERSION_NAME
signingConfig = signingConfigs.release
}
}
最后点击右上角的Sync Now完成后,就可以在项目Gradle视图中的ProjectName->Tasks->build
目录下找到assembleVariantName
(我这里是叫做assembleHoloApp
)这个task,双击运行或者在终端输入gradlew
assembleVariantName
开始打包。
打包完成后就可以在app/build/outputs/apk/variantName/release
下查看正式包,在app/build/outputs/apk/variantName/debug
下查看测试包了,是不是方便了许多。
本文地址:https://blog.csdn.net/qq_31054411/article/details/109331442
推荐阅读
-
Android eclipse使用gradle打包的图文教程
-
Android studio配置copyright插入版权信息的详细教程
-
[build.gradle配置系列(一)]android studio根据版本号动态生成apk名
-
Android获取手机配置信息具体实现代码
-
为Android应用增加渠道信息 自动化不同渠道的打包过程的使用详解
-
android studio 3.0 gradle 打包脚本配置详解
-
Flutter下Android Studio配置gradle的方法
-
ionic2打包android时gradle无法下载的解决方法
-
Android gradle配置抽取合并的操作步骤
-
Android studio配置copyright插入版权信息的详细教程