安卓 Gradle : How can I use the "debug" sources as a "provided" dependency for "release" builds

标签 android gradle android-gradle-plugin

TL;DR:是否可以将 Android Gradle 构建的“调试”Java 源添加为“发布”构建的“提供”依赖项?

我正在为我的应用程序使用标准的 Android Gradle 构建文件。当我运行 ./gradlew build 时,它会同时生成“发布”和“调试”APK。这是预期的。

我在 src/main/debug 中有一些额外的类,它们添加了一些额外的功能来调试构建,这些功能永远不会在发布构建中提供。例如,有一个 BroadcastReceiver 响应通过 adb shell am broadcast ... 发出的命令,另一个类设置 StrictMode 策略。这些类都不应该存在在“发布”APK 中,更不用说被“发布”APK 中的代码使用了。

这些“调试”类在 Application.onCreate() 中初始化。然而,由于这些类甚至不存在于“发布”构建中,我选择将这些类的“ stub ”版本添加到 src/release/java 中,以便发布构建编译。

喜欢做的是从 src/release/java 中删除 stub 并保护所有对仅存在于 src/debug 中的类的调用/java 通过类似以下内容:

if (BuildConfig.DEBUG) {
    DebugBroadcastReceiver.register(this);
    StrictModePolicy.enable(this);
}

挑战在于,由于这些类甚至不存在于“发布”Java 源目录中,因此 Java 编译失败,因为仅存在于“调试”目录中的引用类不在类路径中。

我想解决这个问题的方法是修改 build.gradle 以包含来自 src/debug/java< 的已编译 .class 文件 作为“发布”构建的“提供”依赖项。我对“已提供”依赖项的理解是,依赖项将在编译期间位于类路径中,但不会包含在生成的 APK 中,这正是我想要的。

到目前为止,我已经在 build.gradle 中尝试了以下内容:

dependencies {
    // a bunch of dependencies that are omitted for brevity
    releaseProvided project(path: ":app", configuration: "debug")
}

但它失败了:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Cannot evaluate module app : Configuration with name 'debug' not found.

具有 Gradle 和 Android 专业知识的人可以建议一种实现此目标的方法吗?

最佳答案

src/debug/java 中创建您的应用程序的子类。使用相同的包但使用不同的类名。覆盖 onCreate() 并在此处调用调试类。

将 list 添加到src/debug,并覆盖应用程序类:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.yourapp">

    <application
        android:name=".YourAppDebug"
        tools:replace="android:name">
    </application>
</manifest>

关于安卓 Gradle : How can I use the "debug" sources as a "provided" dependency for "release" builds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31148366/

相关文章:

android - ListFragment setListAdapter

android - 自动更新 Android 商务应用程序的方法?

android - Gradle 任务 jacoco 报告生成空的 html 报告文件(未指定类文件)

selenium - 无法使用gradle build命令运行testng xml

安卓工作室 : Could not find support-annotations. jar

java - 如何在运行时确定retrofit的版本?

java - 如何从 onResponse 返回值

java - 如何调试从 eclipse 部署到 tomcat 的问题?

android - 如何解决错误:无法合并dex

Android gradle 构建给出了 DuplicateFileException