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

mkdir vs mkdirs


Если вы хотите создать один каталог, используйте mkdir

new File("/path/directory").mkdir();

Если вы хотите создать иерархию структуры папок, используйте mkdirs

 new File("/path/directory").mkdirs();
0
задан Dror 16 January 2019 в 21:21
поделиться

2 ответа

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

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

Например:

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

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

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

0
ответ дан Martin Zeitler 16 January 2019 в 21:21
поделиться

Вы можете использовать либо метод 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 и временные generated.xml файлы для вариантов выпуска и отладки:

Релиз:

/ app / build / сгенерированный / source / buildConfig / релиз /your/package/app/BuildConfig.java:

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

/ app / build / генерированный / res / resValues ​​/ выпуск ] /values/generated.xml

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

Отладка:

/ app / build / generate / source / buildConfig / debug / your /package/app/BuildConfig.java:

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

/ app / build / generate / res / resValues ​​/ debug /values/generated.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Values from build type: debug -->
    <string name="admob_id" translatable="false">StringResourceForDebug</string>
</resource>
[1126 ] Затем в вашем коде вы просто используете константу или ресурс, как обычно:

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

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

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

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

0
ответ дан dominicoder 16 January 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: