AndroidStudio中Gradle配置构建工程以及升级之后填坑

一.Gradle配置构建工程所需的文件

1.settings.gradle

文件位于项目根目录,用于指示 Gradle 在构建应用时应将哪些模块(Module)包括在内。对大多数项目而言,该文件很简单,只包括app如下:

include ':app'

但是很多情况下我们要将我们需要的模块分割出去,就需要增加更多的模块(Module)进来,例如我的一个工程如下

include ':app', ':piclibrary', ':videolibrary', ':StackBlur', ':ptr-lib', ':Mp3Audiolibrary'

2.顶级构建文件(工程下的build.gradle)

最基本的结构如下,新建一个project之后自动生成的。顶级 build.gradle 文件位于项目根目录,用于定义适用于项目中所有模块的构建配置。默认情况下,这个顶级构建文件使用 buildscript {} 代码块来定义项目中所有模块共用的 Gradle 存储区和依赖项。

// Top-level build file where you can add configuration options common to all sub-projects/modules.
//buildscript代码块中代码是用来配置Gradle自身使用的
buildscript {
    //配置远程仓库google和jcenter
    repositories {
        google()
        jcenter()
    }
    //依赖
    dependencies {
        //需要Gradle插件3.1.3版本的
        classpath 'com.android.tools.build:gradle:3.1.3'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

//所有的module中共有的,但是为了保证每个项目的独立性,我们一般不会在这里面操作太多共有的东西。
allprojects {
    //远程仓库jcenter,google
    repositories {
        google()
        jcenter()
    }
}

//在我们操作clean project动作的时候,会清除app下面的build文件夹中的相应的文件
task clean(type: Delete) {
    delete rootProject.buildDir
}

3.模块级构建文件

模块级 build.gradle 文件位于每个 // 目录,用于配置适用于其所在模块的构建设置。您可以通过配置这些构建设置来提供自定义打包选项(例如附加构建类型和产品风味),以及替换(覆盖) main/ 应用清单或顶级 build.gradle 文件中的设置。
下面是一个基本的配置简单的module级别的build.gradle,如下图:

apply plugin: 'com.android.application'

android {

    //用于编程的sdk版本
    compileSdkVersion 27
    //编译打包工具版本
    buildToolsVersion '27.0.3'

    defaultConfig {
        //app的id
        applicationId "test.gong.com.myapplication"

        //最小兼容版本
        minSdkVersion 19
        //最理想运行版本
        targetSdkVersion 27

        //app的版本code
        versionCode 1
        //app版本name
        versionName "1.0"

        //3.0.0以上,解决打包渠道报错
        flavorDimensions "versionCode"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    //签名配置
    signingConfigs {
        key {
            keyAlias 'chinaradio'
            keyPassword 'www.cnr.cn'
            storeFile file('ChinaRadioKeyStore.keystore')
            storePassword 'www.cnr.cn'
        }
    }

    //打包版本样式
    buildTypes {
        unsigned {
            signingConfig signingConfigs.key
        }
        debug {
            signingConfig signingConfigs.key

            // 显示Log(在java代码中使用BuildConfig.LOG_DEBUG,下面的域名参数一样的方式)
            buildConfigField "boolean", "LOG_DEBUG", "true"
            //测试版本服务器域名
            buildConfigField "String", "API_HOST", "com.cnr.debug"
        }
        release {
            signingConfig signingConfigs.key
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //正式版本服务器域名
            buildConfigField "String", "API_HOST", "com.cnr.release"

            //不混淆
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            //自定义输出配置
            android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "chinaRadio_v${variant.productFlavors[0].name}_v${variant.versionName}.apk"
                }
            }
        }
    }

    /*Android Studio打包需要String文件翻译解决办法*/
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }

    //渠道,使用的友盟的统计功能
    productFlavors {
        Umeng {}
        baidu {}
        vivo {}
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    }

}

//依赖
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

这是一个很简单的配置,复杂配置这里不做描述,因为各种应用场景不同配置不同,遇到问题自行百度即可。

4.工程根目录下的gradle.properties

您可以在其中配置项目范围 Gradle 设置,例如 Gradle 后台进程的最大堆大小

5.工程根目录下的local.properties

为构建系统配置本地环境属性,例如 SDK 安装路径。由于该文件的内容由 Android Studio 自动生成并且专用于本地开发者环境,因此您不应手动修改该文件,或将其纳入您的版本控制系统。

二.导入外部工程时候注意事项

1.导入外部工程时候查看工程构建的gradle插件和gradle版本分别在“工程根目录的build.gradle”和“工程目录–>gradle–>wrapper–>gradle-wrapper.properties”。gradle插件和gradle版本修改成和本地相同。
2.查看app中build.gradle中compileSdkVersion 和 buildToolsVersion 的版本;compileSdkVersion 基本不能改(下面好多的依赖库版本和sdk版本相关联,但是如果感觉版本太低也可以改为本地较新的),buildToolsVersion 只要是没有本地的高,建议改为和As中一样的。
3.如果本地gradle插件和gradle版本比较老了,那就更新为新的和导入工程中的一致(那么其他工程的gradle插件和gradle也要改)。

三.常见更新之后报错

3.1.gradle插件和gradle更新时候,更新失败。

解决方法在AndroidStudio与Gradle插件和Gradle中已经给出了。

3.2.其他问题

更新完gradle插件和gradle之后还是会有各种依赖库或者插件的兼容性问题而报错
1.工程中配置了友盟的打包渠道,用到了flavor,在gradle插件更新到3.0.0以后回报如下的错误:

All flavors must now belong to a named flavor dimension.

官方的解释是:为了保证各个渠道包要保持某些属性的一致,解决方法是给flavor添加统一的dimension属性,方法如下
在和versionName平级的地方添加统一的dimension属性,这里的值”versionCode”可以是其他任意的字符串。

    ...省略代码...
    versionCode 61
    versionName "4.2.5"
    flavorDimensions "versionCode"
    ...省略代码...

2.注解的使用问题
在gradle插件升级为3.0.0之后,再使用如ButterKnife这类注解框架的时候,会报如下的错误

Error:java.lang.RuntimeException: Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.

意思就是3.0.0之后,要我们自己声明支持注解插件功能,解决方法在app的build.gradle中添加如下的代码。

        ...省略代码...
        versionCode 61
        versionName "4.2.5"
        flavorDimensions "versionCode"

        javaCompileOptions {
            // 显式声明支持注解
            annotationProcessorOptions {
                includeCompileClasspath true
            }
        }
        ...省略代码...

其实除了上面的问题之外还有其他的问题,你的配置功能越多那么兼容性问题越多,这里不一一列举 了。遇到问题可以百度也可以去AndroidStudio介绍网站查看构建的说明

猜你喜欢

转载自blog.csdn.net/gongxiaoou/article/details/81097961
今日推荐