android studio, как поделиться различными реализациями интерфейса класса с несколькими вариантами сборки
Наличие приложения для Android с несколькими типами сборки:. И ароматы:
staging, prod
и варианты сборки:
stagingRelease, stagingDebug, stagingAmazon, stagingFacebook
,
prodRelease, prodDebug, prodAmazon, prodFacebook
,
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
amazon {
debuggable true
}
facebook {
debuggable true
}
}
}
flavorDimensions "dimens"
productFlavors{
stage {
dimension "dimens"
}
prod {
dimension "dimens"
}
}
Также имеется интерфейс optionalClass, который имеет реальную реализацию кода только для промежуточных сборок и его заглушку для сборок prod.
public interface OptionalVerifies {
@Nullable
void doVerify(Context context);
}
// the one for staging builds (having real code implementation)
import com.facebook.stetho.okhttp3.StethoInterceptor;
public OptionalVerifiesImpl implements OptionalVerifies {
private Interceptor stethoInterceptor = null;
@Override
public void doVerify(Context context) {
// code to do verify
... ...
}
}
// the one for prod (has empty function implementation)
public OptionalVerifiesImpl implements OptionalVerifies {
@Override
public void doVerify(Context context) {//stub only, do nothing}
}
Есть главный \src\java\
someClass.java
(который будет использоваться для всех вариантов сборки), в нем будет код для вызова функции интерфейса, определенной в
OptionalVerifies
class someClass {
public void function {
...
OptionalVerifies verifyObj = new OptionalVerifiesImpl();
// which is ether a real function implementation or just a stub, that is depend on whether it is in prod or stage variant build
verifyObj.doVerify(context);
...
}
}
папки проекта:
app
\src
\main
\res
\java\com\pk
\other classes ...
\someClass.java
\OptionalVerifies.java
\amazon
\res
\facebook
\res
\debug
\res
\release
\res
поэтому общий код, общий для типов сборки:
release, debug, amazon, facebook
находятся в папке
app/src/main/
.
Теперь, поскольку есть один, который имеет реальный код, используемый для промежуточных вариантных сборок, и другой, который является просто заглушкой без реализации в
doVerify(Context context)
для использования в сборках prod-вариантов.
Итак, вопрос:
куда / в какую папку поместить реальную реализацию? и где нужно вставить заглушку, чтобы при создании варианта этапа была построена реализация с кодом, а при создании варианта prod была создана заглушка, одна из
OptionalVerifiesImpl.java
будет построен с?