Jenkins+Gradle实现自动化Android打包、输出APK到指定路径

Jenkins+Gradle实现自动化Android打包、输出APK到指定路径,有需要的朋友可以参考下。


关于 Jenkins+Gradle实现android开发持续集成、打包 的教程可参考:http://blog.csdn.net/xiongmc/article/details/26515577

Jenkins的四点强调
  1. 环境配置:JAVA_HOME、GRADLE_HOME必须配置正确,Java和gradle的bin目录加到path里面去;
  2. 检查Jenkins的gradle插件是否成功安装;
  3. 如果对Jenkins不熟练,请保持Jenkins系统设置的环境配置都为默认值;
  4. 对于首次使用Jenkins的新用户来说,设置管理员用户后可能会出现一个错误页面,无论怎么折腾都无法登录。这时请把操作系统当前用户目录里面的.Jenkins安装目录和Tomcat里面的jenkins项目整个删除(jenkins.war保留),然后重启Tomcat就都回到了初始状态。
自定义Gradle打包后APK输出路径

为了偷懒,我查了好多资料,都没发现如何自定义Gradle打包的输出路径。然后就不得不去学习了Gradle的语法教程,这位哥们的中文教程就不错:http://www.davenkin.me/post/2013-11-12/gradle-first-try

由于jenkins自动化打包是根据服务器的环境来决定的,所以我把APK输出路径写在了项目根目录下面的local.properties文件里面,local.properties文件只提交一次,以后每次提交都忽略,这样就不会覆盖服务器的配置了,下面是我的Mac配置:

local.properties文件

# Android SDK主目录(绝对路径),必须正确配置
sdk.dir=/Users/Gao/Desktop/Soft/Develop/Java/android/sdk

# 打包的输出路径(绝对路径),必须正确配置
appReleaseDir=/Users/Gao/Desktop/Workspace/Android/WitspringHealth/app/release

# APP版本号,用来升级使用
#appVersionCode = 1
# APP版本名称,最终打包使用
#appVersionName = 0.9.0

build.gradle文件

apply plugin: 'com.android.application'
apply plugin: 'android-apt'

ext.appVersionCode = 1
ext.appVersionName = "0.9.0"
ext.appReleaseDir = ""

def loadProperties() {
    def proFile = file("../local.properties")
    Properties p = new Properties()
    proFile.withInputStream { stream->
        p.load(stream)
    }
    appReleaseDir = p.appReleaseDir
//    appVersionCode = Integer.valueOf(p.appVersionCode)
//    appVersionName = p.appVersionName
}

loadProperties()

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.witspring.health"
        minSdkVersion 11
        targetSdkVersion 14
        versionCode appVersionCode
        versionName appVersionName
    }

    signingConfigs {//签名信息 可以自定义很多
        releaseConfig {
            storeFile file("Goven.keystore")
            storePassword "123456789"
            keyAlias "Goven"
            keyPassword "123456789"
        }
    }

    lintOptions {
        abortOnError false
    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            signingConfig signingConfigs.releaseConfig
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors {
        //  默认
        Witspring {}
        // google play
        谷歌商店 {}
        // 百度应用市场
        百度应用市场 {}
        // 360应用市场
        _360应用市场 {}
        // 应用宝
        应用宝 {}
        // 豌豆荚
        豌豆荚 {}
        // 小米商店
        小米商店 {}
        // 安卓市场
        安卓市场 {}
        // 91助手
        _91助手 {}
        // 安智市场
        安智市场 {}
        // 应用汇
        应用汇 {}
        // 机锋市场
        机锋市场 {}
        // 魅族商店
        魅族商店 {}
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }

    }

    //修改生成的apk名字
    applicationVariants.all{ variant->
        variant.outputs.each { output->
            def oldFile = output.outputFile
            def newName = '';
            if(variant.buildType.name.equals('release')){
                // APK输出文件名规则:aiyou-版本名-市场-release.apk
                def releaseApkName = 'aiyou-' + appVersionName + '-' + variant.productFlavors[0].name + '-release.apk'
                // appReleaseDir对应local.properties里面定义的路径,再加上日期(格式:201503011230)文件夹
                output.outputFile = new File(appReleaseDir + '/' + getDate(), releaseApkName)
            }
            if(variant.buildType.name.equals('beta')){
            }
            if(variant.buildType.name.equals('debug')){

            }
        }
    }

}

//获取时间戳
def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmm')
    return formattedDate
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    apt "org.androidannotations:androidannotations:3.2"
    compile 'org.androidannotations:androidannotations-api:3.2'
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
    compile 'com.android.support:support-v4:21.+'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'eu.inmite.android.lib:android-styled-dialogs:1.2.0'
    compile 'com.j256.ormlite:ormlite-android:4.48'
    compile 'com.j256.ormlite:ormlite-core:4.48'
    compile 'com.makeramen:roundedimageview:1.4.0'
    compile 'com.umeng.analytics:analytics:latest.integration'

    compile project(':libraryAndroidBootstrap')
    compile project(':libraryShareSDK')
    compile project(':libraryPullToRefresh')
    compile project(':libraryActionSheet')
    compile project(':libraryQiNiu')
    compile project(':libraryUmeng')
}

apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile
        resourcePackageName 'com.witspring.health'
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值