Android 构建 修改apk 包名的gradle 插件 并上传本地maven 仓库

         Android 工程打包的时候apk 的名字会使用默认的名字,每次发布还需要手工修改名字比较麻烦 之前 是在module 的build.gradle 中添加了 groovy 代码,但是在进行其他项目的时候还需要将代码添加到新的工程中不是很方便 所以觉得制作一个简单的gradle 插件 用起来方便点。

        //第一步将创建一个library module ,然后将apply library 修改为 apply groovy 删除 android 等用不到的闭包

        //删除 src 文件下的 Androidtest test 文件夹 这些都用不到 只留下 main文件夹

        //删除 main 文件加下 的 res 文件夹(里面是Android 的资源文件 用不到), Androidmanfest 文件 (android 配置文件)

        //将java 文件夹修改为 groovy 

        //在main 文件夹下 创建 resources 文件 resources/META-INF/gradle-plugins 路径格式强制要求

     (创建properties文件,该文件名字就是你插件的名字 在其他地方引用的时候 apply 的时候用的就是这个文件的名字, 我这里就是  apply plugin: 'com.zjhcsoft.apkname')implementation-class=com.zjhcsoft.fyh.ApkNamePlugin

        //一行代码 就是你继承Plugin<Project> 类的groovy 文件 路径

   

ApkNamePlugin.groovy 文件用来实现功能 内容如下:

package com.zjhcsoft.apknameplugin

import org.gradle.api.Plugin
import org.gradle.api.Project

/**
 * @author by nate_fu on 2019/3/6.
 * @version vision 1.0
 * @Email: fuyonghui@zjhcsoft.com
 * @description: groovy 的语法和Java很相似 我们把之前 写在 build.gradle 的 修改apk 名字的代码搬到这里
 */
 class ApkNamePlugin implements Plugin<Project>{
     @Override
     void apply(Project project) {
         project.extensions.create('apkname',ApkNameExtension)


         project.android.applicationVariants.all { variant ->
             variant.outputs.all { output->
                 //找到工程的 Android 
                 def androidExtensions = project.extensions.findByName("android")
                 //得到versionName
                 def versionName = androidExtensions.defaultConfig.versionName
                             
                 def outputFile = output.outputFile
                 def fileName
                 def apkName = project.extensions.apkname.apkName == "" ? project.name : project.extensions.apkname.apkName
                 if (outputFile!=null&&outputFile.name.endsWith('.apk')){
                     if (variant.buildType.name.equals('release')){
                         fileName = "${apkName}${versionName}.apk"
                     }else if (variant.buildType.name.equals('debug')){
                         fileName = "${apkName}_debug.apk"
                     }
                     outputFileName =fileName
                 }
             }
         }
     }
 }

 

ApkNameExtension.groovy 文件是自定义的 一些属性 可以用来传递参数
package com.zjhcsoft.apknameplugin;

/**
 * @author by nate_fu on 2019/3/6.
 * @version vision 1.0
 * @Email: fuyonghui@zjhcsoft.com
 * @description:
 */
 class ApkNameExtension {
  String apkName="";
}

在这里我们只定义了一个apkName  我们在工程中使用这个插件的时候 就可以吧工程的apk 包名传递过来。

apkname{
    apkName="test_apk"
}

在工程的build.gradle 中使用这个属性

插件的 build.gradle 我们需要配置一些信息 包括apply  groovy     添加 gradle 依赖  等

apply plugin: 'groovy'
apply plugin: 'maven'

// maven 本地仓库路径
def MAVEN_LOCAL_PATH = uri('../../local_repo')

def ARTIFACT_ID = 'apknameplugin'
def VERSION_NAME = '1.0.0'
def GROUP_ID = 'com.zjhcsoft.fyh'

//加入依赖
dependencies {
    compile gradleApi()
    compile localGroovy()
}

uploadArchives{
    repositories {
        mavenDeployer {
            repository(url: MAVEN_LOCAL_PATH)
            pom.project{
                groupId GROUP_ID
                artifactId ARTIFACT_ID
                version VERSION_NAME
            }
        }
    }
}

使用  gradle 的uploadArchives命令  我们添加的 URL 是本地的maven 仓 相对地址  

def ARTIFACT_ID = 'apknameplugin'
def VERSION_NAME = '1.0.0'
def GROUP_ID = 'com.zjhcsoft.fyh'

定义这个插件的三个标记 用于在仓库中找到这个插件

之后我们可以点击右侧的 uploadArchives 命令上传到本地 仓库

然后我们在文件夹下就找到了我们仓库中的插件

最后是我们将上传到本地仓库的插件在 我们的工程中使用

在工程的根目录下的 build.gradle中引入本地maven 仓库

 repositories {
        //引入本地maven 仓库
        maven{
            url uri('../local_repo')
            name 'local-repo'
        }
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }

再 添加 插件的依赖

  dependencies {
        classpath 'com.zjhcsoft.fyh:apknameplugin:1.0.0'
      
    }

然后再在我们module 的 build.gradle  中 apply 我们的插件 

apply plugin: 'com.zjhcsoft.apkname' 

插件的名字 需要注意使用的就是我们之前创建的 resources  文件夹下 的 properties 文件的名字。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值