上两篇的地址

安装配置

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可不能简单批量的完成哟

一 签名

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

二混淆

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

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

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

三批量打包的两种方法

第一种:

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

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

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

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

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

第二种:

  1. defaultConfig {
  2. manifestPlaceholders = [ activityLabel:"defaultName"]
  3. }
  4.  
  5. productFlavors {
  6. channelname1{ }
  7. channelname2{ }
  8. //执行all方法,循环把 channelname*赋值给manifest中的变量
  9. all { flavor ->
  10. flavor.manifestPlaceholders = [CHANNEL:name ]
  11. }
  12. }

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

什么是依赖工程?

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

我举个例子就是我的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的内容 标配哈

  1. buildscript{
  2. repositories{
  3. mavenCentral();
  4. }
  5.  
  6. dependencies{
  7. //你可能需要改动的地方
  8. classpath 'com.android.tools.build:gradle:1.0.0'
  9. }
  10.  
  11. tasks.withType(JavaCompile) { options.encoding = "UTF-8" }
  12. }
  13.  
  14. apply plugin:'android-library'
  15.  
  16. dependencies{
  17. compile fileTree(dir:'libs',include:"*.jar")
  18. }
  19.  
  20. android{
  21. //你可能需要改动的地方
  22. compileSdkVersion 19
  23. //你可能需要改动的地方
  24. buildToolsVersion "19.1.0"
  25. enforceUniquePackageName=false
  26.  
  27. lintOptions{
  28. abortOnError false
  29. }
  30.  
  31. sourceSets{
  32. main{
  33. manifest.srcFile 'AndroidManifest.xml'
  34. java.srcDirs = ['src']
  35. resources.srcDirs = ['src']
  36. aidl.srcDirs = ['src']
  37. renderscript.srcDirs = ['src']
  38. res.srcDirs = ['res']
  39. assets.srcDirs = ['assets']
  40. }
  41. }
  42.  
  43. lintOptions{
  44. abortOnError false
  45. }
  46. }

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

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

  1. import java.util.regex.Pattern//用到的一些java的包
  2. import com.android.builder.core.DefaultManifestParser
  3. buildscript {
  4.  
  5. repositories {
  6. mavenCentral()
  7. }
  8.  
  9. dependencies {
  10. //你可能需要改动的地方
  11. classpath 'com.android.tools.build:gradle:1.0.0'
  12. }
  13. }
  14.  
  15. tasks.withType(JavaCompile) {
  16. options.encoding = "UTF-8"
  17. }
  18.  
  19. apply plugin: 'android'
  20.  
  21. dependencies {
  22. compile fileTree(dir: 'libs', include: '*.jar')
  23. //你可能需要改动的地方
  24. //这里 project就是编译一个工程的意思 注意名字要和settings中的对其 这个方法会自动去工程外找settings文件
  25. compile project(':appcompat_v7_6')
  26. }
  27.  
  28. android {
  29. //你可能需要改动的地方
  30. compileSdkVersion 19
  31. //你可能需要改动的地方
  32. buildToolsVersion "19.1.0"
  33. enforceUniquePackageName=false
  34.  
  35. defaultConfig {
  36. //你可能需要改动的地方
  37. targetSdkVersion 19
  38. }
  39. lintOptions{
  40. abortOnError false
  41. }
  42.  
  43. dexOptions {
  44. preDexLibraries = false
  45. }
  46.  
  47. //简化编译过程
  48. packagingOptions {
  49. exclude 'META-INF/DEPENDENCIES.txt'
  50. exclude 'META-INF/LICENSE.txt'
  51. exclude 'META-INF/NOTICE.txt'
  52. exclude 'META-INF/NOTICE'
  53. exclude 'META-INF/LICENSE'
  54. exclude 'META-INF/DEPENDENCIES'
  55. exclude 'META-INF/notice.txt'
  56. exclude 'META-INF/license.txt'
  57. exclude 'META-INF/dependencies.txt'
  58. exclude 'META-INF/LGPL2.1'
  59. exclude 'META-INF/ASL2.0'
  60. }
  61. signingConfigs {
  62. myConfig{
  63. storeFile file("android.keystore")
  64. storePassword "xxx"
  65. keyAlias "xxx"
  66. keyPassword "xxx"
  67. }
  68. }
  69.  
  70. buildTypes{
  71. release {
  72. signingConfig signingConfigs.myConfig
  73. proguardFile getDefaultProguardFile('proguard-properties.txt')
  74. }
  75. }
  76. defaultConfig {
  77. manifestPlaceholders = [ activityLabel:"defaultName"]
  78. }
  79.  
  80. sourceSets {
  81. main {
  82. manifest.srcFile 'AndroidManifest.xml'
  83. java.srcDirs = ['src']
  84. resources.srcDirs = ['src']
  85. aidl.srcDirs = ['src']
  86. renderscript.srcDirs = ['src']
  87. res.srcDirs = ['res']
  88. assets.srcDirs = ['assets']
  89. }
  90.  
  91. //把工程都搞过来一起编译包括所有的.so文件
  92. task copyNativeLibs(type: Copy) {
  93. //你可能需要改动的地方
  94. from(new File(project(':appcompat_v7_6').getProjectDir(), 'libs')) { include '**/*.so' }
  95. into new File(buildDir, 'native-libs')
  96. }
  97. tasks.withType(JavaCompile){
  98. compileTask -> compileTask.dependsOn copyNativeLibs
  99. }
  100. clean.dependsOn 'cleanCopyNativeLibs'
  101. tasks.withType( com.android.build.gradle.tasks.PackageApplication){
  102. pkgTask -> pkgTask.jniFolders = new HashSet<File>()
  103. pkgTask.jniFolders.add(new File(buildDir,'native-libs'))
  104. }
  105.  
  106. productFlavors {
  107. xxx1{ }
  108. xxx2{ }
  109. all { flavor ->
  110. flavor.manifestPlaceholders = [CHANNEL:name ]
  111. }
  112. }
  113. }
  114. }

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. RAID卡 BBU Learn Cycle周期的影响

    背景 最近遇到有些带MegaSAS RAID卡的服务器,在业务高峰时突然IO负载飚升得很高,IO性能急剧下降,查了日志及各种设置最后才发现是RAID卡的Cache写策略由 WriteBack变成Wri ...

  2. DrawPrimitivesTest

    #ifndef _DRAW_PRIMITIVES_TEST_H_ #define _DRAW_PRIMITIVES_TEST_H_ ////----#include "cocos2d.h&q ...

  3. 经典 makefile 教程

     makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序 ...

  4. Windows Server 2012部署第一台域控

    windows server 2012在部署DC方面有了一些改变,不但在操作上有一些改变,而且有了新的DC克隆的功能.本文就先来体验一下如何将一台windows server 2012 RTM服务器提 ...

  5. 翻转数字最后n位

    #include<stdio.h> int turn_n(int ,int); int main(void) { ,b=; printf("%x\n%d\n%x\n", ...

  6. Java调用存储过程小结

    学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...

  7. timeout的作用

    废话: 刚才刚才看视屏有一点没看懂,timeout的作用. 得出的结果: setTimeout(‘test()’,1000); 第一个参数要调用的函数名,第二个参数是延时的时间.时间到达以后调用tes ...

  8. 【C#】访问泛型中的List列表数据

    光看标题的确不好说明问题,下面描述一下问题场景: 已知后端自定义的返回的Json数据结构如下: response: { "message": "返回成功", & ...

  9. Android——实现欢迎界面的自动跳转(转)

    Android实现欢迎界面的自动跳转,就是打开某一个安卓手机应用,出现的欢迎界面停留几秒钟,自动进入应用程序的主界面.在网上看到很多种实现办法,但是感觉这种方法还是比较简单的. 在onCreate里设 ...

  10. libtommath.a: could not read symbols: Bad value 编译错误

    最近做个项目需要RSA,便调用了tommath,平时开发环境都在32位的系统上,编译运行一切都没问题,但当把程序换到一台64位系统上编译时出现: /usr/bin/ld: /usr/lib/gcc/x ...