Jenkins+Gradle实现自动化Android打包、输出APK到指定路径
2015-03-15 22:24
811 查看
关于 Jenkins+Gradle实现android开发持续集成、打包 的教程可参考:http://blog.csdn.net/xiongmc/article/details/26515577
检查Jenkins的gradle插件是否成功安装;
如果对Jenkins不熟练,请保持Jenkins系统设置的环境配置都为默认值;
对于首次使用Jenkins的新用户来说,设置管理员用户后可能会出现一个错误页面,无论怎么折腾都无法登录。这时请把操作系统当前用户目录里面的.Jenkins安装目录和Tomcat里面的jenkins项目整个删除(jenkins.war保留),然后重启Tomcat就都回到了初始状态。
由于jenkins自动化打包是根据服务器的环境来决定的,所以我把APK输出路径写在了项目根目录下面的local.properties文件里面,local.properties文件只提交一次,以后每次提交都忽略,这样就不会覆盖服务器的配置了,下面是我的Mac配置:
local.properties文件
build.gradle文件
Jenkins的四点强调
环境配置:JAVA_HOME、GRADLE_HOME必须配置正确,Java和gradle的bin目录加到path里面去;检查Jenkins的gradle插件是否成功安装;
如果对Jenkins不熟练,请保持Jenkins系统设置的环境配置都为默认值;
对于首次使用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 } depe 4000 ndencies { 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' } }
相关文章推荐
- Jenkins+Gradle实现自动化Android打包、输出APK到指定路径
- as通过gradle实现多渠道打包+使用配置文件进行版本管理+指定apk输出路径和apk文件名
- as通过gradle实现多渠道打包+使用配置文件进行版本管理+指定apk输出路径和apk文件名
- as通过gradle实现多渠道打包+使用配置文件进行版本管理+指定apk输出路径和apk文件名
- 在 Android studio 中 配置Gradle 做到 “根据命令行提示符生成指定versionCode, versionName,指定apk的打包输出路径”
- 一.jenkins+github+gradle 实现android自动化打包全攻略(MAC版)
- Android开发之Jenkins+Gradle实现持续集成、apk多渠道打包
- 在 Android studio 中 配置Gradle 做到 “根据命令行提示符生成指定versionCode, versionName,指定apk的打包输出路径”
- Jenkins+Gradle实现android开发持续集成、打包
- Jenkins+Gradle实现android开发持续集成、打包
- Android: Jenkins+SVN+Gradle+QQ Mojo实现项目自动化构建
- jenkins+gradle+android自动化构建apk(Linux服务器)
- [置顶] Jenkins+Gradle实现android开发 自动打包 上传蒲公英
- Jenkins实现Android自动化打包
- android--jenkins+gradle+android自动化构建apk步骤
- Jenkins 持续集成实现 Android 自动化打包
- android--jenkins+gradle+android自动化构建apk步骤
- android--jenkins+gradle+android自动化构建apk步骤
- 【Android】使用Gradle实现分渠道打包,指定应用名称,应用图标,应用标识和环境切换
- Jenkins实现自动化打包并集成fir平台(Android自动化打包)