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

上两篇的地址

安装配置

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 ]
            }
        }
    }
}    
时间: 2024-10-14 14:16:46

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

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

1.gradle的概念 2.gradle配置jar包.和libs目录导入jar包的差别 3.签名打包: (1)Studio (2)命令行 (3)gradle wrapper的原理 4.BuildConfig的使用 5.简介module中build.gradle文件參数含义 一.gradle的概念: gradle是一个构建工具 gradle是以Groovy语言为基础的 gradle主要面向的是Java语言 打开Android Studio内置的终端,在输入例如以下命令查看gradle版本号: gr

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

如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件.因为Android Studio 是用Gradle来管理项目的,具体操作步骤如下: 从Eclipse中导出        1.将你的ADT插件版本升级到22.0以上.        2.在Eclipse中,选择File-->Export.        3.在弹出的导出窗口中,打开Android的文件夹,选择“Generate

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

英文地址:http://developer.android.com/sdk/installing/migrate.html 翻译:Android Studio 中文组(大锤译) 如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件.因为Android Studio 是用Gradle来管理项目的,具体操作步骤如下: 从Eclipse中导出        1.将你的ADT插件版本升级到

安卓ADT项目及升级AS(Android Studio)全攻略

安卓ADT项目及升级AS全攻略...1 1    ADT项目(即原Eclipse开发环境下项目)打包.签名.混淆配置...2 1.1     生成签名文件...2 1.2     打包配置...2 2    Eclipse项目升级至AS项目及升级过程遇到问题...7 2.1     首先将原先项目复制一份出来(避免损坏原项目),记为project_tag..7 2.2     打开AS选择Import project (Eclipse ADT,Gradle,etc)7 3    AS项目多渠道混

解决Android Studio启动项目后一直处于refreshing &#39;View&#39; gradle project,快速解决亲测有效

一直处于refreshing 'View' gradle project最根本的原因是项目中所用到的gradle版本在GRADLE_USER_HOME这个路径下没有找到,所以就利用distributionUrl这个路径进行下载,但是呢下载的时候会非常非常慢,So就一直卡在了refreshing 'View' gradle project 我的这个GRADLE_USER_HOME="C:\Users\Ivan\.gradle\wrapper\dists",大家可以根据自己的路径找到 要快

Android Studio报错:Failed to complete Gradle execution.

解决Android Studio报错:Failed to complete Gradle execution. 运行Android Studio的时候,出现以下错误: 原因:用于启动虚拟机的内存不够,android studio的默认最大内存是10g,所以对于4g.8g内存的电脑来说,内存不够用,不过为什么有时不会出问题有时会,可能是google优化不好吧,但这又有个问题,把参数改为1g.2g都不行,一定要更小才行,只能说明Android studio确实有bug. 解决方法 1: 解决方法 2

gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第二篇:gradle简单实战

一个bug 一个脚印的叫你们用gradle. 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走了很多歪路才弄出来,所以我弄一个完全完整的版本 3我不但会写gradle还会写ant打包方式,希望能帮到大家 在这之前你需要有一个android工程(工程中不能有已经过时的方法) 可以没有eclipse或者ADT 因为只要你工程是ok的 gradle就可以直接用 后面我会越说越详细 前面都太简单了

gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第一篇:安装配置gradle

一个bug 一个脚印的叫你们用gradle. 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走了很多歪路才弄出来,所以我弄一个完全完整的版本 3我不但会写gradle还会写ant打包方式,希望能帮到大家 在这之前你需要有一个android工程(工程中不能有已经过时的方法) 可以没有eclipse或者ADT 因为只要你工程是ok的 gradle就可以直接用 后面我会越说越详细 前面都太简单了

Android Eclipse下工程移植到Android Studio详细步骤

重新申请了一台电脑之后,最近开始试着使用Android studio对项目进行开发,安装好studio之后首先要做的就是之前Eclipse上面项目的移植问题,今天尝试了几个不同的项目,顺便参考了不同的网上资料,资料比较多,就想着自己整理一份以备不时之需,开始具体的步骤: 1.Eclipse上要一直项目的输出,选中项目右键 --> Export --> Android --> Generate Gradle build files,接下来Next,选中要移植的项目Finish,项目中如果出