gradle 编译android项目 Eclipse

gradle下载地址

gradle环境配置

1.工程目录结构

说明:如果项目有多个library工程并且有可能重复引用了相同的jar包,如support-4等,需要将这些jar单独拎出来作为一个BaseLibray,其他library引用这个BaseLibrary,如果不这样做很有可能在编译的时候遇到下面这样的错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Landroid/support/v4

2.Eclipse下自动生成相关文件

File -> Export -> Android -> Generate Gradle build files

如果没有Generate这个选项,可以尝试升级到高版本的ADT 笔者使用的ADT-23

选中主工程

然后finish即可。完成之后会自动在工程目录中生成一些build文件

说明:在目录下添加local.properties文件,内容如:

sdk.dir=D:\\dev\\adt-bundle-windows-x86_64-20140702\\sdk

即指定Android SDK的目录,gradle在编译工程的时候会调用该目录下的打包工具,由于我已经把SDK目录配置在了环境变量中,这里可以不需要local.properties文件了。

打开build.gradle我们可以看到:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}

修改这个文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories{
		mavenCentral()
	}
	dependencies{
		//笔者使用的gradle版本为2.4
		classpath 'com.android.tools.build:gradle:1.1.3'
	}

	/***
	tasks.withType(Compile){
		options.encoding = "UTF-8"
	}
	**/

	tasks.withType(JavaCompile) { options.encoding = "UTF-8" }
}

由于使用了ADT自动生成build files的功能,库工程和主工程下都会有build.gradle文件

主工程下build.gradle

apply plugin: 'com.android.application'

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

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

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

直接命令行切换到主工程目录:执行gradle clean

执行gradle build

至此这个基本流程就算完成了。

3.打多个不同包名,使用不同资源不同渠道定制包。

以umeng多渠道为例,修改android:value

<meta-data
            android:name="UMENG_CHANNEL"
            android:value="${CHANNEL_NAME}" > </meta-data>

build.gradle中添加

 productFlavors {

        aa {
            applicationId 'com.example.testgradle.aa'
			manifestPlaceholders = [ CHANNEL_NAME:"aa"]
        }

        bb {
            applicationId 'com.example.testgradle.bb'
			manifestPlaceholders = [ CHANNEL_NAME:"bb"]
        }
    }

applicationId为包名,manifestPlaceholders会在打包时替换AndroidManifest.xml中<meta-data/>节点下的CHANNEL_NAME,

在src目录下新增目录 src/aa/res  src/bb/res

如想重新命名应用名称,只需修改对应路径下的string.xml就行了,换应用的icon或其他资源也同理,保证资源名和主工程下的一致,同时放到对应路径,gradle在打包的时候就会替换为新的资源文件。【这儿有个问题需要注意,就是如果主工程下有自定义的attr,在使用自定义属性的xml中的schemas中使用xmlns:app="http://schemas.android.com/apk/res-auto" 否则在打其他包名的时候提示找不到attribute】

贴上一份还算完整的build.gradle

