Получите тип построения градиента в вкусе продукта

Мне нужно создать разные имена приложений в зависимости от используемого вкуса продукта.

Хотя это было легко, просто установив строковый ресурс, я больше не могу этого делать, потому что, когда приложение загружается в hockeyapp, имя приложения устанавливается как «@ string / app_name» вместо значения app_name.

Я сделал некоторый прогресс, установив метку в манифесте как «$ {applicationName}» и установив значение с помощью

manifestPlaceholders = [ applicationName : appName ]; 

В блоке аромата продукта, так что значение будет установлено во время компиляции.

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

Это урезанная версия сборки для удобочитаемости

 android { buildVersionName "1.0.0 buildTypes { release { ... nothing special } uat { signingConfig signingConfigs.debug buildType = "uat" applicationIdSuffix = "." + buildType } debug { signingConfig signingConfigs.debug buildType = "uat" applicationIdSuffix = "." + buildType } } productFlavors{ flavor1{ def appName = "app name " + buildType; manifestPlaceholders = [ applicationName : appName ]; applicationId [id] def clientIteration = [client iteration] versionName buildVersionName + clientIteration versionCode [version code] } flavor2{ ... same as above with different app name } flavor3{ ... same as above with different app name } } } 

Этот код отлично работает, за исключением того, что переменная «buildType» всегда является последней версией buildtype (в данном случае debug), что означает, что имя приложения всегда имеет отладку в конце.

Вероятно, стоит отметить, что мне не нужно ничего добавлять в конце имени приложения для релизов.

Я знаю, что я немного опаздываю на вечеринку, но если вам нужны разные имена на основе вкусов, у вас должно быть что-то вроде этого:

  productFlavors{ flavour 1 { applicationId "your_app_id" resValue "string", "app_name", "Flavour 1 app name" ....... } flavour 2 { applicationId "your_app_id" resValue "string", "app_name", "Flavour 2 app name" ....... } } 

И в вашем AndroidManifest.xml:

  android:label="@string/app_name" 

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

Вы можете добавить такие значения, как это

  android { productFlavors { Foo { applicationId "com.myexample.foo" manifestPlaceholders = [ appName:"Foo"] } Bar { applicationId "com.myexample.bar" manifestPlaceholders = [ appName:"Bar"] } } buildTypes { release { manifestPlaceholders = [ appNameSuffix:""] } debug { manifestPlaceholders = [ appNameSuffix:".Debug"] applicationIdSuffix ".debug" } } } 

И в манифесте

 <application android:label="${appName}${appNameSuffix}" ... </application> 

Если вы хотите получить доступ к различным значениям в зависимости от типа сборки, вы можете сделать это так

 buildTypes { debug{ buildConfigField "String", "Your_string_key", '"yourkeydebugvalue"' buildConfigField "String", "SOCKET_URL", '"some text"' buildConfigField "Boolean", "LOG", 'true' } release { buildConfigField "String", "Your_string_key", '"yourkeyreleasevalue"' buildConfigField "String", "SOCKET_URL", '"release text"' buildConfigField "Boolean", "LOG", 'false' } } 

И для доступа к этим значениям с использованием вариантов сборки:

  if(!BuildConfig.LOG) // do something with the boolean value 

Или

 view.setText(BuildConfig.yourkeyvalue); 

Эта ссылка http://inaka.net/blog/2014/12/22/create-separate-production-and-staging-builds-in-android/ может вам помочь.

Если у вас есть два productFlavors (например, производство и постановка)

Вы должны создать две разные папки ресурсов:

проект / приложение / SRC / производство / RES / значения / strings.xml

 <resources> <string name="root_url">http://production.service.com/api</string> </resources> 

проект / приложение / SRC / постановка / RES / значения / strings.xml

 <resources> <string name="root_url">http://staging.service.com/api</string> </resources> 

Вы должны добавить этот код внутри андроида {}:

 productFlavors { production { applicationId "com.inaka.app.production" } staging { applicationId "com.inaka.app.staging" } } 

Это хорошая идея иметь разные значки для разных productFlavors, просто добавьте значок внутри каждой папки с различными ресурсами.