Можно ли включать и инициализировать HockeyApp SDK только для определенных версий? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть 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);
...
}

Текущий обходной путь - комментировать эти строки каждый раз, когда мне нужно собратьи / или создать файл .apk для аромата, который я не хочу включать в HockeyApp SDK.Конечно, есть лучший способ справиться с этим.

Я пытался создать разные файлы 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'

тогда я не могу создать другие варианты, потому что для них не существует ссылки на пакет.

Я надеюсь, что смог объяснить свой вопрос.Если вам нужны дополнительные объяснения или подробности о реализации текущего приложения, я с удовольствием предоставлю их.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 июня 2019

Единственное решение, которое всегда работает, но не идеально, - это использовать отражение при доступе к API HockeyApp и перехватывать исключения.

Другое решение состоит в том, чтобы добавить зависимость compileOnly, которая будет присутствовать во всех вариантах, но иметь фактическую зависимость implementation только для некоторых вариантов, тогда try / catch все вызовы HockeyApp с LinkageError в условие catch, чтобы приложение не зависало при отсутствии 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.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...