[译]开发工具的No-op版本

原文链接:https://medium.com/@orhanobut/no-op-versions-for-dev-tools-b0a865934398

开发工具的No-op版本

“在计算机科学中,NOP或NOOP(无操作的简称)是汇编语言指令,编程语言语句或计算机协议命令,它什么都不做。”

wiki

对于每个拉取请求,我们总结了构建信息以及可能的更改,并用电子邮件发送到CI服务器相应的组。

最近我们提交了一个拉取请求,并且有一些有趣的指标。拉取请求增加了apk大小和方法数量。以下数据是报告的一小部分。检查构建报告以获取更多详细信息

前置信息

APK信息(正式版本)

提交的唯一重大变化是引入Facebook Stetho。这是一个很好的调试工具,我们需要一些具体的原因,但绝对不想增加正式apk中的方法数量和大小。

有几个选项可以从正式的apk中丢弃它。

Proguard

我们(还)没有使用它。我想是时候在考虑一次了。

使用无操作版本的库

有些库提供了无操作版本,如LeakCanary。有些则没有(像LeakCanary一样)。

releasecompile编译无操作实现,apk不会包含库中任何冗余代码。

dependencies {
   debugCompile '...:leakcanary-android':1.4-beta2''
   releaseCompile '...:leakcanary-android-no-op:1.4-beta2'
 }

不提供无操作版本的库

例如:Stetho没有这个选项,因此我们必须自己创建它。Stetho有许多可选的配置,因此他们不希望有一个无操作版本。

我们有几个选项来创建自己的无操作版本。基本上所有的行为都做同样的事情,唯一的区别是实现。

为库创建一个模块

创建库的无操作版本作为模块。在这种情况下,我们只使用Stetho的一种方法,所以让我们在模块中创建一个no-op方法。

  • 创建模块。File -> New -> New Module
  • 创建与同包中的工具完全相同的名称。
  • 添加无操作实现
  • 在build.gradle指定debugCompile使用工具依赖,releaseCompile使用无操作版本。
  • 对于非调试构建,只允许使用无操作实现。

使用DebugApplication

由于大多数调试工具都是在应用程序类中初始化的,所以我们可以利用它。

  • 创建调试源码集文件夹。src/debug
  • 创建DebugApplication类,该类继承自自定义Application。
  • 在DebugApplication中初始化开发工具。
  • 在debug源码集中创建AndroidManifest.xml。我们利用manifest合并,并使用“tools:replace”替换DebugApplication中的实际应用程序。这将使用“.DebugApplication”替换“android:name”的标记值。
  • 在build.gradle中指定针对debugCompile。
  • 对非调试构建,只有无操作实现。

使用DevUtils的变体源码集

由于我们使用几种不同的开发者工具,因此我们更愿意把它们放到不同的源码集中,而不是为每个工具创建一个类,而是创建一个实用工具类,他讲所有逻辑包含在内部,因此我们不必考虑哪个类在那个包里等待。

  • 针对每个构建类型创建源码集。src/debug,src/release。
  • 创建工具类,例如DevUtils。
  • 为每个开发者工具创建适当的脚手架。 即:initStetho,initSomethingElse。
  • 在应用中使用DevUtils。DebUtils.initStetho(this)等。
  • 在build.gradle中,使用适当的编译选项,通常是debugCompile,除非有其他具有特定工具的生成类型。

每个解决方案都有优缺点,但总的来说,使用无操作版本来构建apk是非常好的。对所有人都好。

猜你喜欢

转载自blog.csdn.net/lihenair/article/details/80242745