AndroidStudio的Gradle完全教程

背景

gradle语法是基于Groovy语言,Groovy是一种敏捷的动态语言,既可以面向对象编程,又可以用作纯粹的脚本语言,其运行在JVM上,能够与java代码很好的结合,也能扩展现有代码。


工程配置

工程中的位置:
在这里插入图片描述

#Tue Dec 10 09:19:23 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

修改上面的版本号,同步一下即可更改工程使用的gradle版本。


root下build.gradle文件结构

基本文件结构:

ext {   //预定义
}
buildscript {   //编译设置
    repositories {  库地址
    }
    dependencies {  依赖库
    }
}
allprojects {
    repositories {  总的依赖地址
        maven {  }  maven库
    }
}

task

举例文件:

// 预定义
ext {
    supportLibraryVersion = '28.0.0'
    buildToolsVersion = '28.0.3'
    minSdkVersion = 19
    compileSdkVersion = 28
    targetSdkVersion = 23
    versionCode = 683000007
    versionName = "6.8.3.000007"
    ext.kotlin_version = '1.3.50'
}

buildscript {
    repositories {
        maven { url "http://localhost:8081/repository/maven-public/" }
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50"
        
    }
}

allprojects {
    repositories {
        maven { url "http://localhost:8081/repository/maven-public/" }
        google()
        jcenter()

        //maven { url "https://jitpack.io" }
    }
}

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

统一修改版本号

在root下的build.gradle的allprojects节点下:

configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion rootProject.ext.supportVersion
                }
            }
        }
        resolutionStrategy{
            force 'com.google.code.gson:gson:2.8.5'
        }
    }

预定义

ext {
    supportLibraryVersion = '28.0.0'
    buildToolsVersion = '28.0.3'
    minSdkVersion = 19
    compileSdkVersion = 28
    targetSdkVersion = 23
    versionCode = 183000007
    versionName = "1.8.3.000007"
    ext.kotlin_version = '1.3.50'
}

在其他地方可以这么引用rootProject

 compileSdkVersion rootProject.compileSdkVersion
 buildToolsVersion rootProject.buildToolsVersion
 minSdkVersion rootProject.minSdkVersion
 targetSdkVersion rootProject.targetSdkVersion

moudle的build.gradle文件

文件结构

android {
    defaultConfig {      
        multiDexEnabled true   //多dex配置
        ndk { //ndk打包的架构
        }
        lintOptions {
        }
        packagingOptions {   //打包选项
        }
    }
    configurations {
    }
    compileOptions {  //Android O 以上需要用java 8
    }
    buildTypes {  //编译类型
        release {
        }
		debug {
        }
    }
    sourceSets { //源码设置
        main {
        }
    }
    dataBinding { //dataBinding设置
    }
	repositories {
        flatDir {
        }
    }
}
dependencies {
}
task

举个例子

apply plugin: 'com.android.application'
apply plugin: 'com.android.library'

//kotlin配置
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

//引入其他文件
apply from: 'upload.gradle'

android {
    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion
    defaultConfig {
        applicationId "com.demo"
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        //多dex配置
        multiDexEnabled true
        //ndk打包的架构
        ndk {
            abiFilters "armeabi"
        }
        //连接
        lintOptions {
        	quiet true
            abortOnError false
        }
        //打包选项
        packagingOptions {
            exclude 'lib/x86_64/libjingle_peerconnection_so.so'
            exclude 'lib/arm64-v8a/libjingle_peerconnection_so.so'
            
			exclude 'META-INF/DEPENDENCIES'
	        exclude 'META-INF/NOTICE'
	        exclude 'META-INF/LICENSE'
	        exclude 'META-INF/LICENSE.txt'
	        exclude 'META-INF/NOTICE.txt'
        }
    }

    // 
    configurations {
        cleanedAnnotations
        compile.exclude group: 'org.jetbrains' , module:'annotations'
    }

    //Android O 以上需要用java 8
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
	//编译类型
    buildTypes {
        release {
            minifyEnabled false
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
		debug {
            minifyEnabled false
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
	//源码设置
    sourceSets {
       
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
    }
	//dataBinding设置
    dataBinding {
        enabled true
    }
	repositories {
        flatDir {
            dirs 'libs' //这样可以使用libs里面的aar
        }
    }
}

dependencies {
	//导入文件夹
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //导入某某库
    implementation 'androidx.appcompat:appcompat:1.0.0'
    //导入子库
    implementation project(path: ':Location')
}

具体使用

编译成应用

apply plugin: ‘com.android.application’

编译成模块

apply plugin: ‘com.android.library’

sourceSets
指明文件的路径,是在src同级目录开始索引。

sourceSets{
        main{
            res.srcDirs = ['src/custom/res','src/main/res']
            java.srcDirs = ['src/main/java']
            manifest.srcFile 'src/main/AndroidManifest.xml'
            assets.srcDirs=['src/custom/assets']
        }
    }

引入kotlin

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

引入其他文件

apply from: 'upload.gradle'

gradlew命令

编译模块的命令一般为: gradlew :模块名:taskname

常见使用

uploadArchives 上传模块
AndroidDependencies 查看依赖关系
siningReport 显示渠道包得签名信息
在这里插入图片描述
sourceSets 查看项目java ,res ,jni所在得资源位置
在这里插入图片描述
assembleDebug 打包所有应用程序debug包
assembleRelease 打包所有应用程序release包
build 打包所有,包括测试项内容
clean 删除构建build目录
cleanBuildCache 删除构建的缓存目录
buildEnvironment app module中声明的所有buildscript依赖项。
installDebug 安装Debug版本
uninstallDebug - 卸载Debug版本
assemble:对所有的 buildType 生成 apk 包。
clean:移除所有的编译输出文件,比如apk
check:执行lint检测编译。
build:同时执行assemble和check命令

gradle.properties文件

虚拟机大小
org.gradle.jvmargs=-Xmx1536m

串行编译
org.gradle.parallel=true

启用 androidx
android.useAndroidX=true

将依赖包也迁移到androidx
android.enableJetifier=true


local.properties

主要保存配置的地址
ndk.dir=C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\20.0.5594570
sdk.dir=C:\Users\Administrator\AppData\Local\Android\Sdk


setting.gradle

include ‘:app’ //包含模块
rootProject.name=‘Demo’ //工程的名字


书写task

编译aar
task makeAAR(type: Jar, dependsOn: [‘build’]) {}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值