java - 是否可以仅针对特定口味包含和初始化 HockeyApp SDK?
问题描述
我有一个具有多种风格的 Android 应用程序,每种风格都适用于不同的环境。我希望指定 HockeyApp SDK 在这些风格中的哪一种上被导入和初始化(或者至少能够在除一种风格之外的所有风格中使用它)。
目前我在文件上有这一行build.gradle
:
dependencies {
...
implementation 'net.hockeyapp.android:HockeySDK:5.1.0'
...
}
在主Application.java
文件中,导入并初始化 HockeyApp SDK:
import net.hockeyapp.android.CrashManager;
@Override
public void onCreate(){
super.onCreate();
CrashManager.register(this);
...
}
当前的解决方法是每次我需要为我不想包含 HockeyApp SDK 的风格构建和/或生成 .apk 文件时注释这些行。当然有更好的方法来处理这个问题。
我尝试创建不同的 Application.java 文件并将它们放在其中app/src/{flavor}
(遵循不同资源的相同逻辑以获取不同的风格),但我无法构建应用程序,因为Application
该类的每个引用都是“独立于风格的”,例如。导入该类的每个类Appplication
都只有一行:
import {package}.Application;
反过来想,如果我指定build.gradle
每种口味的具体实现,例如。
{flavor1}Implementation 'net.hockeyapp.android:HockeySDK:5.1.0'
{flavor2}Implementation 'net.hockeyapp.android:HockeySDK:5.1.0'
然后我无法构建其他口味,因为它们不存在包引用。
我希望我能够解释我的问题。如果您需要有关当前应用程序实现的进一步解释或详细信息,我很乐意为您提供。
提前致谢。
解决方案
一种始终有效但并不理想的解决方案是在访问 HockeyApp API 并捕获异常时使用反射。
另一种解决方案是添加一个compileOnly
依赖于所有风格但implementation
仅对某些风格具有实际依赖关系的依赖项,然后在 catch 子句中尝试/捕获所有 HockeyApp 调用,LinkageError
以便在运行时缺少 HockeyApp SDK 时应用程序不会崩溃。
就像是:
compileOnly 'net.hockeyapp.android:HockeySDK:5.1.0' // all flavours
{flavor1}Implementation 'net.hockeyapp.android:HockeySDK:5.1.0' // only flavor1 has HockeyApp available at runtime and in binaries.
try {
CrashManager.register(this);
} catch (LinkageError e) {
// HockeyApp not available in this flavor.
}
推荐阅读
- git - 可以将本地开发分支与另一个本地分支同步
- r - 将字符日期转换为R中的日期
- java - 找不到类路径中的 JKS 密钥库文件
- ruby-on-rails - 提交表单后更新 Ruby on rails 视图时出现问题
- openai-gym - 无法在 OpenAI 健身房的经典控制环境中更改模型参数
- java - 避免 Spring Boot 中的长依赖列表
- r - 仅当使用“sum”或“colSums”时,apply.weeky 函数才突然返回“'x' must be numeric”
- python - 当我在实时服务器上上传时,媒体文件夹中的静态文件不显示
- if-statement - 在引用两个不同单元格的手动输入单元格中创建两个 IF 语句
- python - 如何同时打开多个 Tk() 窗口?