android 依赖只编译不打包到apk中

[TOC]

几种依赖方式

image.png

具体每个什么意思,大家谷歌一下就知道了,这里不在陈述

区别和使用

implementation和api是取代之前的compile的,其中api和compile是一样的效果,implementation有所不同,通过implementation依赖的库只能自己库本身访问,举个例子,A依赖B,B依赖C,如果B依赖C是使用的implementation依赖,那么在A中是访问不到C中的方法的,如果需要访问,请使用api或compile依赖

开发中的注意事项

在实际开发中有些依赖在debug的时候需要参与编译并使用,而打包的时候不想打包到apk中

1 怎样查看是否打进apk中了

Stetho是Facebook推出的一款使用Chrome来调试Android Application的工具,就拿这个库来实验吧,首先采取正常的依赖方式打包apk,然后将apk拖进studio中,然后双击classes.dex

image.png

可以看到Facebook的包名,然后库的大小为200多k,实际开发中打包的时候基本是不需要的,所以能少200k就少点吧


image.png

2 解决方法

  1. 在gradle里面同时使用releaseCompileOnly和debugCompile即可
image.png
  1. 在代码中需要进行debug模式判断,只有debug模式才会初始化Stetho或者只有在debug模式才会使用Stetho
    if (BuildConfig.DEBUG) {
        //初始化Facebook网络监测
        Stetho.initializeWithDefaults(this);
    }

在Okhttp里面添加拦截器

image.png

前后对比

通过打包前后对比发现能减少很多k,呵呵能小点就小点,毕竟这只是一个测试库,以后还有更多的测试库都可以用这个方法


image.png

总结

如果单纯的用debugCompile一种依赖方式不能解决这个问题,因为在debug模式需要用到库,那代码中就会出现相应的导包和初始化代码,代码可以用debug标志位进行判断,但是导包语句就没办法通过编译了,所以在结合releaseCompileOnly就可以解决打包apk的时候报错问题了,只要编译器的时候没有错误就没问题了,因为Stetho的初始化在release版本不会执行,整体就是这样,思路很简单就是根据不同的依赖类型和不同的编译模式来进行选择性的添加依赖.

当然这几种依赖也是有优先级的,目前来看同一个依赖如果用Compile,releaseCompileOnly,debugCompile同时修饰一个依赖的话,最后以Compile为主,大概就是这样,更深的没有研究,有什么问题希望打家一起探讨.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,916评论 25 709
  • 博客原文链接 Android百大框架排行榜(转) 说明: 无聊写一篇笔记式文章. 精力有限,很多错误之处,受时间与...
    码农朱同学阅读 2,759评论 0 27
  • 请允许我借鉴前辈们的东西~~~~ 感激不尽~~~~~ 以下为Android 框架排行榜 么么哒~ Android...
    嗯_新阅读 2,178评论 3 32
  • 一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由、网络层、UI层、通信层或其他单一功能的框架 混合开发框架:...
    伟子男阅读 5,275评论 0 161
  • 我希望自己能做一个平凡的、快乐的人
    Innocenceee阅读 278评论 0 0