美文网首页
Android Gradle 3.0.0 新特性

Android Gradle 3.0.0 新特性

作者: 木猫尾巴 | 来源:发表于2017-12-14 12:44 被阅读105次

    [TOC]

    官方指南

    https://developer.android.com/studio/preview/features/new-android-plugin-migration.html#new_configurations

    依赖指令 implementation api

    build.gradle中的依赖默认为implementation,而不是之前的compile

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
        implementation 'com.android.support:appcompat-v7:26.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        testImplementation 'junit:junit:4.12'
        api 'com.google.code.gson:gson:2.8.2'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    }
    
    • implementation 为新的表示方法,履行 API 依赖不会传递,使用implementation会使编译速度有所增快
    • api 与gradle3.0.0之前的compile指令的效果完全一样,module将会泄露其依赖的module的内容
    • provided 配置的依赖只编译不打包到最终,这个不属于 Android,为jar包打包的模式,故在 APP模式下无法使用

    最新版的Gradle plugin需要你指出一个module的接口是否对外暴露其依赖lib的接口。基于此,可以让项目构建时,gradle可以判断哪个需要重新编译。因此,老版本的构建关键字compile被废弃了

    provided 与 apk 编译改动

    provided改成了compileOnly,apk改成了runtimeOnly

    升级到 3.0 gradle 构建遇到的问题和修复方法

    Could not find com.android.support:multidex:1.0.1

        Could not find com.android.support:multidex:1.0.1.
         Searched in the following locations:
    

    原因是 repositories 修改过 需要这么写

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

    Error: All flavors must now belong to a named flavor dimension

    Error:All flavors must now belong to a named flavor dimension.Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
    

    所有的flavors都必须属于同一个风格

    Plugin 3.0.0之后有一种自动匹配消耗库的机制,便于debug variant 自动消耗一个库,然后就是必须要所有的flavor 都属于同一个维度

    为了避免flavor 不同产生误差的问题,应该在所有的库模块都使用同一个foo尺寸

    解决方案 输出apkbuild.gradle里面

    android{
        defaultConfig {
        targetSdkVersion:***
        minSdkVersion :***
        versionCode:***
         versionName :***
        //版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号
        flavorDimensions "versionCode"
        }
    }
    

    Error: style attribute '@android:attr/windowEnterAnimation' not found

    error: style attribute '@android:attr/windowEnterAnimation' not found
    ....
    

    解决方法 工程根目录gradle.properties 添加

    android.enableAapt2=false
    

    相关文章

      网友评论

          本文标题:Android Gradle 3.0.0 新特性

          本文链接:https://www.haomeiwen.com/subject/cvxkwxtx.html