apply plugin: 'com.android.application'

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

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

	defaultConfig {
		applicationId 'com.example.testgradle'

		minSdkVersion 9
		targetSdkVersion 20
		versionCode 1
			versionName '1.0'
	}
	productFlavors {

		aa {
			applicationId 'com.example.testgradle.aa'
			manifestPlaceholders = [ CHANNEL_NAME:"aa"]
		}

		bb {
			applicationId 'com.example.testgradle.bb'
			manifestPlaceholders = [ CHANNEL_NAME:"bb"]
		}

	signingConfigs{
		myConfig{
			storeFile file("test.keystore")//指定keystore的路径 这儿为当前工程目录下
			storePassword "123321"
			keyAlias "alias_name"
			keyPassword "123321"
		}
	}
	buildTypes{
		release{
			//runProguard true  //打开混淆开关
			//proguardFile 'proguard.txt.txt'  //配置单个文件这样
			signingConfig signingConfigs.myConfig
		}
	}

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

相关技术文章

http://tech.meituan.com/mt-apk-adaptation.html

http://stackoverflow.com/questions/17571427/gradle-no-resource-identifier-found-for-attribute-when-using-flavors-and-packag

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 17:08:21

gradle 编译android项目 Eclipse的相关文章

Eclipse编译Android项目时出现的问题:Android requires compiler compliance level 5.0 or 6.0. Found &#39;1.8&#39; instead.

Consle: Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead. Please use Android Tools > Fix Project Properties. 然而,按照提示的方法,右键项目->Android Tools->Fix Project Properties时,发现并没有卵用... 我的解决方式是: 右键项目->Properties,把 JavaCompiler

使用gradle构建android项目(续)

在几个月之前,我已经写过一篇使用gradle构建android项目的博客了http://blog.isming.me/2014/05/20/android4gradle/,那篇文章已经介绍了如何使用gradle进行项目构建,以及为谷歌会推荐使用gradle.当时android的gradle插件是0.11.0,现在插件的版本已经是0.14.3了,对于一些老的方法和api,有一些已经被移除,无法使用.因此有必要再写一篇博客介绍这些被移除的部分和替代方案.同时由于个人学识原因,当时没有介绍的一些技巧,

使用Gradle构建Android项目

新项目中,使用了Google I/O 2013发布的新工具,使用Gradle构建android项目,并且在新版的Intellig IDEA以及google的Android Studio对其支持.本文就介绍一下怎么使用gradle构建android项目,进行多个版本编译. Gradle是什么? Gradle是以Groovy为基础,面向java应用,基于DSL语法的自动化构建工具.是google引入,替换ant和maven的新工具,其依赖兼容maven和ivy. 使用gradle的目的: 更容易重用

Visual Studio Xamarin编译Android项目出错的解决办法

安装完Xamarin后,编译Android项目时,你会发现好长时间进度都不动,当你取消编译后,会发现其实是出错了,就是因在Android项目在第一次编译时要去google网站上下一个andorid sdk包,墙内又连不上,就卡在那了,解决办法就是自已到国内的一些镜像网站上(如:http://mirrors.opencas.cn/android/)下一个,如:android_m2repository_r29.zip, 然后解压到任意目录下,用mklink建立链接到C:\Users\{usernam

一个使用命令行编译Android项目的工具类

一个使用命令行编译Android项目的工具类 简介 编译apk项目需要使用的几个工具,基本都在sdk中,它们分别是(Windows系统): 1.aapt.exe 资源打包工具 2.android.jar Android编译工具 3.dx.bat dex文件生成工具 4.sdklib.jar 生成apk 5.jarsigner 签名工具 准备 在打包前,需要的环境如下: 1.JDK1.6+ 2.Android SDK 3.上述5个工具的路径 打包过程 1.生成R.java文件 比如: aapt p

Ubuntu Linux14 64位下在Android studio下用gradle编译Andrid项目时发生libz.so.1共享库找不到的解决方法。

---恢复内容开始--- 我在Ubuntu14 64为下安装了AS,但在用Gradle编译项目时总是报找不到 libz.so.1的错误. error while loading shared librarieserror while loading shared libraries: : libz.so.1libz.so.1: : cannot open shared object filecannot open shared object file: : No such file or dir

gradle构建android项目

工具: Android Studio2.0 gradle-2.10 一.gradle文件 当我们新建一个android项目后,Andriod Studio会自动为我们创建多个gradle文件和目录,具体内容如下: 下面我们分别对这几个目录进行分析: 二.app下的build.gradle apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" de

Windows下,Ant自动化编译Android项目具体步骤和方法

 备注:若Android项目引用有第三方库,步骤和方法亦适用. 前提是已经安装好Ant. 1,首先需要创建一个批处理命令(*.bat)文件:Ant for Android.bat,文件内写入以下命令: set path=C:\Windows\System32;D:\Java\JDK\bin;D:\Ant\apache-ant-1.9.3\bin;D:\Android\adt-bundle-windows-x86_64-20130522\sdk\tools; start "Ant for An

[转] Ant 编译 Android 项目为 Apk 实战, 常见问题解决

补充,自行安装Ant, 配置ant环境变量, 在android 项目 根目录下使用 android update project 可以自动生成 build.xml 和 local.peoperties 文件 //------------------------------------------------------------------------------------------------------------------ 1.背景 项目进行到一定程度了,每次发布前,产品要求打包测