Варианты Android с разными зависимостями и одним и тем же файлом класса

У меня есть два разных варианта моего приложения для Android: lite и pro. В приложении у меня есть класс с именем customFragment.java, который включен в основной (не различается между вариантами) и включает также следующий код:

import haibison.android.lockpattern.LockPatternActivity;    

private void showLockPattern() {
    if (BuildConfig.IS_VERSION_PRO) {
        Intent intent = new Intent(LockPatternActivity.ACTION_VERIFY_CAPTCHA, null, this, LockPatternActivity.class);
        startActivityForResult(intent, PATTERN_ID);
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PATTERN_ID && resultCode == Activity.RESULT_OK) {
        Log.i("App", "OK!");
    }
}

А в app.gradle я включил библиотеку LockPattern только для версии pro:

dependencies {
    proCompile 'com.github.haibison:android-lockpattern:6.0.0'
}

Класс, который я описал, одинаков для обоих вариантов (то есть в основной папке), так как он довольно большой, и я не хочу дублировать код в обоих вариантах. Вариант pro строится успешно, но вариант lite показывает ошибку, поскольку я также не импортирую зависимость для варианта lite.

Одно из решений, которое я вижу, состоит в том, чтобы добавить библиотеку шаблонов блокировки в оба варианта, а затем использовать proGuard, удалив ее из варианта lite. Хотя я считаю, что это может сработать, это, вероятно, не самый гладкий вариант. Конечно, я мог бы просто игнорировать накладные расходы на неиспользуемую библиотеку в версии lite.

Как бы вы решили эту проблему? Я долго искал в stackoverflow, но не нашел ответа, поэтому впервые за несколько лет решил зарегистрироваться и задать вопрос.




Ответы (1)


Облегченная версия не компилируется, потому что java не может найти LockPatternActivity. Для этого вы можете использовать следующее решение.

Вам нужен класс во вкусе pro

public final class LockPatternHelper {
    private LockPatternHelper() {}

    public static void showLockPattern() {
         Intent intent = new Intent(LockPatternActivity.ACTION_VERIFY_CAPTCHA, null, this, LockPatternActivity.class);
         startActivityForResult(intent, PATTERN_ID);
    }
}

В варианте lite это должен быть тот же класс с пустым методом showLockPattern().

public final class LockPatternHelper {
    private LockPatternHelper() {}

    public static void showLockPattern() {}
}

После этого вы можете вызвать LockPatternHelper.showLockPattern() из вашего customFragment.java.

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

person m0rphine    schedule 27.10.2015