AndroidStudio使用Gradle

一:简介:
Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。实现了依赖管理(跟Maven差不多)依赖管理的方式:从 maven 远程仓库、 nexus 私服、 ivy 仓库以及本地文件系统的 jars 或者 dirs 。
二:组成:
1.proguard-rules.pro:这个文件对Java代码编译生成的class文件进行反编译。具体的介绍如下:

#指定代码的压缩级别
    -optimizationpasses 5

    #包明不混合大小写
    -dontusemixedcaseclassnames

    #不去忽略非公共的库类
    -dontskipnonpubliclibraryclasses

     #优化  不优化输入的类文件
    -dontoptimize

     #预校验
    -dontpreverify

     #混淆时是否记录日志
    -verbose

     # 混淆时所采用的算法
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    #保护注解
    -keepattributes *Annotation*
     #如果引用了v4或者v7包
        -dontwarn android.support.**
 #保持 native 方法不被混淆
    -keepclasseswithmembernames class * {
        native <methods>;
    }

    #保持自定义控件类不被混淆
    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet);
    }

    #保持自定义控件类不被混淆
    -keepclassmembers class * extends android.app.Activity {
       public void *(android.view.View);
    }

    #保持 Parcelable 不被混淆
    -keep class * implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator *;
    }

    #保持 Serializable 不被混淆
    -keepnames class * implements java.io.Serializable

    #保持 Serializable 不被混淆并且enum 类也不被混淆
    -keepclassmembers class * implements java.io.Serializable {
        static final long serialVersionUID;
        private static final java.io.ObjectStreamField[] serialPersistentFields;
        !static !transient <fields>;
        !private <fields>;
        !private <methods>;
        private void writeObject(java.io.ObjectOutputStream);
        private void readObject(java.io.ObjectInputStream);
        java.lang.Object writeReplace();
        java.lang.Object readResolve();
    }

    #保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可
    #-keepclassmembers enum * {
    #  public static **[] values();
    #  public static ** valueOf(java.lang.String);
    #}

    -keepclassmembers class * {
        public void *ButtonClicked(android.view.View);
    }

    #不混淆资源类
    -keepclassmembers class **.R$* {
        public static <fields>;
    }

    #避免混淆泛型 如果混淆报错建议关掉
    #–keepattributes Signature

2.local.properties:包含了你的 sdk 配置,sdk的路径;当然你还可以配置 ndk 路径;格式与 sdk 一样。
3.settings.gradle:一般显示include ‘:app’,’:myapplication’…其中include包含的model是会被编译的
4.gradle.properties:此文件进行gradle的全局的管理,主要配置项目的全局的配置变量(编译版本的配置)
5.build.gradle这个文件比较重要说明如下:

apply plugin: 'com.android.application'
def releaseTime() {
    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}

android {
    compileSdkVersion 23
    buildToolsVersion "23"

    defaultConfig {
        applicationId "......"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 4
        versionName "1.0.3"
    }
    buildTypes {
        release {

        }
        debug{
            buildConfigField "boolean", "LOG_DEBUG", "true"
        }
    }
    //设置虚拟机堆内存空间大小,避免在编译期间OOM
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
    //打包不检查
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':library:photoPicker')
}

以上就是基本的build.gradle的配置,
a)apply plugin:必须放在第一行,它可以指定这个module是一个应用(用 apply plugin: ‘com.Android.application’ 配置),或是一个库(用 apply plugin: ‘com.android.library’ 配置)。
b)dependencies:指定远程的依赖或者是本地的依赖,
编译时依赖libs目录下所有的jar文件:

compile fileTree(include: ['*.jar'], dir: 'libs')

编译时依赖本地的library库项目:

compile project(':library')

编译时依赖远程的库项目(下面的库是在低版本中使用Meterial Design是所要加入的):

compile 'com.android.support:appcompat-v7:21.0.3'

d)android的配置比较复杂:
指定编译版本的SDK和编译工具的版本

    compileSdkVersion 21
    buildToolsVersion 21.1.2

defaultConfig这个是默认配置,全局配置,其中的buildType将会自动的继承:举个例子

defaultConfig {
    applicationId com.example.app.application
    minSdkVersion 15
    targetSdkVersion 21
    versionCode 1
    versionName 1.0

    ndk {
        moduleName app
        cFlags -DANDROID_NDK -D_RELEASE
        ldLibs m, log, jnigraphics
        abiFilters all
    }
}

此处apk项目需要指定applicationId(包名)library不需要指定这个属性;接下来就是SDK最小的编译版本,目标的编译版本,版本号和版本名称。至于ndk是指的是ndk可以被直接编译不需要自己操作。
buildTypes这个进行编译的配置,编译的配置分成两种主要是release(发行版),debug(调试版);
compileOptions:这个是对Java版本的配置,毕竟jdk的版本不同所支持的新特性也不一样.
sourceSets:重新指向源码路径

 sourceSets {//目录指向配置
        main {
            manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
            java.srcDirs = ['src']//指定source目录
            resources.srcDirs = ['src']//指定source目录
            aidl.srcDirs = ['src']//指定source目录
            renderscript.srcDirs = ['src']//指定source目录
            res.srcDirs = ['res']//指定资源目录
            assets.srcDirs = ['assets']//指定assets目录
            jniLibs.srcDirs = ['libs']//指定lib库目录
        }
        debug.setRoot('build-types/debug')//指定debug模式的路径
        release.setRoot('build-types/release')//指定release模式的路径
    }

lintOptions:这个设置编译的lint开关。程序在build的时候,会执行lint检查,有任何错误或者警告提示,都会终止构建,我们可以将其关掉。

lintOptions {
    abortOnError false
}

productFlavors:配置多个产品风味(免费版、付费版、不同渠道版)。创建不同版本的app,通过重写defaultConfig{}的设置。productFlavors是可选的。默认情况下,系统不会自动创建。每个flavor都可以自己的的application id。

 productFlavors {
    free {
      applicationId 'com.example.myapp.free'
    }

    paid {
      applicationId 'com.example.myapp.paid'
    }
  }
}

signingConfigs:包的签名的配置主要是指定包的签名的文件或者是包的签名的密码:

signingConfigs {
    release {
        storeFile file(×.keystore)
        storePassword ×××
        keyAlias ××××
        keyPassword ×××
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值