上两篇的地址

安装配置

http://www.cnblogs.com/uncle2000/p/4276833.html

简单实战

http://www.cnblogs.com/uncle2000/p/4277476.html

我之所以以前用ant现在用gradle是因为 ant打包给 加入第三方依赖工程非常非常非常麻烦,而网上关于两者的对比就数不胜数了,大家可以去查,充分的说明了 gradle的优势

而且还有一点就是gradle的中文资料是要多于ant的,想当初ant中加入for-each 和 switch-case 可是让我操碎了心,关于我的ant代码我也会在后面的android打包中给出源码。

而关于gradle来打包我学一天就已经掌握了,而ant 用个循环还要装支持的插件我擦!并且我很讨厌标签化的语言

好了废话少说 开门见山 此篇的内容要少于上篇,如果gradle此篇的这些功能,eclipse可不能简单批量的完成哟

一 签名

//签名的配置  我后面配上完整代码  这里关于域就不细写了
signingConfigs {
myConfig{
//签名文件,放到工程根目录哟
storeFile file("xxxx.keystore")
//签名文件的密码
storePassword "xxxxx"
//工程的Alias名
keyAlias "xxxx"
//签名的密码
keyPassword "xxxx"
}
}
//构建的时候要做的事情都在这里,比如签名或者混淆
buildTypes{
release {
//注意网上有些是错的,这个是对应新的2.2.1的gradle中的方法
//这个的意思是 执行签名 执行的方法是signingConfigs下的myConfig内的配置 就是上面那个域
signingConfig signingConfigs.myConfig
}
}

二混淆

关于混淆文件(proguard-properties.txt)内容我就不给出了哈

刚刚说了混淆也是在那个执行方法里

buildTypes{
release {
//执行混淆 混淆配置在根目录下的proguard-properties.txt文件内
proguardFile getDefaultProguardFile('proguard-properties.txt')//指定混淆文件
}
}

三批量打包的两种方法

第一种:

批量打包的部分代码我上一篇都有提过

defaultConfig {
manifestPlaceholders = [ activityLabel:"defaultName"]
} productFlavors {
//渠道一的配置
channelname1{
//把manifest中的“CHANNEL”变量名(key)的变量值(value)替换成xxx1
//这里也可以把“"xxx1"” 换成name=> [CHANNEL:name] 这个的意思就是把value换成 channelname1
//由于网上的乱七八糟的粘贴复制 所有网上的那些根本没说清楚,这里的CHANNEL必须要再manifest中有且对应 具体我写在下面代码块
manifestPlaceholders = [CHANNEL:"xxx1"]
}
//渠道二的配置
channelname2{
manifestPlaceholders = [CHANNEL:"xxx2" ]
}
....渠道n......
}

注意manifest中加入这么一段  属于那个域都可以,但是你要会取,我写在了<application>

//这里的$对于android编译器来说就是个char 但是对于gradle来说就是变量的意思,可以替换,用什么替换?当然是我上个代码块中的productFlavors域中的值了。切忌这个CHANNEL要和上个代码块中的CHANNEL对应 如果改变其中一个记得改变另一个
<meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL}" />

这样就可以了,这种配置适合在每一个里面都单独配置,比如不同渠道不同的版本号,不同的各种各样的配置,但是如果不需要那么多花哨,就可以用第二种方法

第二种:

defaultConfig {
manifestPlaceholders = [ activityLabel:"defaultName"]
} productFlavors {
channelname1{ }
channelname2{ }
//执行all方法,循环把 channelname*赋值给manifest中的变量
all { flavor ->
flavor.manifestPlaceholders = [CHANNEL:name ]
}
}

四依赖工程/依赖第三方工程/依赖外部工程

什么是依赖工程?

其实很简单的只要在原来代码上加入几行代码几个文件就可以实现,所以不要想那么难

我举个例子就是我的xxx工程依赖appcompat_v7_6这个工程的情况

如上图  两个工程 两个文件 这是最上级目录

目录结构是这样

/appcompat_v7_6/1~n个子文件

/xxx/1~n个子文件

/local.properties

/settings.gradle

除此以外

两个工程中各有一个 build.gradle

一个一个说。

1 local.properties文件内的内容是你sdk的根目录 很简单吧

2settings.gradle文件内的内容是所有有联系的工程名

结构是   include ':x1',':x2',':x3',.........注意不要用中文

":"相当于文件夹系统的“\xx\”中的“\”

3 然后看我appcompat_v7_6中的build.gradle的内容 标配哈

