我有一个具有多种风格的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}
中(遵循不同口味的不同资源的相同逻辑),但是由于无法引用{{ 1}}类是“与风味无关的”,例如。导入Application
类的每个类都只包含以下行:
Appplication
反之亦然,如果我在import {package}.Application;
中为每种口味指定了具体实现,例如。
build.gradle
然后我无法构建其他版本,因为它们的包装参考不存在。
我希望我能解释我的问题。如果您需要有关当前应用程序实现的进一步说明或详细信息,我们很乐意提供它们。
谢谢。
答案 0 :(得分:0)
一种始终有效但不理想的解决方案是在访问HockeyApp API并捕获异常时使用反射。
另一种解决方案是添加一个compileOnly
依赖关系,该依赖关系适用于所有口味,但仅对某些口味具有实际的implementation
依赖关系,然后 try / catch 所有HockeyApp调用在catch子句中添加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.
}