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

[TOC]

几种依赖方式

《android 依赖只编译不打包到apk中》 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

《android 依赖只编译不打包到apk中》 image.png

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

《android 依赖只编译不打包到apk中》 image.png

2 解决方法

  1. 在gradle里面同时使用releaseCompileOnly和debugCompile即可

《android 依赖只编译不打包到apk中》 image.png

  1. 在代码中需要进行debug模式判断,只有debug模式才会初始化Stetho或者只有在debug模式才会使用Stetho
    if (BuildConfig.DEBUG) {
        //初始化Facebook网络监测
        Stetho.initializeWithDefaults(this);
    }

在Okhttp里面添加拦截器

《android 依赖只编译不打包到apk中》 image.png

前后对比

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

《android 依赖只编译不打包到apk中》 image.png

总结

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

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

    原文作者:李庆雪
    原文地址: https://www.jianshu.com/p/24ebbbe434a4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