android build.gradle学习

来源:互联网 发布:佛山js防水材料 编辑:程序博客网 时间:2024/06/06 03:44

什么是Gradle?

Gradle 以module 来管理project,在Gradle 构建的Gradle project中通常包含application module(com.android.application),与library module(com.android.library)两种module。

在Gradle 的project 中需要使用,基本上全都使用.gradle 文件来配置,是一个脚本化的工程构建,而非原先ADT中那种eclipse 的可视化构建。gradle的依赖管理能力极其强大,几乎所有的开源项目都可以简单的通过一条compile指令完成依赖的配置。

安装Gradle

第一次新建项目成功会下载Gradle,貌似这个过程不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。那么下载的Gradle到什么地方呢?

  • Mac上会默认下载到 **/Users/<用户名>/.gradle/wrapper/dists** 目录

  • Win平台会默认下载到 C:\Documents and Settings<用户名>.gradle\wrapper\dists目录

你会看到这个目录下有个 gradle-x.xx-all 的文件夹, 如果下载实在太慢,但是又不想翻墙的话,可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下,不过还是建议让它直接下载的好。

首先我们学习几个gradle 的脚步语法,掌握了这几个语法,你就能非常简单的用gradle构建打包android项目了。 首先,我们来看下一个最简单android build.gradle

build.gradle

  1. buildscript {
  2.        
  3.  repositories {
  4.             mavenCentral()
  5.         }
  6.  
  7.         dependencies {
  8.             classpath 'com.android.tools.build:gradle:0.4'
  9.         }
  10.     }
  11.  
  12.     apply plugin: 'android'
  13.  
  14.     android {
  15.         compileSdkVersion 17
  16.     }


buildscript{}

Configures the build script classpath for this project. 设置脚本运行环境

repositories{}

Returns a handler to create repositories which are used for retrieving dependencies and uploading artifacts produced by the project. 支持java 依赖库管理(maven/ivy),用于项目的依赖。

dependencies{}

The dependency handler of this project. The returned dependency handler instance can be used for adding new dependencies. For accessing already declared dependencies, the configurations can be used. 依赖包的定义。支持 maven/ivy,远程,本地库,也支持单文件,如果前面定义了repositories{}maven库,使用maven的依赖(我没接触过ivy。。)的时候只需要按照用类似于com.android.tools.build:gradle:0.4,gradle 就会自动的往远程库下载相应的依赖。

apply plugin:
声明构建的项目类型,这里当然是android了。。。

android{}

设置编译android项目的参数,接下来,我们的构建android项目的所有配置都在这里完成。

首先,你要安装Gradle 1.6 并且,写进系统的环境变量里面,所有的命令都是默认你已经配好了gradle 的环境。而且,已经已经升级了android sdk 22

