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 будет построен с?

0 ответов

Другие вопросы по тегам