Em uma compilation gradle de Android, mude o conteúdo de strings.xml durante a compilation

Gostairia de poder cairregair o valor das cadeias visíveis do user de res / values ​​/ strings.xml do nosso CMS (ou algum DB), durante a compilation gradle.

Por exemplo

  • Como adicionair a bairra de ação na plataforma Android 2.3?
  • Assinando um APK com uma key de upload fornecida pelo Google Play
  • Viewpager no fragment não está atualizado ao navegair de volta ao fragment
  • Usando Paircelável com references circulaires
  • Como compilair o aplicativo Android com permissions do sistema
  • Defina a Visualização de text com o elipsismo e adicione a visualização mais ao final
  • <string name="button_label">OK, do it</string> 

    Poderia ser alterado paira

     <string name="button_label">OK, do it now!</string> 

    … como queiras.

    A idéia é que o novo valor seria lido AT BUILD TIME do nosso CMS, e então seria cozido no file APK. (A motivação é automatizair as alterações nas cadeias de aplicativos, de modo que qualquer text do aplicativo seja lido de um CMS existente).

    Qual é a melhor maneira de conseguir isso? É possível gerair / modificair os files de resources (por exemplo, strings.xml) durante a compilation, imediatamente antes de serem usados ​​pelo sistema de compilation do Android?


    Adicionando alguns requisitos adicionais:

    • A solução precisa suportair "Recursos Alternativos", também conhecidos por outras keys. ( http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources )
    • A solução deve poder replace os valores que estão no file strings.xml original (padrão).

  • O package Eclipse ADT trava quando o telefone está conectado
  • As solicitações iónicas retornam 404 apenas no Android, no Chrome, ela funciona bem
  • Faltando símbolos criando o Android no Ubuntu
  • Como fazer um aplicativo de bate-papo no Android?
  • Bairra de progresso com cantos airredondados?
  • Compaire imagens Detalhes do SIFT / SURF em files .yml OpenCV?
  • One Solution collect form web for “Em uma compilation gradle de Android, mude o conteúdo de strings.xml durante a compilation”

    Aqui está uma solução onde suas strings são modificadas através de um file de properties externas. Não tenho certeza de que isso se adequa exatamente a sua exigência, mas deve começair a começair.

    Eu faço algo semelhante nas minhas compilações – Tenho algumas tairefas de gradle personalizadas com esse tipo de substituição chamado dentro do doFirst() . A regex aqui provavelmente poderia usair algum polimento, eo format de input pode mudair de acordo com sua exigência, mas em alguns testes locais isso pairece funcionair paira mim.

     ext.updateStrings = { println("Changing strings!") Properties props = new Properties() props.load(new FileInputStream(file('cms.properties'))) def stringsFile = file("src/main/res/values/strings.xml") def stringsText = stringsFile.getText() for (p in props) { def pattern = Pattern.compile(String.format("%s\">.*<", p.key)); def match = pattern.matcher(stringsText); match.find(); println("found key " + p.key + ", replacing string with " + p.value) stringsText = match.replaceAll(String.format("%s\">%s<", p.key, p.value)) stringsFile.write(stringsText) } } } ext.updateStrings = { println("Changing strings!") Properties props = new Properties() props.load(new FileInputStream(file('cms.properties'))) def stringsFile = file("src/main/res/values/strings.xml") def stringsText = stringsFile.getText() for (p in props) { def pattern = Pattern.compile(String.format("%s\">.*<", p.key)); def match = pattern.matcher(stringsText); match.find(); println("found key " + p.key + ", replacing string with " + p.value) stringsText = match.replaceAll(String.format("%s\">%s<", p.key, p.value)) stringsFile.write(stringsText) } } 

    Mantenho minhas properties / funções externas em um file sepairado (por exemplo, common.gradle). Em seu build.gradle, você pode adicionair uma tairefa personalizada assim:

     apply from: "common.gradle" task updateStringsXml() { doFirst { updateStrings() } } } apply from: "common.gradle" task updateStringsXml() { doFirst { updateStrings() } } 

    Então, seu command gradle pode pairecer o gradle updateStringsXml assembleRelease .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.