android Gradle使用指南

2025-11-05 21:30:03

1、对于一个gradle 项目,最基础的文件配置如图所示:一个setting.gradle、一个顶层的 build.gradle文件、以及每个Module 都有自己的一个build.gradle文件

setting.gradle:

这个 setting 文件内容定义了哪些module 应该被加入到编译过程,对于单个module 的项目可以不用它,但是对于有多个module 的项目就需要这个文件,否则gradle 不知道要加载哪些项目,这个文件的代码在初始化阶段就会被执行。

build.gradle(project:xxxx):顶层的build.gradle文件的配置最终会被应用到所有项目中,典型的配置如下:

//buildscript定义了 Android 编译工具的类路径

buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:2.2.2'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}

//定义的属性会被应用到所有 module 中

allprojects {    repositories {        jcenter()   //jCenter是一个著名的 Maven 仓库,有时候你用第三方插件,或则是框架时,需要对build.gradle这个文件做相应的修改,一般来说不需要动里面的东西

   }}task clean(type: Delete) {    delete rootProject.buildDir}

每个module的 build.gradle:针对每个module 的配置,如果这里的定义的选项和顶层build.gradle定义的相同,后者会被覆盖。典型的配置内容如下:

apply plugin: 'com.android.application

//所有特殊配置都在这里

android {    compileSdkVersion 25    buildToolsVersion "27.0.3"    defaultConfig {        applicationId "com.beckett.funnelview"        minSdkVersion 15        targetSdkVersion 25        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }

   // buildTypes定义了编译类型

   buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}

//module中用到的依赖都在这里添加dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.3.1'    testCompile 'junit:junit:4.12'}

android Gradle使用指南

1、group = 'com.example.test'apply plugin: 'com.android.application'apply plugin: 'com.neenbedankt.android-apt'android {

   //1.签名配置,这样打包可以直接在terminal里使用命令打包    signingConfigs {       TestConfig {            keyAlias 'test'            keyPassword 'test'

           storeFile file('../jks/'test'.jks')            storePassword 'test'

       }    }    compileSdkVersion rootProject.ext.android.compileSdkVersion    buildToolsVersion rootProject.ext.android.buildToolsVersion

  //2.为了让项目目录出现jniLibs文件夹

   sourceSets {        main {            jniLibs.srcDir 'libs'        }    }

   //3.基础配置,例如版本信息,适配最小和目标版本号等信息    defaultConfig {        multiDexEnabled true        minSdkVersion rootProject.ext.android.minSdkVersion        targetSdkVersion rootProject.ext.android.targetSdkVersion        versionCode 1        versionName "1"    }

  //4.定义了编译类型,默认release和debug类型

   buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            signingConfig signingConfigs.TestConfig;            ndk {                abiFilters "x86", "armeabi"            }        }        debug {            debuggable true            minifyEnabled false            signingConfig signingConfigs.TestConfig;            ndk {                abiFilters "x86", "armeabi"            }        }       //5.多渠道打包,让你打包一次得到多个apk        productFlavors {            apk_release                 applicationId "com.example.test"                // app名字,在 string.xml 不能有这个字段,会重名!!!改这个,名字就改了                resValue "string", "app_name", "测试项目"                // 修改 AndroidManifest.xml 里友盟的渠道变量,百度地图                manifestPlaceholders = [UMENG_APPKEY: "5abc74f8f29d98278f00023e", UMENG_MESSAGE_SECRET: "05ce4d1d9b15991405f30310427af672", BAIDU_API_KEY: "miwLNN7vDAHxzANaFpqta6vGxbNcDG2u"]              //网络请求的地址,根据实际需求,可以将一些服务常量全部配置在这里,修改时只需到这里修改就可以了                buildConfigField("String", "API_HOST", "\"http://baidu.com\"")             }            }            // 批量打包            applicationVariants.all { variant ->                variant.outputs.each { output ->                    def outputFile = output.outputFile                    if (outputFile != null && outputFile.name.endsWith('.apk')) {                        //输出apk名称为:渠道名_版本名_时间.apk                        def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}.apk"                        output.outputFile = new File(outputFile.parent, fileName)                    }                }            }        }        //解决rxjava冲突的        packagingOptions {            exclude 'META-INF/rxjava.properties'        }    }   //6.依赖    dependencies {        compile fileTree(include: ['*.jar'], dir: 'libs')        compile rootProject.ext.supportAppcompatV7        compile rootProject.ext.sqlbrite        compile rootProject.ext.rxJava        compile rootProject.ext.rxAndroid        compile rootProject.ext.rxPermissions        compile rootProject.ext.rxBinding        compile rootProject.ext.dagger2        compile rootProject.ext.retrofit        compile rootProject.ext.eventBus        compile rootProject.ext.retrofitConverterGson        compile rootProject.ext.retrofitAdapterRxJava        compile rootProject.ext.materialDialog        apt dagger2Compiler        compile project(':library'        compile project(':push')    }}

1、若有需要,还可以自行建一个Config.gradle文件,对所有module进行管理,一般配置如下,具体需要用那些库,自行删减:

def supportVersion = "25.3.1"def rxBindingVersion = "0.4.0"def rxLifecyleVersion = "0.3.1"def retrofitVersion = "2.1.0"def leakCanaryVersion = "1.3"def dagger2Version = "2.6"ext {    android = [            compileSdkVersion: 25,            buildToolsVersion: "25.0.3",            minSdkVersion    : 15,            targetSdkVersion : 25    ]    //官方库    supportV4 = "com.android.support:support-v4:${supportVersion}"    supportAppcompatV7 = "com.android.support:appcompat-v7:${supportVersion}"    supportDesign = "com.android.support:design:${supportVersion}"    supportCardView = "com.android.support:cardview-v7:${supportVersion}"    supportRecyclerView = "com.android.support:recyclerview-v7:${supportVersion}

   //Rx家族,响应式编程    rxJava = "io.reactivex:rxjava:1.1.9"    rxAndroid = "io.reactivex:rxandroid:1.2.1"    rxPermissions = "com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar"    rxBinding = "com.jakewharton.rxbinding:rxbinding:${rxBindingVersion}"    rxBindingSupportV4 = "com.jakewharton.rxbinding:rxbinding-support-v4:${rxBindingVersion}"    rxBindingSupportAppcompatV7 = "com.jakewharton.rxbinding:rxbinding-appcompat-v7:${rxBindingVersion}"    rxBindingSupportDesign = "com.jakewharton.rxbinding:rxbinding-design:${rxBindingVersion}"    rxBindingSupportRecyclerView = "com.jakewharton.rxbinding:rxbinding-recyclerview-v7:${rxBindingVersion}"    rxBindingLeanbackV17 = "com.jakewharton.rxbinding:rxbinding-leanback-v17:${rxBindingVersion}"    rxLifecycle = "com.trello:rxlifecycle:${rxLifecyleVersion}"    rxLifecycleComponents = "com.trello:rxlifecycle-components:${rxLifecyleVersion}"    // retrofit    retrofit = "com.squareup.retrofit2:retrofit:${retrofitVersion}"    retrofitConverterGson = "com.squareup.retrofit2:converter-gson:${retrofitVersion}"    retrofitAdapterRxJava = "com.squareup.retrofit2:adapter-rxjava:2.0.1    sqlbrite = "com.squareup.sqlbrite:sqlbrite:1.1.2"   }"}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