美文网首页
android项目使用gradle实现管理版本

android项目使用gradle实现管理版本

作者: 杨hai | 来源:发表于2017-10-22 17:16 被阅读179次

android stdio中存在多个moudle时,对versionCode 1 versionName 2.5.3 compileSdkVersion 26 buildToolsVersion 26.0.1 minSdkVersion 14 targetSdkVersion 26如果手动修改时,需要修改多个地方。为了解决这种麻烦,将以上信息写入配置文件。导入一个gradle脚本,即可实现一次修改,多moudle配置更新
具体步骤如下:

  1. 在项目更目录命名version.properties的文件,配置相关参数。


    相关参数
  2. 在工程的build.gradle 中通过apply from : "../config.gradle"导入config.gradle 脚本,该脚本可以放入随意地方。我为了在所有项目中都可以使用,放在了一个本地的目录。这个脚本除了可以配置版本信息外,还能处理git添加过滤文件失效的问题。

导入脚本

脚本内容如下:


ext {
    android = [
            compileSdkVersion : 26,
            buildToolsVersion : "26.0.1",
            minSdkVersion : 14,
            targetSdkVersion : 26,
    ]
    dependencies = [
            NineOldAndroids : 'com.nineoldandroids:library:2.4.0'
    ]
}

//解决添加.gitignore后没有反应
task removeGitCache () {
    Runtime.getRuntime().exec('git status')
    Runtime.getRuntime().exec('git rm -r --cached .')
    Runtime.getRuntime().exec('git add .')

    Runtime.getRuntime().exec('git commit -m \'update .gitignore\'')
    logger.quiet "clear SUCCESS"
}


task baseInfo{
   
    project.allprojects.indexed().each {key,value ->

    }
    println "project.rootProject = ${project.rootProject}"
}


ext.versionFile = file("${getProjectDir()}"+"/version.properties")

task load1Version(){
    project.version = read1Version()
}


class ProjectVersion{
    Integer versionCode
    String versionName
    Integer compileSdkVersion
    String buildToolsVersion
    Integer minSdkVersion
    Integer targetSdkVersion
    ProjectVersion(Integer versionCode,String versionName,Integer compileSdkVersion,String buildToolsVersion,Integer minSdkVersion,Integer targetSdkVersion){
        this.versionCode = versionCode
        this.versionName = versionName

        this.compileSdkVersion = compileSdkVersion
        this.buildToolsVersion = buildToolsVersion

        this.minSdkVersion  = minSdkVersion
        this.targetSdkVersion  = targetSdkVersion
    }
}

ProjectVersion read1Version(){
    logger.quiet 'Reading the version file'
    if(!versionFile.exists()){

    }

    Properties properties = new Properties()

    versionFile.withInputStream{ stream ->
        properties.load(stream)
    }

    logger.quiet "code = ${properties.versionCode.toInteger()}  name = ${properties.versionName}"
    new ProjectVersion(properties.versionCode.toInteger(),//
            properties.versionName,//
            properties.compileSdkVersion.toInteger(),//
            properties.buildToolsVersion,//
            properties.minSdkVersion.toInteger(),//
            properties.targetSdkVersion.toInteger())

}


task setConfig{
        project.subprojects.each {
            println "it.name = ${it.name}"

            it.rootProject.android.compileSdkVersion = project.version.compileSdkVersion
            it.rootProject.android.buildToolsVersion = project.version.buildToolsVersion

            it.rootProject.android.minSdkVersion = project.version.minSdkVersion
            it.rootProject.android.targetSdkVersion = project.version.targetSdkVersion

            it.rootProject.android.versionCode = project.version.versionCode
            it.rootProject.android.versionName = project.version.versionName
            println "it.versionName = ${it.rootProject.android.versionName}"
            println "it.versionCode = ${it.rootProject.android.versionCode}"
    }
}

最后一步:修改每个模块中的配置调用

修改每个模块中的配置调用
总结

当version.properties中的配置需要修改时,项目中所有模块的配置都会相同。
为什么不用扩展属性?我认为有些耦合,所以进行拆分。
为什么包含removeGitCache?我把自己常用的任务都配置在该脚本中,方便管理。

忘了件事情,下面是我学习的资料,内容比较浅。
http://www.web3.xin/code/2308.html
http://gradledoc.qiniudn.com/1.12/userguide/userguide.html
https://www.w3cschool.cn/gradle/

相关文章

网友评论

      本文标题:android项目使用gradle实现管理版本

      本文链接:https://www.haomeiwen.com/subject/clfnuxtx.html