首页 > [原]Android打包之Gradle打包

[原]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 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

 

更多相关:

  • 栈可以分为 顺序栈: 数组实现链式栈: 链表实现空间复杂度 栈的空间复杂度: 有一个n个元素的栈, 在入栈和出栈过程中, 只需要存储一个临时变量存储空间, 所以空间复杂度是O(1) 并不是说栈有n个元素, 空间复杂度就是O(n), 而是指除了原本的空间外, 算法需要的额外空间 栈要满足后进先出(LIFO)的特性, 栈有以下几种方法...

  • 什么是闭包   python中函数名是一个特殊的变量,它可以作为另一个函数的返回值,而闭包就是一个函数返回另一个函数后,其内部的局部变量还被另一个函数引用。   闭包的作用就是让一个变量能够常驻内存。 def count():fs = []for i in range(1, 4):def f():return i*ifs.appen...