• Gradle 依赖关系中 compile和 implementation的区别


    将在一个项目中展示implementation,api以及compile之间的差异。

    假设我有一个包含三个Gradle模块的项目:

    • app(Android应用)
    • my-android-library(Android库)
    • my-java-library(Java库)

    app具有my-android-library与依赖。my-android-library具有my-java-library依赖。

    依赖1

    my-java-library有一个MySecret班

    public class MySecret {
    
        public static String getSecret() {
            return "Money";
        }
    }

    my-android-library 拥有一个类 MyAndroidComponent,里面有调用 MySecret 类的值。

    public class MyAndroidComponent {
    
        private static String component = MySecret.getSecret();
    
        public static String getComponent() {
            return "My component: " + component;
        }    
    }

    最后,app 只对来自 my-android-library

    TextView tvHelloWorld = findViewById(R.id.tv_hello_world);
    tvHelloWorld.setText(MyAndroidComponent.getComponent());

    现在,让我们谈谈依赖性...

    app需要:my-android-library库,所以在app build.gradle文件中使用implementation

    (注意:您也可以使用api/compile, 但是请稍等片刻。)

    dependencies {
        implementation project(':my-android-library')      
    }

    依赖2

    您认为 my-android-library 的 build.gradle应该是什么样?我们应该使用哪个范围?

    我们有三种选择:

    dependencies {
        // 选择 #1
        implementation project(':my-java-library') 
        // 选择 #2
        compile project(':my-java-library')      
        // 选择 #3
        api project(':my-java-library')           
    }

    依赖3

    它们之间有什么区别,我应该使用什么?

    compile 或 api(选项#2或#3)

    依赖4

    如果您使用 compile 或 api。我们的 Android 应用程序现在可以访问 MyAndroidComponent 依赖项,它是一个MySecret 类。

    TextView textView = findViewById(R.id.text_view);
    textView.setText(MyAndroidComponent.getComponent());
    // 你可以访问 MySecret
    textView.setText(MySecret.getSecret());

    implementation(选项1)

    依赖5

    如果您使用的是 implementation 配置,MySecret 则不会公开。

     
    TextView textView = findViewById(R.id.text_view);
    textView.setText(MyAndroidComponent.getComponent());
    // 你无法访问 MySecret 类
    textView.setText(MySecret.getSecret()); // 无法编译的

    那么,您应该选择哪种配置?取决于您的要求。

    如果要公开依赖项,请使用 api 或 compile。

    如果您不想公开依赖项(隐藏您的内部模块),请使用implementation。

  • 相关阅读:
    关于一个标准的poi下载文件模板 可拿来来直接使用
    关于史上最简单的导出(导出excal)
    关于spring MVC的面试题
    关于响应式布局(pc端访问自适应 手机端访问自适应)
    密码生成器
    关于poi的导出(POI)
    关于MUI一个很实用的前端框架
    (转载)插画版Kubernetes指南(小孩子也能看懂的kubernetes教程)
    (转载)Python tips: 什么是*args和**kwargs?
    python编程中的if __name__ == 'main': 的作用和原理
  • 原文地址:https://www.cnblogs.com/moxiaotao/p/12983662.html
Copyright © 2020-2023  润新知