最近尝试了一下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 10 15:27:10 PDT 2013
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.Patternbuildscript {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 18buildToolsVersion "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 '123456'keyAlias 'demo'keyPassword '111111'}}//渠道
    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(1)            pattern = Pattern.compile("versionCode=\"(.+)\"")matcher = pattern.matcher(manifestText)matcher.find()def versionCode = matcher.group(1)            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: 5 issues found
Ran lint on variant freeDebug: 5 issues found
Ran lint on variant premiumDebug: 5 issues found
Ran lint on variant freeRelease: 5 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
:buildBUILD SUCCESSFULTotal time: 41.892 secs

[原]Android打包之Gradle打包相关推荐

  1. 利用 Android Studio 和 Gradle 打包多版本APK

    视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html ==================================== ...

  2. Android Ant 和 Gradle 打包流程和效率对照

    一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目文件夹.运行例如以下命令为ADT创建的项目加入ant build支持: android update proje ...

  3. java调用android打包_Android Gradle打包基础

    Android gradle打包基础 gradle目录 [代码]java代码:12345MyApp├── build.gradle ( 可以查看Gradle的版本 )├── settings.grad ...

  4. android 使用jar里 aidl,Android Studio中用gradle打包带AIDL文件的jar文件

    关键代码task class_jar(type: Jar) { from "build/intermediates/classes/release/" //核心,将.class 文 ...

  5. Android开发Android studio之gradle打包apk重命名的方法

    老套路,先看效果图: 首先第一步在gradle里面(跟android同级)写个获取当前时间的方法如下: //获取时间的方法 GMT+8代表北京时间,下面两个方法都可以 static def getNo ...

  6. Android Studio 使用 Gradle 打包 Jar

    Android Studio 打 Jar 包一直是一个麻烦的事,按照网上现有的教程,打包一个混淆的 jar 需要完成下列步骤: 1.将 plugin 修改为 library 后 build 出 aar ...

  7. Android中清单文件引入配置参数,Android 使用gradle打包的各种配置

    原标题:Android 使用gradle打包的各种配置 在AS中利用gradle打包,可以高效并且自由地配置各种参数,发布不同的版本.关于配置gradle文件的一些做法,总结为如下. 一.替换Andr ...

  8. android+命令行编译,打包生成apk文件,Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包...

    默认为debug mode,使用的签名文件在: $HOME/.android/debug.keystore 比如 C:\Users\chengcj1.android\debug.keystore 1. ...

  9. Android Studio 3.0 下 Cordova 打包时 Gradle 兼容性问题解决

    为什么80%的码农都做不了架构师?>>>    升级到 Android Studio 3.0, Gradle 升级为 4.3.1 版本,使用 cordova build androi ...

最新文章

  1. 无服务器计算的黑暗面:程序移植没那么容易
  2. 10个奇幻的HTML5和Javascript效果
  3. Python3字符串split和join代码示例
  4. delphi获取本地外网ip_端口转发什么原理?WAN,LAN区别?私有IP和公有IP区别?
  5. Python之面向对象四
  6. Scala的符号入门
  7. bzoj1096 [ZJOI2007]仓库建设
  8. VError - Found 0 matching services的根源分析
  9. tez-site.xml_数字支付系统的未来-Google Tez和音频快速响应
  10. c# 命名空间命名规范_C#命名空间能力问题和解答 套装3
  11. python bmp转jpg_利用python实现.dcm格式图像转为.jpg格式
  12. 结构数组-创建结构数组---获取修改结构数组数据-------操作字段
  13. LeetCode:每日一题——数位成本和为目标值的最大数字
  14. ReentrantLock 源码解析
  15. WPF 设置TextBox为空时,背景为文字提示。
  16. 论文校对错别字检测工具
  17. web项目运行时无法重命名MySQL表问题排查
  18. 数据库对三大范式简单易懂的理解
  19. 【每日一练及解题思路V1】给定一个字符串,找出其中不含重复字符的最长子串的长度
  20. scp或者ssh报错“no matching host key type found. Their offer: ssh-rsa,ssh-dss“

热门文章

  1. 树莓派模拟电路_9.树莓派3B+ PWM操作
  2. tab s6 linux on dex,S Pen + DeX模式 三星Galaxy Tab S6让你秒变办公达人
  3. 【杂谈】GAN对人脸图像算法产生了哪些影响?
  4. 中国组合聚醚市场十四五发展规划与未来竞争趋势分析报告2022-2028年版
  5. 日照智能化乳品产业园签约 农民丰收节交易会对话乡村振兴
  6. Safe or Glitch-Free Clock Gating
  7. LeetCode(69):x 的平方根
  8. ajax原理及其优缺点
  9. 20144303 20145239 实验三 实时系统的移植
  10. 虚拟机中的solaris无法通过putty连接(网络模式为桥接模式)