buildscript{
repositories{
mavenCentral();
} dependencies{
//你可能需要改动的地方
classpath 'com.android.tools.build:gradle:1.0.0'
} tasks.withType(JavaCompile) { options.encoding = "UTF-8" }
} apply plugin:'android-library' dependencies{
compile fileTree(dir:'libs',include:"*.jar")
} android{
//你可能需要改动的地方
compileSdkVersion 19
//你可能需要改动的地方
buildToolsVersion "19.1.0"
enforceUniquePackageName=false lintOptions{
abortOnError false
} sourceSets{
main{
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
} lintOptions{
abortOnError false
}
}

以上出了注释可能需要改动的地方 其他地方一律不变,除非你用的gradle是很老的版本 有些方法不能用

4最后看我xxx中的文件内容

import java.util.regex.Pattern//用到的一些java的包
import com.android.builder.core.DefaultManifestParser
buildscript { repositories {
mavenCentral()
} dependencies {
//你可能需要改动的地方
classpath 'com.android.tools.build:gradle:1.0.0'
}
} tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
} apply plugin: 'android' dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
//你可能需要改动的地方
//这里 project就是编译一个工程的意思 注意名字要和settings中的对其 这个方法会自动去工程外找settings文件
compile project(':appcompat_v7_6')
} android {
//你可能需要改动的地方
compileSdkVersion 19
//你可能需要改动的地方
buildToolsVersion "19.1.0"
enforceUniquePackageName=false defaultConfig {
//你可能需要改动的地方
targetSdkVersion 19
}
lintOptions{
abortOnError false
} dexOptions {
preDexLibraries = false
} //简化编译过程
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/ASL2.0'
}
signingConfigs {
myConfig{
storeFile file("android.keystore")
storePassword "xxx"
keyAlias "xxx"
keyPassword "xxx"
}
} buildTypes{
release {
signingConfig signingConfigs.myConfig
proguardFile getDefaultProguardFile('proguard-properties.txt')
}
}
defaultConfig {
manifestPlaceholders = [ activityLabel:"defaultName"]
} sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
} //把工程都搞过来一起编译包括所有的.so文件
task copyNativeLibs(type: Copy) {
//你可能需要改动的地方
from(new File(project(':appcompat_v7_6').getProjectDir(), 'libs')) { include '**/*.so' }
into new File(buildDir, 'native-libs')
}
tasks.withType(JavaCompile){
compileTask -> compileTask.dependsOn copyNativeLibs
}
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType( com.android.build.gradle.tasks.PackageApplication){
pkgTask -> pkgTask.jniFolders = new HashSet<File>()
pkgTask.jniFolders.add(new File(buildDir,'native-libs'))
} productFlavors {
xxx1{ }
xxx2{ }
all { flavor ->
flavor.manifestPlaceholders = [CHANNEL:name ]
}
}
}
}

gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第三篇:gradle完整的实战的更多相关文章

  1. Android studio第一次使用配置(三)gradle项目构建

    1.gradle的概念 2.gradle配置jar包.和libs目录导入jar包的差别 3.签名打包: (1)Studio (2)命令行 (3)gradle wrapper的原理 4.BuildCon ...

  2. 如何将Eclipse中的项目迁移到Android Studio 中

    如何将Eclipse中的项目迁移到Android Studio 中 如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的 ...

  3. [转]-如何将Eclipse中的项目迁移到Android Studio 中

    英文地址:http://developer.android.com/sdk/installing/migrate.html 翻译:Android Studio 中文组(大锤译) 如果你之前有用Ecli ...

  4. studio--如何将Eclipse中的项目迁移到Android Studio 中

    如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件.因为Android Studi ...

  5. 如何将Eclipse中的项目迁移到Android Studio中

    如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件.因为Android Studi ...

  6. [入门]在Mac OS X下使用和配置Android Studio

    Android Studio可谓是安卓开发的XCode,流畅的速度+顺眼的UI足以秒杀Eclipse.在Mac OS X可以通过如下的途径获得Android Studio  最新版本的Android ...

  7. IDEA插件(Android Studio插件)开发示例代码及bug解决

    IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...

  8. 解决Android Studio出现Failed to open zip file. Gradle's dependency cache may be corrupt的问题

    问题如下图所示: 解决: 修改 gradle-wrapper.properties里的gradle的版本,与之前没有报错的gradle版本一致.就可以了 比如我报这个错的时候 : distributi ...

  9. 【Flutter 1-2】在 Windows 10下安装Flutter+Dart+Android Studio 配置Flutter开发环境

    在 Windows 10下安装Flutter+Dart+Android Studio 配置Flutter开发环境 文章首发地址 配置环境变量 由于部分网站被墙的原因,我们需要先配置Flutter国内镜 ...

随机推荐

  1. 【Android】3.1 创建本章示例项目

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 注意:本节是在完成了 3.0节介绍的预备知识的基础上继续实现的. 示例1--显示地图并为后续内容做准备 1.运 ...

  2. 常用的一个cookie 对象,还有path 兼容性问题

      //cookievar ck = { getObj:function() { var ck = document.cookie; var obj = {}; if(ck!="" ...

  3. 【快速查阅】Linux下启动和关闭Weblogic(管理服务器+被管服务器)

    Weblogic的管理服务器和被管服务器的启动.关闭,偶尔会用到,却又不常用,导致需用时却忘记了,而又重新查阅HELP. 故,以此记录,方便查阅.执行. 首先,weblogic的启动脚本和关闭脚本都在 ...

  4. CSocket类的使用

    重点介绍一个MFC中CSocket类的使用 1.创建套接字 使用CSocket类创建套接字对象是通过该类的构造函数创建的.其原型如下: CSocket::CSocket(); 例如,用户创建CSock ...

  5. Redis学习之(二)java运用

    都1.首先,如果要在java运用的话,就需要引入对应的jar包 https://pan.baidu.com/s/1Hu1mUX5XoE_HmUEFlU3XBg 2.还有一点注意的就是,我在使用JDK8 ...

  6. eql高可用部署方案

    运行环境 服务器两台(后面的所有配置案例都是以10.96.0.64和10.96.0.66为例) 操作系统CentOS release 6.2 必须要有共同的局域网网段 两台服务器都要安装keepali ...

  7. 官网下载到离线的Adobe Acrobat Reader DC

    Adobe 官方 FTP :ftp://ftp.adobe.com/ Adobe Acrobat Reader DC 下载目录:ftp://ftp.adobe.com/pub/adobe/reader ...

  8. linux设置开机服务自动启动/关闭自动启动命令

    linux设置开机服务自动启动/关闭自动启动命令 2012-02-06 15:13 [root@localhost ~]# chkconfig --list     显示开机可以自动启动的服务[roo ...

  9. 字符数组在C++、C#等语言中的操作

    1.C++中操作数组 #include <iostream> using namespace std; int length(char []); void output_frequency ...

  10. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...