Gradle自动化编译Android项目总结

            相对于ant和maven,java工程用gradle进行自动化编译真是简单太多了。最近在用gradle对公司的项目进行自动化打包,发现gradle的教程还是很少,网上的资源有价值的更是很少,基本都是一篇文章转来转去。希望自己遇到的问题可以为后来学习的人提供些思路。

            1.gradle打包会对工程res目录下的资源做校验,如果有些资源不合法会编译错误。这是我遇到的一个.9图片的问题,如下:

            这个问题很好解决,重新做图。其实这也是好事,gradle帮我们做了检查,可以发现一些潜在危险。

         2.eclipse中更新最新的adt(版本22)可以导出一个工程的build.gradle文件,但是大部分情况下不能直接使用。

             导出的方法是:选择工程-->export-->android-->Generate Gradle build files.

             主要会出问题的地方是工程依赖者块,我导出的原始工程中是这样的:    

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        compile project(':D::开发环境:工作workspace代码:androidKu')
    }
            其中中文路径肯定是不可行的,这个需要更改;另外如果你工程import的jar包不一定实在libs目录下,比如我的是在lib目录下(libs/目录放的是so库)。

          3.编码问题。gradle默认编码会用你电脑编码,比如你是中文版的windows,那么采用的编码是gbk的。这种方式可以设置编码:

    tasks.withType(Compile) {  
        options.encoding = "UTF-8"  
    }
         4.so库的编译,很多项目为了安全都使用了一些so库。对于so库的编译参考了这个博客:http://blog.csdn.net/ilittleone/article/details/9222425。更具体的结果可以去stackoverflow搜索。

         5.库项目的编译。库项目的编译也稍微纠结了一下,不过参考一些资料很快就搞定了。

            我是采用这种方式实现,假如主项目和库项目都是在D:\workspace目录下,项目名称分别是main和lib。那么需要在D:\workspace目录下新建build.gradle和settings.gradle。另外主项目和库项目目录下也分别需要build.gradle文件。完整代码如下所示。

            (1)D:\workspace目录下build.gradle文件

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}
            (2)D:\workspace目录下settings.gradle文件
include ':Main'
include ':Lib'
              (3)D:\workspace\Main目录下build.gradle文件
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
    tasks.withType(Compile) {  
        options.encoding = "UTF-8"  
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'lib', include: '*.jar')
    compile project(':Lib')
}

android {
    compileSdkVersion 10
    buildToolsVersion "17.0.0"
	
	defaultConfig {
        minSdkVersion 8
        targetSdkVersion 17
    }
	signingConfigs {
    	myConfig{
    		storeFile file("xxx.keystore")
    		storePassword "xxx"
    		keyAlias "xxx"
    		keyPassword "xxx"
    	}
    }
	
	buildTypes{
    	release {
    		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']
        }

        instrumentTest.setRoot('tests')
    }
        task copyNativeLibs(type: Copy) {
   		 from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/libs'
	}
	tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
 
	clean.dependsOn 'cleanCopyNativeLibs'
 
	tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    	    pkgTask.jniDir file('build/libs')
	}
}
      需要注意的是:编码,so库的引入根据需要选择;这个是将目标签名文件放在主项目目录下的做法,如果在别的路径下,请自行设置。

      (4)D:\workspace\Lib目录下build.gradle文件

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android-library'

android {
    compileSdkVersion 7
    buildToolsVersion "17.0.0"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

    }
}

参考文献:http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html

                    http://blog.csdn.net/ilittleone/article/details/9222425


 

             

               

你可能感兴趣的:(Gradle)