как андроид-студия хранит пары конфигурации / ключ / значение для теста / продукта? - PullRequest
0 голосов
/ 17 января 2019

Я хочу сохранить такие параметры, как admob-id и путь к папке эти параметры различны для теста / продукта

как мне подходить к этому в Android Studio (в среде Spring есть файл свойств, я ищу правильный путь для IDE Android Studio)

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете использовать метод buildConfigField или resValue блока buildType в плагине Android Gradle. Первый генерирует глобальные константы Java, а второй - ресурсы Android.

Вы можете просмотреть официальные документы, показывающие пример использования обоих здесь .

Я все равно укажу здесь, если это поможет.

Сначала вы определяете одно или несколько полей конфигурации или значения res в вашем файле build.gradle. В качестве примера для идентификатора AdMob вы должны определить строковые константы.

android {
    buildTypes {
        release {
            buildConfigField "String", "ADMOB_ID", '"ConstantIdForRelease"'
            resValue "string", "admob_id", "StringResourceForRelease"
        }
        debug {
            buildConfigField "String", "ADMOB_ID", '"ConstantIdForDebug"'
            resValue "string", "admob_id", "StringResourceForDebug"
        }
}

Это создаст файлы BuildConfig.java и temp generated.xml для вариантов выпуска и отладки:

Release:

/ приложение / сборки / генерироваться / источник / buildConfig / выпуск / ваш / пакет / приложение / BuildConfig.java:

public final class BuildConfig {
    public static final String ADMOB_ID = "ConstantIdForRelease";
}

/ приложение / сборки / сгенерированные / RES / resValues ​​/ выпуск / значения / generated.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Values from build type: releaes -->
    <string name="admob_id" translatable="false">StringResourceForRelease</string>
</resource>

Debug:

/ приложение / сборки / генерироваться / источник / buildConfig / отлаживать / ваш / пакет / приложение / BuildConfig.java:

public final class BuildConfig {
    public static final String ADMOB_ID = "ConstantIdForDebug";
}

/ приложение / сборки / сгенерированные / RES / resValues ​​/ отлаживать / значения / generated.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Values from build type: debug -->
    <string name="admob_id" translatable="false">StringResourceForDebug</string>
</resource>

Тогда в вашем коде вы просто используете константу или ресурс как обычно:

callMethodThatNeedsAdModId(BuildConfig.ADMOB_ID);
// OR
callMethodThatNeedsAdModId(context.getString(R.string.admob_id));

Фактическое значение переменной конфигурации сборки или строкового ресурса будет определяться в зависимости от текущего типа / варианта сборки.

В любом случае работает, так что вы должны использовать? Если вам нужен доступ к строке конфигурации в ресурсах XML (скажем, вы хотите изменить label Действия в файле AndroidManifest.xml при отладке), вы должны использовать этот ресурс. В противном случае просто используйте свойство конфигурации сборки, так как вам не нужен контекст для доступа к нему.

Надеюсь, это поможет!

0 голосов
/ 17 января 2019

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

при определении производственных значений в main и переопределении в debug этого должно быть достаточно.

например:

  • src/main/res/values/strings.xml (main по умолчанию для всех типов сборки).
  • src/debug/res/values/strings.xml (модульные тесты также имеют тип сборки debug).

эти файлы будут объединены при сборке; и он переопределит значения, где совпадает имя строкового ресурса. У исходного набора debug может быть только несколько файлов, поскольку он имеет только переопределения.

в AdMob проблема заключается только в том, что у каждого типа сборки разные имена пакетов (что не поддерживается); недавно закончилась добавлением альтернативного имени пакета с суффиксом .debug.

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