要用gradle构建你的有两种方式:(build.gradle 放到项目目录下

  1. 利用adt 22导出 build.gradle.

  2. 复制别人写好的build.gradle 文件.

  3. 根据gradle 规则,手写android 的build.gradle 文件。

个人推荐1,2 方法。。。。

一个android build.gradle 最基本基本文件

build.gradle

  1. buildscript {
  2.  
  3.     repositories {
  4.         mavenCentral()
  5.     }
  6.  
  7.     dependencies {
  8.         classpath 'com.android.tools.build:gradle:0.4'
  9.     }
  10. }
  11.  
  12. apply plugin: 'android'dependencies {
  13. }
  14.  
  15. android {
  16.  
  17.     compileSdkVersion 25
  18.     buildToolsVersion "25.0.0"
  19.  
  20.     defaultConfig {
  21.         minSdkVersion 15
  22.         targetSdkVersion 25
  23.     }
  24.     sourceSets {
  25.         main {
  26.             manifest.srcFile 'AndroidManifest.xml'
  27.             java.srcDirs = ['src']
  28.             resources.srcDirs = ['src']
  29.             aidl.srcDirs = ['src']
  30.             renderscript.srcDirs = ['src']
  31.             res.srcDirs = ['res']
  32.             assets.srcDirs = ['assets']
  33.         }
  34.  
  35.         instrumentTest.setRoot('tests')
  36.     }
  37. }

接着在命令行cd 到项目目录下

例如: cd e:\workplace\andoridGradle

如果你是第一次使用gradle 构建android项目建议你先使用gradle clean 把android gradle 插件,还有相关依赖包下载下来并且对环境进行初始化,如果出错了,一般可能是下载超时,试多几次即可,最后你会看到如下提示:BUILD SUCCESSFUL

The TaskContainer.add() method has been deprecated and is scheduled to be remove d in Gradle 2.0. Please use the create() method instead.

:clean UP-TO-DATE

BUILD SUCCESSFUL

Total time: 7.847 secs

完成以上的步骤,就可以正式使用gralde 构建你的android项目了。

然后使用gradle build 就完成了android 项目的构建了。如果,你是照着以上步骤走的话,你将会想项目目录里面看到一个build 的目录,里面就是用gradle 构建android项目的全部例如了,结构目录看附录。

最终打包的apk 就在build/apk 目录下了。然后,你会发现,两个apk 一个是 [项目名]-debug-unaligned [项目名]-release-unsigned

如果以上内容你都掌握的话,接下来就将详细说说如何利用gralde 打包android apk。

上面说了一大堆东西,其实并不吸引人去使用gradle,如果只是构建项目的话,adt不是更合适吗?如果,你看完以下内容还是这么觉得的话,你就没必要折腾gradle了。。。。。。

看附录 默认输出 release apk 是没有签名的,那么我们需要签名的很简单,只需要在android{}里面补充加上加上即可。

build.gradle

  1. signingConfigs {
  2.    myConfig{
  3.      storeFile file("gradle.keystore")
  4.     storePassword "gradle"
  5.     keyAlias "gradle"
  6.     keyPassword "gradle"
  7.     }}
  8.     
  9.    buildTypes{
  10.      release {
  11.     signingConfig  signingConfigs.myConfig
  12.      } 
  13.    }
然后,运行gradle clean gradle build ,这次在build/apk 你看到了多了一个[项目名]-release-unaligned, 从字面上面我就可以知道,这个只是没有进行zipAlign 优化的版本而已。而[项目名]-release 就是我们签名,并且zipAlign 的apk包了. ###打混淆包### 只需要在原来的基础上加上,
  1. buildTypes{
  2.    release {
  3.    signingConfig  signingConfigs.myConfig
  4.      runProguard true
  5.      proguardFile 'proguard-android.txt'
  6.    }
  7. }

gradle clean

gradle build

现在来解释一下上一节的问题,apk目录下的两个apk 的含义

为什么产生了两个apk?

默认的android gralde 插件定义了两种apk 的类型debugrelease,这两种类型的详细对比看附录。

这个是android gralde 插件 buildTypes{} 方法产生的,默认配置好了两个默认模板,当然你也可以修改,前面我们就是在修改默认的release 的配置,让输出release类型的的apk,具有签名和混淆。

对于多渠道包,android 插件提供了一个名为Product Flavor{} 的配置,用于进行多渠道打包。

例如,我的android应用有海外版,和国内版本,而且这两个版本的包名是不一样的!!(我就举两个市场的例子安装这个思路,你要打包100个不同的市场只是几行代码的事情。)。

你只需要在android{} 补充上

build.gradle

  1. productFlavors {
  2. playstore {
  3. packageName='com.youxiachai.androidgradle.playstore'
  4. }
  5. hiapk {
  6. packageName='com.youxiachai.androidgradle.amazonappstore'
  7. }
  8. }

然后gradle clean,gradle build,在build/apk 下面你会看到一堆的包,命名格式[项目名]-[渠道名]-release

仅此而已?

Product Flavor{} 不只是能改包名那么简单,还能够对编译的源码目录进行切换。

什么意思? 不知道各位有没有用过友盟做用户统计,如果,你用的是分发渠道分析,你需要修改AndroidManifest.xml 添加上 <meta-data android:value="hiapk" android:name="UMENG_CHANNEL"/>

如果,你很多渠道,,然后你就会很痛苦,现在用gradle 就非常舒服,你只需要在android.sourceSets指定我们的渠道名就行,android gradle 插件,会自动打包!!!例如

build.gradle

  1. sourceSets {
  2.     main {
  3.         manifest.srcFile 'AndroidManifest.xml'
  4.         java.srcDirs = ['src']
  5.         resources.srcDirs = ['src']
  6.         aidl.srcDirs = ['src']
  7.         renderscript.srcDirs = ['src']
  8.         res.srcDirs = ['res']
  9.         assets.srcDirs = ['assets']
  10.     }
  11.         
  12.     hiapk {
  13.       manifest.srcFile 'hiapk/AndroidManifest.xml'
  14.     }    
  15.        playstore {
  16.        manifest.srcFile 'hiapk/AndroidManifest.xml'
  17.     }
  18.        
  19. instrumentTest.setRoot('tests')
  20.         }

然后运行gradle clean,gradle build,省下的时间去喝杯咖啡,睡个觉什么 的都好。。。 ###外部依赖### android gradle 对于外部jar 包的应用支持maven/ivy 管理的包,也支持指定具体文件,前面已经在上文说过。上面演示的完整 build.gradle gist 里面也有写。你需要加上如下代码即可: build.gradle

  1. dependencies {
  2.     compile files('libs/android-support-v4.jar')
  3. }

0 0
原创粉丝点击