Android studio gradle配置

Gradle 基本概念

首先我们学习几个gradle 的脚本语法,掌握了这几个语法,你就能非常简单的用gradle构建打包android项目了。 首先,我们来看下一个最简单android build.gradle

build.gradle

  //设置脚本的运行环境
    buildscript {
         //支持java 依赖库管理(maven/ivy),用于项目的依赖。
     repositories {
            mavenCentral()
        }
        //依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件
        dependencies {
            classpath 'com.android.tools.build:gradle:0.4'
        }
    }
    //声明构建的项目类型,这里当然是android了
    apply plugin: 'android'
    //设置编译android项目的参数
    android {
        compileSdkVersion 17
        buildToolsVersion "17"
     
        defaultConfig {
            minSdkVersion 8
            targetSdkVersion 17
        }
        //Android默认配置
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }
            //测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
            instrumentTest.setRoot('tests')
        }
         
        //这个是解决lint报错的代码
        lintOptions {
            abortOnError false
        }
        /**
         * 签名设置
         */
        signingConfigs {
            myConfigs {
                storeFile file("签名文件地址")
                keyAlias "..."
                keyPassword "..."
                storePassword "..."
            }
        }
        /**
         * 混淆设置
         */
        buildTypes {
            release {
                signingConfig signingConfigs.myConfigs
                runProguard true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        /**
         * 渠道打包(不同包名)
         */
        productFlavors {
            qqqq {
                applicationId = '包名'
            }
            hhhhh {
                applicationId='包名'
            }
        }
    }
    /**
     * .so文件的导入
     */
    task copyNativeLibs(type: Copy) {
        from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
    }
 
    tasks.withType(Compile) {
        options.encoding = "UTF-8"
    }
     
    tasks.withType(JavaCompile) {//在1.0.0以前是Compile    1.0.0后就必须用这个JavaCompile   不是会
        compileTask -> compileTask.dependsOn copyNativeLibs
    }
    clean.dependsOn 'cleanCopyNativeLibs'
    tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
        pkgTask.jniFolders = [new File(buildDir, 'lib')]
    }
    //依赖库
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    }


本地依赖

gradle 作为构建工具,能够很方便的使用本地jar包,以下为使用的代码块。

dependencies {
        //单文件依赖
    compile files('libs/android-support-v4.jar')  
    //某个文件夹下面全部依赖
    compile fileTree(dir: 'libs', include: '*.jar')
}
 
android {
     
}


远程依赖

gradle 同时支持maven,ivy,由于ivy我没用过,所以用maven 作为例子,以下为代码块:

repositories {
        //从中央库里面获取依赖
    mavenCentral() 
    //或者使用指定的本地maven 库
    maven{
        url "file://F:/githubrepo/releases"
    }  
    //或者使用指定的远程maven库
    maven{
        url "远程库地址"
    }
}
 
dependencies {
        //应用格式: packageName:artifactId:version
    compile 'com.google.android:support-v4:r13'}
 
android {
 
}


android library 依赖

对于项目依赖 android library的话,就不是依赖一个jar,那么简单了,在这里需要使用gradle mulit project 机制。在过去,android library并没有一个很好的包管理方式,简单来说,在gradle出现以前,官方并没有一种用于管理android library 依赖包的方式,一般我们都是直接下载别人的android library project 源码进行集成,而对于第三方的android-maven-plugin 用的是apklib 格式。

而现在,官方终于推出一种android library的打包格式,扩展名为*.aar。前面提到,目前android gradle插件并不支持本地直接使用*.aar文件,不过,支持包管理库的引用方式,下面,我为大家说一下,怎么对android library 发布使用。

打包android library

对android library 进行打包直接在library项目下面使用gradle build 即可,然后,你就会在 build/libs 目录下看到两个*.aar文件,一个debug包用的,一个是release 下用的,看个人需求使用,这里我们用的是release 版本的 .aar 文件。

引用脚本跟前面讲的依赖库相似

dependencies {
    compile(name: 'pulltorefresh', ext: 'aar')
}

分享个maven库地址:http://mvnrepository.com/和gradle版本地址:http://tools.android.com/tech-docs/new-build-system





apk瘦身一般有两条线,

  1. 去除无用的代码,例如引用一个比较大的lib,只使用了其中很少的功能。其他无用的代码可以想办法去掉

  2. 去除无用的资源文件,可能是第三方lib中的,也有可能是开发中引入了无用的资源

去除无用代码

当然是Proguard了!

gradle plug 0.14.0之后, runProguard 更名为minifyEnabled

去除无用资源

Android Gradle plug从0.14.0开始,支持自动去除没有使用的资源。

不过,这个开关是默认关闭的。可以在build type使用 shrinkResources true 开启。 要注意,这个功能的使用依赖于code shrinking, 所以minifyEnabled也必须打开。

  1. Support for automatic removal of unused resources

  2. Off by default for now, enable by setting shrinkResources to true in your release build types. Requires minifyEnabled as well.

具体配置如下

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
        }
    }
}


多渠道打包修改如下

productFlavors {
        demo {
            applicationId "com.buildsystemexample.app.demo"
            versionName "1.0-demo"
        }
        full {
            applicationId "com.buildsystemexample.app.full"
            versionName "1.0-full"
        }
    }

替换渠道名修改如下

/**
 * 替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称格式
 * <meta-data
 *    android:name="UMENG_CHANNEL"
 *    android:value="${UMENG_CHANNEL_VALUE}" />  
 */
productFlavors.all { flavor ->
    flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}


编译完成后可以用命令行进行打包配置,进入到当前工程的根目录下执行gradlew assembleRelease命令自动进行多渠道打包。还有一个类似的命令:gradlew assembleDebug想必通过名字,就能到猜测出。

Eclipse gradle配置批量打包

       另外,Eclipse也可以用gradle进行批量打包,gradle配置一个样,需要的是在local.properties里配置配置一下SDK路径。

gradle基础可以参考:http://my.oschina.net/u/1471093/blog/341990


本文转载:http://my.oschina.net/u/1471093/blog/341990

                   http://my.oschina.net/u/1471093/blog/354442

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值