dependencies provided studio 新版也是android_android studio dependencies - CSDN
  • Android Studio 项目在gradle文件中,Compile,Debug compile,Release compile,APK 对应的依赖类型可以通过Module Setting 去设置,如图: Compile compile是对所有的build type以及favlors都会参与编译...

    Android Studio 项目在gradle文件中,我们通常会发现dependencies闭包中写法如下:



    对应的依赖类型可以通过Module Setting 去设置,如图:



    各种类型区别如下:

    Compile
    compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。

    Provided
    Provided是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk

    APK
    只会打包到apk文件中,而不参与编译,所以不能在代码中直接调用jar中的类或方法,否则在编译时会报错

    Test compile
    Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用

    Debug compile
    Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。

    Release compile
    Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。



    展开全文
  • Warning: Project App: provided dependencies can only be jars. com.android.support:appcompat-v7:22.2.0 is an Android Library Warning: Project App:...

    Warning: Project App: provided dependencies can only be jars. com.android.support:appcompat-v7:22.2.0 is an Android Library
    Warning: Project App: provided dependencies can only be jars. com.android.support:support-v4:22.2.0 is an Android Library.

    以上是AndroidStudio报的错,


    我的build.gradle

    apply plugin: 'com.android.library'
    
    android {
        compileSdkVersion 22
        buildToolsVersion "23.0.0 rc2"
    
        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        provided 'com.android.support:appcompat-v7:22.2.0'
        provided 'com.android.support:support-v4:22.2.0'
    }

    解决方案:

    1.打开项目设置



    2.修改gradle版本



    3.完成重新编译一下,祝你成功!



    转载于:https://my.oschina.net/vistier/blog/834400

    展开全文
  • Android Studio版本更新至3.0了,更新后,连带着com.android.tools.build:gradle 工具升级到了3.0.0,在3.0.0中使用了最新的Gralde 4.0 里程碑版本作为gradle的编译版本,该版本gradle编译速度有所加速,更加令人...

    前言

    Android Studio版本更新至3.0了,更新后,连带着com.android.tools.build:gradle 工具也升级到了3.0.0,在3.0.0中使用了最新的Gralde 4.0 里程碑版本作为gradle的编译版本,该版本gradle编译速度有所加速,更加令人兴奋的是完全支持Java8。当然,对于Kotlin的支持,在这个版本也有所体现,Kotlin插件默认是安装的。

    一、依赖变化

    当我们使用Android Studio3.0新建项目时会发现,默认的依赖由之前的compile更改为implementation了。

    3.0 以下版本build.gradle中依赖的写法:

    compile fileTree(dir: 'libs', include: ['*.jar'])
    
    • 1
    • 2

    但在3.0后的写法为

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    或
    api fileTree(dir: 'libs', include: ['*.jar'])
    • 1
    • 2
    • 3

    二、区别

    在3.0版本中,compile 指令被标注为过时方法,而新增了两个依赖指令,一个是implementation和api,这两个都可以进行依赖添加,但是有什么区别呢?

    api

    完全等同于compile指令,没区别,你将所有的compile改成api,完全没有错。

    implementation

    这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。

    举个例子:

    比如我在一个libiary中使用implementation依赖了gson库,然后我的主项目依赖了libiary,那么,我的主项目就无法访问gson库中的方法。这样的好处是编译速度会加快,推荐使用implementation的方式去依赖,如果你需要提供给外部访问,那么就使用api依赖即可

    在Google IO 相关话题的中提到了一个建议,就是依赖首先应该设置为implementation的,如果没有错,那就用implementation,如果有错,那么使用api指令,这样会使编译速度增快。

    三、说明

    下面是2.x版本依赖的说明,括号里对应的是3.0版本的依赖方式。

    compile(api)

    这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。

    provided(compileOnly)

    只在编译时有效,不会参与打包,可以在自己的moudle中使用该方式依赖。比如com.android.support,gson这些使用者常用的库,避免冲突。

    apk(runtimeOnly)

    只在生成apk的时候参与打包,编译时不会参与,很少用。

    testCompile(testImplementation)

    testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。

    debugCompile(debugImplementation)

    debugCompile 只在debug模式的编译和最终的debug apk打包时有效。

    releaseCompile(releaseImplementation)

    releaseCompile 仅仅针对Release模式的编译和最终的Release apk打包。

    转自:https://blog.csdn.net/silenceoo/article/details/78735687

    展开全文
  • 前面一篇文章Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法android节点配置完全解析(二)总结了下Android Studio中Gradle 脚本中最终哟啊的的形式,详细介绍了Project下几乎所有重要文件及目录的...

    引言

    前面一篇文章Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法android剩余子节点配置完全解析(三)总结了下Android Studio中Gradle 脚本中最重要的android节点的配置相关知识,即主要是总结了针对android 插件自身进行配置的,这一篇是关于Gradle自身对于项目打包运行依赖的一些管理 ,Gradle系列文章链接如下:

    一 、dependencies节点

    1、基本配置

    上面android节点内部是配置引入的Android插件的,而android节点之外则完全是配置指导Gradle编译的相关信息的,其中dependencies就是所谓的依赖库配置,在android中没有配置productFlavors节点时候功能语法和Project 根目录下的大同小异,而在配置了productFlavors之后,则可以针对不同的单个productFlavors 或者Build Type 进行配置不同的依赖库,同样的在选择对应的Build Variant时候会主动合并到主源集中。

    dependencies {
        //引入文件树,这里会把libs目录下所有的jar包自动引入
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:26.1.0'
        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'
        //引入指定jar包文件,这里传递是相对路径即相当于module下的build.gradle文件的路径,如以下写法则是引入与module下的build.gradle同路径下的jar包
        implementation files('crazymo.jar')
        //引入依赖库Module方式1
    	 implementation project(':libcrazymo') 
    	  implementation project(path:':libcrazymo') 
    }
    

    2、依赖管理及引入依赖

    2.1、引入依赖命令

    gradle3.0中compile依赖关系已被弃用,被implementation和api替代provided被compile only替代,apk被runtime only替代。

    • runtime only——只打包不参与编译,用于指定Gradle 不与应用的apk一起打包的依赖库,如果运行时无需依赖此依赖库,这将有助于apk大小的优化。

    • compile only——只编译不打包到apk

    • api——跟2.x版本的 compile完全相同

    • implementation——只能在内部使用此模块,比如我在一个library中使用implementation依赖了gson库且我的主项目依赖了library,那么主项目就无法访问gson库中的方法,这样的好处是编译速度会加快,推荐使用implementation的方式去依赖,如果你需要提供给外部访问,那么就使用api依赖即可。除了使用静态依赖的方式,还可以使用动态的形式进行依赖(实际项目中不太推荐),以下就是使用另一种形式进行依赖,虽然使用三句话都配置了相同的group和module的依赖,不过编译不会出错,因为Groovy会自动为你选择最新版本的并排除重复的。

    注意:api 会自动传递依赖,而implementation不会自动传递依赖,举个例子在lib module中使用implementation依赖了第三方库GSON时,直接在app 主module无法使用,你需要改成api来依赖。
    在这里插入图片描述
    神奇的是即使同时使用上面的语句引入不同的动态版本,也不会发生依赖冲突,因为Groovy在处理依赖的时候,遇到同一group 和name的库时会自动使用最高版本的。

    2.2、使用 gradlew :app:dependencies 查看app 所依赖库的关系。

    其实这所谓的依赖关系就是各种对应.pom文件的图形展示。
    在这里插入图片描述

    3、依赖冲突解决

    在编译过程中Gradle 除了会把脚本里配置的库自动引入之外还会把local.properties下的SDK和NDK 下的依赖库引入,作为一个本地代码库,这些是由android插件默认引入的
    在这里插入图片描述
    接下来以一个简单例子:

    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'
        })
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.android.support:recyclerview-v7:28.0.0'
        implementation 'com.github.hotchemi:permissionsdispatcher:2.3.0',{
            //把group为com.android.support ,module为support-v4的包排除依赖,如果不添加这段就会报以下的错误
            //exclude(group:'com.android.support',module:'support-v4')
        }
        annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.0' //java8不能使用apt
    }
    

    在compileSdkVersion为28编译运行时会报如下的错误(从关键词可以初步判断是jar包冲突了):
    在这里插入图片描述
    接下来说明下解决依赖冲突的常见的步骤和流程:

    3.1、首先通过 ./gradlew :app:dependencies 查看app 所依赖库的关系。

    在这里插入图片描述

    3.2、分析app 依赖库的关系

    在这里插入图片描述

    3.3、解决冲突

    解决冲突的理论依据是因为Groovy给我们在DependencyHandler中重载了添加依赖的方法,其中有一个是允许传递闭包的(用于配置Dependency),在闭包里我们可以实现自己的逻辑去排除冲突

    • 使用ModuleDependency的 exclude传递group和module动态移除
     implementation 'com.github.hotchemi:permissionsdispatcher:2.3.0',{
            //把group为com.android.support ,module为support-v4的包排除依赖,如果不添加这段就会报以下的错误
            exclude(group:'com.android.support',module:'support-v4')
        }
    

    则部分依赖关系为
    在这里插入图片描述

    • 除了排除依赖,还可以指定不处理传递依赖 直接在闭包内配置 transitivie false,默认为true,这种十分不推荐因为有可能导致不能正常工作
        implementation 'com.facebook.fresco:fresco:0.14.0',{
            // 简单暴力 只依赖group为com.facebook.fresco name为fresco 版本为0.14.0的库,而其内部的内来哭不传递过来
            transitive false
        }
    

    则编译之后库依赖关系变为

    在这里插入图片描述

    二 、configurations节点

    配置项目的其他信息,可以支持很多操作,比如说配置编译的版本,自定义依赖分组的具体操作等等,甚至dependencies 内部用到的编译名称就是Groovy 默认先添加到configurations下的,当然你也可以像下面这样的添加自定义的分组,不过你得自己去实现功能。

    在这里插入图片描述

    三、SigningConfigs节点

    在Android系统上系统是通过applicationId和签名来区分标识唯一apk的,为了安全性apk必须是签名才能运行在系统上的,默认情况下比如说在debug 变体下会去使用XXX/.android/debug.keystore进行签名,也可以给不同的ProductFlavor 去配置不同的签名
    在这里插入图片描述
    未完待续…

    展开全文
  • 当我们使用Android Studio3.X新建项目时会发现,默认的依赖由之前的compile更改为implementation了。 3.0 以下版本build.gradle中依赖的写法: compile fileTree(dir: 'libs', include: ['*.jar']) 但在3.0后的...
  • 前言 Android Studio版本更新至3.0了,更新后,连带着com.android.tools.build:gradle 工具升级到了3.0.0,在3.0.0中使用了最新的Gralde 4.0 里程碑版本作为gradle的编译版本,该版本gradle编译速度有所加速,...
  • Android Studio中有六种依赖Compile,Provided,APK,Test compile,Debug compile,Release compile Compilecompile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。ProvidedProvided是...
  • 几乎所有的东西,在程序界都可以从HellWorld中入门,HelloWorld就是程序猿的母亲 ——程序猿首先你需要准备:1.AndroidStudio等基本的开发工具和环境2.创建一个新的项目...
  • 最新版Android Studio V2.2.2版本分享 最新版Android Studio V2.2.2版本百度云下载:http://pan.baidu.com/s/1kVsGZkV
  • android-apt是由一位开发者自己开发的apt框架,源代码托管在这里,随着Android Gradle 插件 2.2 版本的发布,Android Gradle 插件提供了名为 annotationProcessor 的功能来完全代替 android-apt 说明:只在编译...
  • 但我们自己的包中的包或者类和sdk中android.jar的包或者类相同时,android studio默认使用的时android.jar中的内容,而如果我们想使用自己的包中的内容的话,就必须把优先级放到android studio之前。这是这样一个...
  • Gralde 4.0 Kotlin    compile fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])api fileTree(...
  • Android Studio 引用系统 jar 包的正确姿势
1 2 3 4 5 ... 20
收藏数 1,570
精华内容 628
关键字:

dependencies provided studio 新版也是android