Android скрипт gradle для удаления спецификаций вкуса продукта c зависимостей и его ссылок - PullRequest
0 голосов
/ 30 января 2020

Мое приложение имеет два варианта, и каждый из них имеет свои собственные зависимости, и я ДОЛЖЕН импортировать только спецификацию аромата c зависимость

flavorDimensions 'x'
productFlavors {
        A {
            dimension 'x'
        }
        B {
            dimension 'x'
        }
}
[...]
dependencies {
    AImplementation 'com.A.library:1.0.0' 
    BImplementation 'com.B.library:1.0.0'
}

. Таким образом, при его создании не включается библиотека "B", когда выбрав вариант «A», однако это приводит к java ошибкам компиляции, потому что у меня есть классы (~ 100 упаковщиков / маршрутизаторов), которые имеют ссылки на классы и методы из библиотеки B, которые мне нужно комментировать / удалять, поскольку они никогда не будут быть использованным / invoked.

Моя идея состоит в том, чтобы создать задачу Gradle для go через классы оболочки / маршрутизатора и удалить все операции импорта, которые начинаются с "com. $ {flav} .library", изменить все аргументы и возвращать типы (которые начинаются с com. $ {flav}) в Object, и комментировать строки кода, которые находятся внутри методов, которые вызывают ошибки компиляции типа «Класс не найден» или «Отсутствуют ссылки»?.

Пример: если я хочу создать APK для аромата "B", я хочу go из этого:

import com.third.party.library.ThirdParty;
import com.myproject.X;
public final class SomeClass extends ThirdPary {

    public Something(com.A.library.ClassZ param0, com.B.library.ClassZ param1) {
        super(param0, null);
        if (param0 == null) {
            setParam0(pram1);
        }
    }

    public static final Object getInstance(String param0, Boolean param1) {
        if (X.isB()) {
            return com.B.library.Something.getInstance(param0, param1);
        } else {
            return com.A.library.Something.getInstance(param0, param1);
        }
    }

    public com.A.library.Somthing getOldInstance() {
        return (com.A.library.Something) Something.getInstance()
    }
}

до этого:

import com.third.party.library.ThirdParty;
import com.myproject.X;
public final class SomeClass extends ThirdPary {

    public Something(Object param0, com.B.library.ClassZ param1) {
        super(param0, null);
        if (param0 == null) {
            setParam0(pram1);
        }
    }

    public static final Object getInstance(String param0, Boolean param1) {
        if (X.isB()) {
            return com.B.library.Something.getInstance(param0, param1);
        } else {
            //return com.A.library.Something.getInstance(param0, param1);
        }
    }

    public Object getOldInstance() {
        return (Object) Something.getInstance()
    }
}

таким образом, я можно избежать Ошибки компиляции и генерирование бесплатной APK-зависимости.

...