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

Каждый раз, когда я выпускаю свое приложение, я меняю все свои строки URL и некоторые ключи с тестирования на производство. То, как я это делаю, - это просто закомментировать тестовые строки перед выпуском. Есть ли лучший способ обработки строк на основе типа сборки?


person spaceMonkey    schedule 16.03.2016    source источник
comment
stackoverflow.com/questions/17197636/   -  person CommonsWare    schedule 16.03.2016
comment
искал этот .. отличный вопрос и ответ ..   -  person DJphy    schedule 16.03.2016
comment
Не делай этого. Вероятность появления неправильных строк в производственном коде с вашим подходом довольно высока. Сделайте это следующим образом: developer.android.com/tools/building/configuring-gradle. .html   -  person Rusheel Jain    schedule 16.03.2016
comment
@RusheelJain есть ли решение только для значений ресурсов Android?   -  person spaceMonkey    schedule 16.03.2016
comment
@spaceMonkey Да, ссылка, которую я тебе дал. Я знаю это, потому что я попробовал это сам только сегодня: P Я написал шаги в ответе ниже. Дайте знать, если что-то непонятно :)   -  person Rusheel Jain    schedule 16.03.2016


Ответы (3)


Если вы используете Android Studio, по умолчанию система создает базовые версии release и debug. Поэтому, если вы добавите папки debug и release в папку app/src вашего проекта, вы можете объявить там отдельные значения.

Итак, ваша структура должна быть такой:

project
  -app
    -src
      -debug
        -java
          ...
        -res
          -values
            -strings.xml
      -release
        -java
          ...
        -res
          -values
            -strings.xml
      -main
        -java
          ...
        -res
          -values
            -strings.xml

Я также должен добавить, что если у вас есть строка, которая не определена ни в папке debug, ни в папке release, она будет возвращена в вашу папку main.

person Jasper van de Klundert    schedule 16.03.2016
comment
поэтому каждый раз, когда я работаю над чем-то, я должен обновлять все 3 папки? - person spaceMonkey; 16.03.2016
comment
как насчет разделения конкретных строк URL-адреса на отдельный url-strings.xml, а затем наличия project/app/src/main/res/values/strings.xml project/app/src/debug/res/values/url-strings.xml project/app/src/release/res/values/url-strings.xml - person k3b; 16.03.2016
comment
нет, у вас просто есть приложение в папке main по умолчанию. Любой ресурс, который должен отличаться в сборках debug или release, вы просто добавляете в strings.xml (или, как @k3b упомянул другой файл). Android Studio всегда будет использовать резервную копию папки main, поэтому вы можете иметь 1 строку URL-адреса в папках debug/release, и она будет принимать только их. - person Jasper van de Klundert; 16.03.2016
comment
Мне пришлось использовать это для рекламных блоков admob, которые я создал в 3 новых файлах ресурсов (для основного, отладочного и релизного). В моем случае иметь релизную версию не было необходимости, хотя я все равно ее создал. Но я сделал релизную и основную версии admob.xml одинаковыми (скопировал и вставил), потому что портировал на другие ОС, которые распознавали только файлы в основной папке. - person aphoe; 02.08.2016
comment
Также не забудьте изменить вариант сборки в Android Studio, чтобы управлять всем интегрированным. - person Juan Saravia; 10.06.2017

Что ж, вы можете использовать Gradle, если вам нужно использовать несколько строк.

buildTypes {
    release {
        resValue 'string', 'adUnitIdMain', '"production-id-value-should-be-here"'
        resValue 'string', 'adUnitIdList', '"production-id-value-should-be-here"'
        resValue 'string', 'adUnitIdDetail', '"production-id-value-should-be-here"'
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    debug {
        resValue 'string', 'adUnitIdMain', '"test-id-value-should-be-here"'
        resValue 'string', 'adUnitIdList', '"test-id-value-should-be-here"'
        resValue 'string', 'adUnitIdDetail', '"test-id-value-should-be-here"'
    }
}
person Kishan Vaghela    schedule 04.06.2020
comment
Для тех, кто хочет узнать больше о resValue, вы можете прочитать документ DSL здесь: google.github.io/android-gradle-dsl/current/, как указано в документации Google здесь: developer.android.com/studio/build/build-variants#build-types - person Bruno Bieri; 06.10.2020
comment
Я искал место, где можно разместить идентификаторы рекламных блоков AdMob, и это идеальное место вместо strings.xml. Спасибо! - person GiveEmTheBoot; 31.01.2021

Просто сделайте два варианта в build.gradle. Затем два каталога, как указано в ссылке (developer.android.com/tools /building/configuring-gradle.html ). Поскольку вам нужно изменить только строки, просто скопируйте файлы strings.xml в новые каталоги (т.е. dev и production). Удалите исходный файл strings.xml.

Вот и все. :)

Нет необходимости перемещать файлы Java или другие файлы макета.

Короче говоря, оставьте в своем «основном» каталоге все, что должно быть одинаковым для всех вариантов сборки. Переопределите значения, зависящие от варианта сборки, в соответствующий каталог.

person Rusheel Jain    schedule 16.03.2016
comment
создавать вкусы? Вы имеете в виду типы сборки или вкусы продуктов? - person spaceMonkey; 16.03.2016
comment
Прости. да ароматы продукта, такие как тестирование и производство - person Rusheel Jain; 16.03.2016