[原]Android打包之Gradle打包
最近尝试了一下Android的Gradle打包,发现确实比Ant打包会方便很多,特此记录下来。
注:android的gradle现在插件的版本已经是0.14.3了,对于一些老的方法和api,有一些已经被移除,无法使用(http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0),以下这些属性改名,原先的不能用:
runProguard -> minifyEnabled (是否混淆)
zipAlign -> zipALignEnabled (是否zip对齐)
packageName -> applicationId
jniDebugBuild-> jniDebuggable
renderscriptDebug->renderscriptDebuggable
renderscriptSupportMode->renderscriptSupportModeEnabled
renderscriptNdkMode->renderscriptNdkModeEnabled
Variant.packageApplication/zipAlign/createZipAlignTask/outputFile/processResources/processManifest使用variant.out代替
1、将Eclipse project转换成Gradle project:
在Project右键->Export->Generate Gradle build files,这样就会在Project多出一下文件:
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
gradlew和gradlew.bat分别是*nix下和windows下可执行的脚本,gradle-wrapper.properties用来指定需要下载的gradle的版本,内容如下:
#Wed Apr :: PDT
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-all.zip
build.gradle是用来配置编译选项的文件,附一个能够成功运行的编译脚本:
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.regex.Pattern buildscript {
repositories {
mavenCentral()
}
//指定gradle插件版本
dependencies {
classpath 'com.android.tools.build:gradle:0.14.+'
}
}
apply plugin: 'android' //添加android依赖libs
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
} //获取系统时间
def buildTime() {
def df = new SimpleDateFormat("yyyyMMdd'-'HHmm")
df.setTimeZone(TimeZone.getDefault())
return df.format(new Date())
} def apkName = "AndroidGradle" android {
compileSdkVersion
buildToolsVersion "20.0.0" sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
} // Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
} //签名
signingConfigs {
release {
storeFile file('release.keystore')
storePassword ''
keyAlias 'demo'
keyPassword ''
}
} //渠道
productFlavors {
free {
applicationId 'com.clarck.httpclientnew.free'
}
premium {
applicationId 'com.clarck.httpclientnew.premium'
}
} //lint检查
lintOptions {
abortOnError false
} buildTypes {
release {
//混淆开关
minifyEnabled true
//是否zip对齐
zipAlignEnabled true
//是否打开debuggable开关
debuggable false
//是否打开jniDebuggable开关
jniDebuggable false
//混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt')
//签名配置
signingConfig signingConfigs.release
} android.applicationVariants.all { variant ->
def manifestFile = file("AndroidManifest.xml")
def pattern = Pattern.compile("versionName=\"(.+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionName = matcher.group()
pattern = Pattern.compile("versionCode=\"(.+)\"")
matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = matcher.group() if (variant.buildType.zipAlignEnabled) {
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "apk/" + applicationId + "-V" + versionName + "-" + versionCode + "-" + variant.name + "-" + buildTime() + ".apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
} else {
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "apk/" + applicationId + "-V" + versionName + "-" + versionCode + "-" + variant.name + "-" + buildTime() + "-unaligned.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
}
最后执行./gradlew build进行打包即可,输出如下结果就表示打包成功:
:preBuild
:compileFreeDebugNdk
:preFreeDebugBuild
:checkFreeDebugManifest
:prepareFreeDebugDependencies
:compileFreeDebugAidl
:compileFreeDebugRenderscript
:generateFreeDebugBuildConfig
:generateFreeDebugAssets UP-TO-DATE
:mergeFreeDebugAssets
:generateFreeDebugResValues UP-TO-DATE
:generateFreeDebugResources
:mergeFreeDebugResources
:processFreeDebugManifest
:processFreeDebugResources
:generateFreeDebugSources
:compileFreeDebugJava
:preDexFreeDebug
:dexFreeDebug
:processFreeDebugJavaRes UP-TO-DATE
:validateDebugSigning
:packageFreeDebug
:zipalignFreeDebug
:assembleFreeDebug
:compilePremiumDebugNdk
:prePremiumDebugBuild
:checkPremiumDebugManifest
:preparePremiumDebugDependencies
:compilePremiumDebugAidl
:compilePremiumDebugRenderscript
:generatePremiumDebugBuildConfig
:generatePremiumDebugAssets UP-TO-DATE
:mergePremiumDebugAssets
:generatePremiumDebugResValues UP-TO-DATE
:generatePremiumDebugResources
:mergePremiumDebugResources
:processPremiumDebugManifest
:processPremiumDebugResources
:generatePremiumDebugSources
:compilePremiumDebugJava
:preDexPremiumDebug
:dexPremiumDebug
:processPremiumDebugJavaRes UP-TO-DATE
:packagePremiumDebug
:zipalignPremiumDebug
:assemblePremiumDebug
:assembleDebug
:preFreeReleaseBuild
:checkFreeReleaseManifest
:prepareFreeReleaseDependencies
:compileFreeReleaseAidl
:compileFreeReleaseRenderscript
:generateFreeReleaseBuildConfig
:generateFreeReleaseAssets UP-TO-DATE
:mergeFreeReleaseAssets
:generateFreeReleaseResValues UP-TO-DATE
:generateFreeReleaseResources
:mergeFreeReleaseResources
:processFreeReleaseManifest
:processFreeReleaseResources
:generateFreeReleaseSources
:compileFreeReleaseJava
:lintVitalFreeRelease
:compileFreeReleaseNdk
:proguardFreeRelease
:dexFreeRelease
:processFreeReleaseJavaRes UP-TO-DATE
:validateReleaseSigning
:packageFreeRelease
:zipalignFreeRelease
:assembleFreeRelease
:prePremiumReleaseBuild
:checkPremiumReleaseManifest
:preparePremiumReleaseDependencies
:compilePremiumReleaseAidl
:compilePremiumReleaseRenderscript
:generatePremiumReleaseBuildConfig
:generatePremiumReleaseAssets UP-TO-DATE
:mergePremiumReleaseAssets
:generatePremiumReleaseResValues UP-TO-DATE
:generatePremiumReleaseResources
:mergePremiumReleaseResources
:processPremiumReleaseManifest
:processPremiumReleaseResources
:generatePremiumReleaseSources
:compilePremiumReleaseJava
:lintVitalPremiumRelease SKIPPED
:compilePremiumReleaseNdk
:proguardPremiumRelease
:dexPremiumRelease
:processPremiumReleaseJavaRes UP-TO-DATE
:packagePremiumRelease
:zipalignPremiumRelease
:assemblePremiumRelease
:assembleRelease
:assemble
:compileLint
:lint
Ran lint on variant premiumRelease: issues found
Ran lint on variant freeDebug: issues found
Ran lint on variant premiumDebug: issues found
Ran lint on variant freeRelease: issues found
Wrote HTML report to file:/data/gitwork/AutoBuildProject/build/outputs/lint-results.html
Wrote XML report to /data/gitwork/AutoBuildProject/build/outputs/lint-results.xml
:check
:build BUILD SUCCESSFUL Total time: 41.892 secs
[原]Android打包之Gradle打包的更多相关文章
- Android 项目利用 Android Studio 和 Gradle 打包多版本APK
在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_ap ...
- 利用 Android Studio 和 Gradle 打包多版本APK
在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_ap ...
- Android Ant 和 Gradle 打包流程和效率对照
一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目文件夹.运行例如以下命令为ADT创建的项目加入ant build支持: android update proje ...
- Android Studio 使用 Gradle 打包 Jar
Android Studio 打 Jar 包一直是一个麻烦的事,按照网上现有的教程,打包一个混淆的 jar 需要完成下列步骤: 1.将 plugin 修改为 library 后 build 出 aar ...
- 在Android studio中用gradle打 jar 包(Mac下)
这两天公司要重构项目,以前的项目在eclipse上,准备迁移到Android studio上,需要对项目打包,于是我学习了Android studio中gradle打包的内容.我在公司用的Mac,在家 ...
- Gradle 实现 Android 多渠道定制化打包
Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...
- android studio 使用gradle 导出jar包,并打包assets目录
警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...
- android通过gradle打包
这里是最简单的打包方法,实际上gradle的语法是groovy,可以通过编写脚本实现更智能的构建,这个我还不懂==,等我学习了解后,单独整理一个gradle的随笔,这里先应付打包吧 环境要求 安装 ...
- [转]--android studio 使用gradle 导出jar包,并打包assets目录
转自: http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html 最近项目在做一个sdk,供别的开发者使 ...
随机推荐
- MultiTouch————多点触控,伸缩图片,变换图片位置
前言:当今的手机都支持多点触控功能(可以进行图片伸缩,变换位置),但是我们程序员要怎样结合硬件去实现这个功能呢? 跟随我一起,来学习这个功能 国际惯例:先上DEMO免费下载地址:http://down ...
- SAP大数据为"海上F1"提供技术支持
“海上F1”的2014极限帆船赛在青岛开赛,这场大赛是技术与体育高度融合的盛会.比赛中,每一个船员将使用各种高新技术,应尽所能,战胜对手.很多人之所以喜欢这样的比赛,是因为帆船比赛是世界上最复杂的一项 ...
- MongoDB图形化管理工具
NoSQL的运动不止,MongoDB 作为其中的主力军发展迅猛,也带起了一股开发图形化工具的风潮:气死反过来说,看一个产品是否得到认可,可以侧面看其第三方工具的数量和成熟程度:简单的收集了MongoD ...
- Revit如何修改三维视图背景色
Revit中默认的三维视图背景色为白色,有时候为了让现实效果更佳逼真,需要将三维视图背景色设置为天空色,只需在三维视图属性中打开"图形显示选项"即可对三维视图背景色进行设置.
- Android Studio生成javadoc出错的解决办法
一般使用Android Studio生成javadoc会有两个问题: 空指针异常 文档乱码 解决办法如下: 第1个问题:Tools --> Generate JavaDoc -->打开对话 ...
- Objective-c中定义成员变量
ios定义成员变量的方法: 如果只是内部访问,完全可以直接用_xxx(下划线),无需自己定义,编译器会自动生成 如果需要外部访问这个变量,可以用 @property xxx ; @synthesize ...
- 内部通信服务Factory(WCF)
WCF,很好,却又麻烦,很多时候不想用WCF的原因就是:用这个真麻烦... 麻烦的地方,比如: 一堆一堆的服务配置,散落在一个一个的folder下,更新系统时容易出错 客户端除了要知道WCF Cont ...
- WPF 的datagrid 列名中没有显示下划线是怎么回事?
引用:http://www.cnblogs.com/sqzhuyi/archive/2011/07/26/sqlserverclient.html#2831497 功能介绍:输入查询语句,显示列表 出 ...
- JXLS 双循环模板
商户名称 门店代码 时间 金额 <jx:forEach items="${resultList}" var="l"> ${l.name} ...
- scikit-learn主要模块和基本使用方法
从网上看到一篇总结的很不错的sklearn使用文档,备份勿忘. 引言 对于一些开始搞机器学习算法有害怕下手的小朋友,该如何快速入门,这让人挺挣扎的.在从事数据科学的人中,最常用的工具就是R和Pytho ...