安卓gradle文件解析

介绍

Gradle是一个高级构建系统和构建工具,允许通过插件自定义构建逻辑

基本概念

projects , tasks and action

  1. projects:一个标准的AS项目而言,一个build.gradle对应一个project
  2. tasks:一系列task的集合构成一个project
  3. action:相当于build.gradle中的一段段代码块

gradle相关文件解析

  1. local.properties sdk 配置,还可以配置 ndk 路径
ndk.dir=D\:\\androidstudio\\SDK\\ndk-bundle
sdk.dir=D\:\\androidstudio\\SDK

2.settings.gradle

在你的项目中如果有多个 Module 存在的时候,就可以选择包含哪些进行编译。

include ':app', ':camera', ':sticker', ':FFmpegAndroid'

3.根目录build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

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

allprojects {
    repositories {
        jcenter()
        maven { url 'https://jitpack.io' }
        google()
    }
}


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

Repositories 配置的是上面所说的依赖管理的东西,也就是依赖管理的服务器。默认是 jcenter() 你可以添加其他,多个之间不干扰.

allprojects 该配置会被应用到所有的子工程

task clean 运行gradle clean时,执行此处定义的task。

4.App目录下build.gradle


//com.android.application 表示这是一个应用程序模块,可直接运行
//com.android.library 标识这是一个库模块,是依附别的应用程序运行

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

    //关闭Android Studio的PNG合法性检查
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false
    
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        //应用程序的包名
        applicationId "com.hx.stevenbase"
        //最小sdk版本,如果设备小于这个版本或者大于maxSdkVersion将无法安装这个应用
        minSdkVersion 19
        //目标sdk版本
        targetSdkVersion 26
        //版本号
        versionCode 1
        //版本名,显示给用户看到的版本号
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        
        archivesBaseName = "weshare-$versionName" //指定打包成Jar文件时候的文件名称
        ndk {
            //设置库(so)文件名称
            moduleName "hebbewifisafe"   
            //引入库,比如要用到的__android_log_print
            ldLibs "log", "z", "m", "jnigraphics", "android"
            //, "x86"  显示指定支持的ABIs
            abiFilters "armeabi", "x86", "armeabi-v7a"      
            // C++11
            cFlags "-std=c++11 -fexceptions"               
            stl "gnustl_static"
        }
        // 设置MultiDex可用
        multiDexEnabled true
    }

    signingConfigs {
        steven {
            storeFile file("../StevenBase.jks")
            storePassword "1234567890"
            keyAlias "stevenbase"
            keyPassword "1234567890"
        }
    }
    buildTypes {
        release {
            //是否支持zip
            zipAlignEnabled true
            // 移除无用的resource文件
            shrinkResources true
            //是否对代码进行混淆,true表示混淆
            minifyEnabled false
            //是否支持调试
            debuggable false
            //关闭jni调试
            jniDebuggable false
            
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.steven
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.steven
        }
    }
    //打包配置
    packagingOptions {
            exclude 'META-INF/ASL2.0'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/MANIFEST.MF'
            //只有第一个匹配的文件会被选中
            pickFirsts = []
            //当有两个文件,后一个文件会新起一行,把内容插入到前一个文件的内容,直到结束    
            merges = []
            //排除一些文件
            excludes = []
    }

    //在这里你可以设置你的产品发布的一些东西,
    //比如你现在一共软件需要发布到不同渠道,
    //且不同渠道中的包名不同,那么可以在此进行配置;
    //甚至可以设置不同的 AndroidManifest.xml 文件。
    productFlavors {
        hebbe {
        }
        googlePlay {
        }
        solo {
        }
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

    sourceSets {
        main {
            res.srcDirs = ['src/main/res']//指定资源文件目录
            manifest.srcFile 'AndroidManifest.xml'//指定清单文件
        }
    }
   //multiDex的一些相关配置,这样配置可以让你的编译速度更快
    dexOptions {
        //让它不要对Lib做preDexing
        preDexLibraries = false
        //开启incremental dexing,优化编译效率,这个功能android studio默认是关闭的。
        incremental true
        //增加java堆内存大小
        javaMaxHeapSize "4g"
    }
    //检查lint设置
    lintOptions {
        //即使报错也不会停止打包
        abortOnError false
        //elease版本的时候是否进行检测
        checkReleaseBuilds false
    }
    //在这里进行 Java 的版本配置,对应版本的一些新特性,
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}


//指定当前项目的所有依赖关系:本地依赖、库依赖、远程依赖
//本地依赖:可以对本地Jar包或目录添加依赖关系
//库依赖:可以对项目中的库模块添加依赖关系
//远程依赖:可以对jcenter库上的开源项目添加依赖
//标准的远程依赖格式是 域名:组织名:版本号

dependencies {
    //本地依赖
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testImplementation 'junit:junit:4.12'
    //远程依赖,com.android.support是域名部分,appcompat-v7是组名称,26.1.0是版本号
    implementation 'com.android.support:appcompat-v7:26.1.0'
    //库依赖
    implementation project(':Base')
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值