eclipse中如何用gradle构建android项目

一、准备工作


1、下载:首先下载gradle,地址://www.gradle.org/,这里我用的是gradle1.10,下载的zip文件如下,


解压到指定目录。然后配置环境变量,这里我的解压的指定目录为

E:\gradle-1.10-all\gradle-1.10

2、配置环境变量

 配置PATH环境变量,如下指定bin文件的目录E:\gradle-1.10-all\gradle-1.10\bin;


新建环境变量GRADLE_HOME,配置如下



以上环境变量配置完毕之后进入cmd命令:输入“gradle -v”命令,如果如下展示,说明配置成功


二、正式使用

这里新建个用于测试的test安卓工程。目录如下


首先利用ADT导出build.gradle文件








选中要导出文件的工程,这里是选中test,点击next。








可以看到多了图中箭头标识的文件,右键刷新工程


工程文件更新如下,多出如下几个文件:




1、先说没有特殊需求的打包,如果仅仅只是需要打测试包的话,则在cmd下cd到当前工程的目录下


输入“gradle clean”命令,显示如下说明clean成功



现在开始构建项目,输入“gradle build”,显示如下说明成功



右键刷新工程,会出现build文件夹,如下



打开apk文件夹,会发现下面有两个apk文件,第一个是debug模式下未对齐的apk,第二个是relase模式下未签名的apk,这两个apk都不是打正式包我们需要的,因为还没有加签名。下面会介绍加签名的包怎么打出来。




2、构建有签名的正式包,先把项目的keystore的文件放到根目录下。



打开build.gradle文件进行配置,在android下面增加signingConfigs 和buildTypes。将其中的keystore相关信息替换成你自己的。

android {
    compileSdkVersion 14
    buildToolsVersion "19.0.3"


    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')
        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

signingConfigs {
    myConfig {
        storeFile file("szh.keystore")
        storePassword ("这里替换成你自己的")
        keyAlias ("这里替换成你自己的")
        keyPassword ("这里替换成你自己的")
    }
}
   buildTypes{
       release {
    signingConfig  signingConfigs.myConfig
        } 
    }
}

再次执行clean和build的命令再次打包,如果成功,刷新工程后会在apk文件夹下出现三个apk文件,如下


最后一个为release版本的进行过zipalign对齐的apk,也就是我们的正式包。这个时候可能会有个问题,我们的签名信息需要保密,不能明文展示,这个时候就需要对签名信息进行处理了。下面会介绍怎么对签名信息进行保密的处理。


3、打开build.gradle,更改signingConfis里面的内容,把明文展示更改成用键盘输入的方式,这里我的keystore的文件位置和keyAlias不需要保密,明文展示就可以了。如果有需要可以和password一样的处理方式,如下图:



保存重新执行clean命令,会出现如下界面,输入密码




继续输入密码,执行build命令,完成构建操作。


4、如何打多渠道包?我们经常会用到友盟等统计SDK,友盟统计渠道的时候会让我们替换其中的渠道号,如果是这样一个一个替换打包,会相当耗时,gradle提供了很好的取到替换的方法。


打开build.gradle文件

在android下添加以下内容,这里添加xiaomi和huawei两个渠道作为示范,

productFlavors {
    defaultFlavor    {
      proguardFile 'proguard-rules.txt'
            }
    // 需要打不同的版本
    xiaomi {
     }
    huawei       {
                 }
                    }

添加完毕之后,需要在文件中添加替换的方法,如下替换友盟渠道号中的UMENG_CHANNEL_VALUE,当然这个值可以自己定义。(build.gradle文件在附件会给出)



全部更改完成之后再clean和build一次,打开apk文件夹后出现如图所示



xiaomi和huawei两个渠道包就打出来了,现在来检查是不是友盟的渠道号已经更改了,打开manifests文件夹下面的huaweiRelease和xiaomiRelease


如果如下显示,则表明多渠道打包成功




以上就是eclipse里面用gradle构建android项目的具体实现方法,后面将会介绍有依赖库的情况下如何用gradle构建项目

build.gradle文件如下:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.8.+'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 14
    buildToolsVersion "19.0.3"

    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')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
        
//打包,利用输入框代替写入的密码,为了安全
signingConfigs {
    myConfig {
        storeFile file("szh.keystore")
        storePassword System.console().readLine("\n\$ Enter keystore password: ")
        keyAlias ("china")
        keyPassword System.console().readLine("\n\$ Enter key password: ")
    }
}

   buildTypes{
     release {
    	signingConfig  signingConfigs.myConfig
     } 
   }

 productFlavors {
    defaultFlavor {
      proguardFile 'proguard-rules.txt'
    }
    // 需要打不同的版本
    xiaomi {
    }
    huawei {
    }
  }
  }
}

//替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称
android.applicationVariants.all{ variant -> 
	println "${variant.productFlavors[0].name}"
    variant.processManifest.doLast{
        copy{
            from("${buildDir}/manifests"){
                include "${variant.dirName}/AndroidManifest.xml"
            }
            into("${buildDir}/manifests/$variant.name")
            filter{
                String line -> line.replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}").replaceAll("<!--.*?-->", "")
            }

            variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")
        }    
   }
}


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