2015-08-19 3 views
4

Я хочу разрешить зависимость manifestPlaceholders для каждого типа сборки и вкусов. Например, у меня естьРазрешить ярлык приложения для каждого типа сборки

productFlavors { 
     dev { 
      manifestPlaceholders = ['applicationLabel': 'DevFlavor'] 
     } 

     prod { 
      manifestPlaceholders = ['applicationLabel': 'ProdFlavor'] 
     } 
..... 

buildTypes { 
     debug { 
      def old_name = manifestPlaceholders.get('applicationLabel'); // every time is null 
//   def old_name = productFlavors.dev.manifestPlaceholders.get('applicationLabel'); // ITS OK, but not dynamic 
      manifestPlaceholders = [applicationLabel: old_name + ' Dev'] 
     } 

Есть ли решение добавить суффикс 'Dev' для отладки продуктов?

Спасибо за любую помощь

+0

Если вы хотите отрегулировать ярлык приложения для каждого типа вкуса/сборки, возможно, лучший способ сделать это, используя поля resValue/buildConfig, например. установите строку resValue в 'app_name', измените ее в applicationVariants.all и используйте ее в своем манифесте как метку приложения. Получает ли этот ответ http://stackoverflow.com/questions/22506290/buildconfigfield-depending-on-flavor-buildtype некоторую помощь? –

ответ

18

Просто чтобы дать рабочий пример на мой комментарий выше:

  1. resValue объявить в вашем defaultConfig который станет именем приложения. (. Внимание: если вы решили назвать его app_name, обязательно удалите исходный app_name свойства из файла strings.xml, или он будет конфликтовать)

    defaultConfig { 
        // applicationId, versionCode, etc. 
    
        (...) 
    
        // define your base Applications name here 
        resValue 'string', 'app_name', 'MyApp' 
    } 
    
  2. настроить свой productFlavors как вы сделали уже. Вы можете оставить их пустыми, если вам будет удобно указывать имя вашего приложения только с именем аромата или указать явное resValue, которое переопределит значение от defaultConfig.

    productFlavors { 
        dev { 
         // resValue 'string', 'app_name', 'MyAppDevFlavor' 
        } 
    
        prod { 
         // resValue 'string', 'app_name', 'MyAppProdFlavor' 
        } 
    } 
    
  3. настроить имя по resValue «s в Gradle время конфигурирования

    android.applicationVariants.all { variant -> 
        // get app_name field from defaultConfig 
        def appName = variant.mergedFlavor.resValues.get('app_name').getValue() 
    
        // concat new App name with each flavor's name 
        appName = "${appName}" 
        variant.productFlavors.each { flavor -> 
         appName += " ${flavor.name}" 
        } 
    
        // optionally add buildType name 
        appName += " ${variant.buildType.name}" 
    
        // your requirement: if buildType == debug, add DEV to App name 
        if(variant.buildType.name == "debug") { 
         appName += " DEV" 
        } 
    
        // set new resVale 
        variant.resValue 'string', 'app_name', appName 
    } 
    
  4. В вашем AndroidManifest установите app_name поле:

    <application 
        ... 
        android:label="@string/app_name" 
        ... 
        > 
    

Как я уже упоминал выше, обязательно удалите свойство app_name по умолчанию от strings.xml

+0

Когда вы запускаете логику переименования? Я регистрирую его, и он запускается, я вижу измененное имя, но apk всегда имеет оригинальное имя. Я поместил его в раздел defaultConfig. –