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< 的已编译
作为“发布”构建的“提供”依赖项。我对“已提供”依赖项的理解是,依赖项将在编译期间位于类路径中,但不会包含在生成的 APK 中,这正是我想要的。.class
文件
到目前为止,我已经在 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/